A Flutter plugin for music sequencing.

Overview

flutter_sequencer

This Flutter plugin lets you set up sampler instruments and create multi-track sequences of notes that play on those instruments. You can specify a loop range for a sequence and schedule volume automations.

It uses the sfizz SFZ player on both Android and iOS. The SFZ format can be used to create high-quality sample-based instruments and do subtractive synthesis. These instruments can have modulation parameters that can be controlled by your Flutter UI. The plugin also supports playing SF2 (SoundFont) files on both platforms, and on iOS, you can load any AudioUnit instrument.

The example app is a drum machine, but there are many things you could build. The plugin is not limited to "step" based sequencing. You could make a whole sample-based DAW. You could use it to make a cross-platform app to host your SFZ instrument. You could also use it for game sound effects, or even to generate a dynamic game soundtrack.

Drum machine example on Android

How to use

Create the sequence

final sequence = Sequence(tempo: 120.0, endBeat: 8.0);

You need to set the tempo and the end beat when you create the sequence.

Create instruments

final instruments = [
  Sf2Instrument(path: "assets/sf2/TR-808.sf2", isAsset: true),
  SfzInstrument(
    path: "assets/sfz/GMPiano.sfz",
    isAsset: true,
    tuningPath: "assets/sfz/meanquar.scl",
  ),
  RuntimeSfzInstrument(
    id: "Sampled Synth",
    sampleRoot: "assets/wav",
    isAsset: true,
    sfz: Sfz(
      groups: [
        SfzGroup(
          regions: [
            SfzRegion(sample: "D3.wav", noteNumber: 62),
            SfzRegion(sample: "F3.wav", noteNumber: 65),
            SfzRegion(sample: "Gsharp3.wav", noteNumber: 68),
          ],
        ),
      ],
    ),
  ),
  RuntimeSfzInstrument(
    id: "Generated Synth",
    // This SFZ doesn't use any sample files, so just put "/" as a placeholder.
    sampleRoot: "/",
    isAsset: false,
    // Based on the Unison Oscillator example here:
    // https://sfz.tools/sfizz/quick_reference#unison-oscillator
    sfz: Sfz(
      groups: [
        SfzGroup(
          regions: [
            SfzRegion(
              sample: "*saw",
              otherOpcodes: {
                "oscillator_multi": "5",
                "oscillator_detune": "50",
              }
            )
          ]
        )
      ]
    )
  ),
];

An instrument can be used to create one or more tracks. There are four instruments:

  1. SfzInstrument, to load a .sfz file and the samples it refers to.
    • On iOS and Android, it will be played by sfizz
    • As far as I know, sfizz is the most complete and most frequently updated SFZ player library with a license that permits commercial use.
    • Sfizz supports .wav and .flac sample files, among others. I recommend using .flac when possible, since it supports lossless compression. It's easy to convert audio files to FLAC format with ffmpeg.
    • You can also create an SFZ that doesn't use any sample files by setting sample to a predefined waveform, such as *sine, *saw, *square, *triangle, or *noise.
    • Check which SFZ opcodes are supported by sfizz here: https://sfz.tools/sfizz/development/status/opcodes/
    • Learn more about the SFZ format here: https://sfzformat.com
  2. RuntimeSfzInstrument, to build an SFZ at runtime.
    • This will also be played by sfizz.
    • Instead of a file, you pass an Sfz object to the constructor. See the example.
    • You might use this so that your app can build a synth using selected oscillators, or a sampler using user-provided samples.
  3. Sf2Instrument, to load a .sf2 SoundFont file.
    • On iOS, it will be played by the built-in Apple MIDI synth AudioUnit
    • On Android, it will be played by tinysoundfont
    • I recommend using SFZ format, since sfizz can stream samples from disk. This way you can load bigger sound fonts without running out of RAM.
    • You can easily convert SF2 to SFZ with Polyphone. Just open the SF2, click the menu icon at the top right, and click "Export Soundfonts." Change the format to SFZ. The other options shouldn't matter.
  4. AudioUnitInstrument, to load an AudioUnit
    • This will only work on iOS
    • You might use this if you are making a DAW type of app.

For an SF2 or SFZ instrument, pass isAsset: true to load a path in the Flutter assets directory. You should use assets for "factory preset" sounds. To load user-provided or downloaded sounds from the filesystem, pass isAsset: false.

Important notes about isAsset: true

Note that on Android, SFZ files and samples that are loaded with isAsset: true will be extracted from the bundle into the application files directory (context.filesDir), since sfizz cannot read directly from Android assets. This means they will exist in two places on the device - in the APK in compressed (zipped) form and in the files directory in uncompressed form. So I only recommend using isAsset: true if your samples are small. If you want to include high-quality soundfonts in your app, your app should download them at runtime.

Note that on either platform, Flutter asset paths get URL-encoded. For example, if you put a file called "Piano G#5.wav" in your assets folder, it will end up being called "Piano%20G%235.wav" on the device. So if you are bundling an SFZ file as an asset, make sure that you either remove any special characters and spaces from the sample file names, or update the SFZ file to refer to the URL-encoded sample paths. I recommend just getting rid of any spaces and special characters.

Optional: keep engine running

GlobalState().setKeepEngineRunning(true);

This will keep the audio engine running even when all sequences are paused. Set this to true if you need to trigger sounds when the sequence is paused. Don't do it otherwise, since it will increase energy usage.

Create tracks

sequence.createTracks(instruments).then((tracks) {
  setState(() {
    this.tracks = tracks;
    ...
  });
});

createTracks returns Future<List>. You probably want to store the value it completes with in your widget's state.

Schedule events on the tracks

track.addNote(noteNumber: 60, velocity: 0.7, startBeat: 0.0, durationBeats: 2.0);

This will add middle C (MIDI note number 60) to the sequence, starting from beat 0, and stopping after 2 beats.

track.addVolumeChange(volume: 0.75, beat: 2.0);

This will schedule a volume change. It can be used to do volume automation. Note that track volume is on a linear scale, not a logarithmic scale. You may want to use a logarithmic scale and convert to linear.

track.addMidiCC(ccNumber: 127, ccValue: 127, beat: 2.0);

This will schedule a MIDI CC event. These can be used to change parameters in a sound font. For example, in an SFZ, you can use the "cutoff_cc1" and "cutoff" opcodes to define a filter where the cutoff can be changed with MIDI CC events. There are many other parameters that can be controlled by CC as well, such as amp envelope, filter envelope, sample offset, and EQ parameters. For more information, see how to do modulations in SFZ and how to use filter cutoff in SFZ.

track.addMidiPitchBend(value: 1.0, beat: 2.0);

This will schedule a MIDI pitch bend event. The value can be from -1.0 to 1.0. Note that the value is NOT the number of semitones. The sound font defines how many semitones the bend range is. For example, in an SFZ, you can use the "bend_down" and "bend_up" opcodes to define how many cents the pitch will be changed when the bend value is set to -1.0 and 1.0, respectively.

Control playback

sequence.play();
sequence.pause();
sequence.stop();

Start, pause, or stop the sequence.

sequence.setBeat(double beat);

Set the playback position in the sequence, in beats.

sequence.setEndBeat(double beat);

Set the length of the sequence in beats.

sequence.setTempo(120.0);

Set the tempo in beats per minute.

sequence.setLoop(double loopStartBeat, double loopEndBeat);

Enable looping.

sequence.unsetLoop();

Disable looping.

Get real-time information about the sequence

You can use SingleTickerProviderStateMixin to make these calls on every frame.

sequence.getPosition(); // double

Gets the playback position of the sequence, in beats.

sequence.getIsPlaying(); // bool

Gets whether or not the sequence is playing. It may have stopped if it reached the end.

track.getVolume();

Gets the volume of a track. A VolumeEvent may have changed it during playback.

Real-time playback

track.startNoteNow(noteNumber: 60, velocity: 0.75);

Send a MIDI Note On message to the track immediately.

track.stopNoteNow(noteNumber: 60);

Send a MIDI Note Off message to the track immediately.

track.changeVolumeNow(volume: 0.5);

Change the track's volume immediately. Note that this is linear gain, not logarithmic.

How it works

The Android and iOS backends start their respective audio engines. The iOS one adds an AudioUnit for each track to an AVAudioEngine and connects it to a Mixer AudioUnit. The Android one has to do all of the rendering manually. Both of them share a "BaseScheduler", which can be found under the ios directory.

The backend has no concept of the sequence, the position in a sequence, the loop state, or even time as measured in seconds or beats. It just maintains a map of tracks, and it triggers events on those tracks when the appropriate number of frames have been rendered by the audio engine. The BaseScheduler has a Buffer for each track that holds its scheduled events. The Buffer is supposed to be thread-safe for one reader and one writer and real-time safe (i.e. it will not allocate memory, so it can be used on the audio render thread.)

The Sequence lives on the Dart front end. A Sequence has Tracks. Each Track is backed by a Buffer on the backend. When you add a note or a volume change to the track, it schedules an event on the Buffer at the appropriate frame, based on the tempo and sample rate.

The buffer might not be big enough to hold all the events. Also, when looping is enabled, events will occur indefinitely, so the buffer will never be big enough. To deal with this, the frontend will periodically "top off" each track's buffer.

Development instructions

Note that the Android build uses several third party libraries, including sfizz. The Gradle build will download them from GitHub into the android/third_party directory.

The iOS also uses the sfizz library. It will be downloaded by the prepare.sh script which CocoaPods will run.

To build the C++ tests on Mac OS, go into the cpp_test directory, and run

cmake .
make

Then, to run the tests,

./build/sequencer_test

I haven't tried it on Windows or Linux, but it should work without too many changes.

To Do

PRs are welcome! If you use this plugin in your project, please consider contributing by fixing a bug or by tackling one of these to-do items.

Difficulty: Easy

  • Change position_frame_t to 64-bit integer to avoid overflow errors
  • Make constants configurable (TOP_OFF_PERIOD_MS and LEAD_FRAMES)
  • Support federated plugins

Difficulty: Medium

  • Start using Dart null safety
  • Support tempo automation
  • MIDI Out instrument
    • Create an instrument that doesn't make any sounds on its own and just sends MIDI events to a designated MIDI output port.
  • Refactoring
    • GlobalState, Sequence, and Track should have a clear separation of responsibilities
    • Engine, Sequencer, Mixer, Scheduler do too
    • "Track index" and "Track ID" are used interchangeably, "Track ID" should be used everywhere
    • Make the names and organization of the different files (Plugin/Engine/Scheduler) consistent
  • Support MacOS
    • Most of the iOS code should be able to be reused
  • Add more C++ tests
    • For BaseScheduler, specifically.
  • Add Dart tests
    • Test loop edge cases
  • Ensure there are no memory leaks or concurrency issues

Difficulty: Hard

  • Support Windows
  • Record audio output
  • Support React Native?
    • Could use dart2js

Difficulty: Very Hard

  • (important) Audio graph
    • Create a graph of tracks and effects where any output can be connected to any input.
    • At that point, the most of the audio engine can be cross-platform. On iOS, it could be wrapped in one AudioUnit, and external AudioUnit instruments and effects could be connected to it via input and output buses.
    • LabSound seems like the library to use
      • It's based on WebAudio, so there could also be a web backend
    • Can be used to add some key effects like reverb, delay, and compression
    • Supports audio input, writing output to file, and other DAW stuff
  • Support Web
Comments
  • There is no sound in release mode but it works perfectly in debug mode [tested on iOS simulator and 2 iPhones]

    There is no sound in release mode but it works perfectly in debug mode [tested on iOS simulator and 2 iPhones]

    Thanks a lot

    Hi @mikeperri. Thank you for creating and sharing this package. The reason I want to use this package is that I need an audio library that provides very low latency playback and thankfully it does. I am also a music producer for more than 10 years. I can't stress the importance of low latency enough.

    The Issue

    In short, I can't make it work in release mode neither on iOS simulator nor 2 different iPhones. (Soundfonts - SF2. I tried other instrument types too).

    Also I successfully uploaded the app to TestFlight and started testing on devices but no sound.

    In debug mode, it runs smoothly and as expected on both iOS simulator and iPhones. I even expected and I would accept that there could be some more latency in debug mode but it is fairly good.

    I am at almost end of a project and the last part is sound designing and it's like I bet all the odds on this package. So if you have time, could you please try to understand what could be the reason?

    Maybe there is some basic config change could solve this. I have carefully checked all the other issues and forks/PRs of other people.

    opened by yasinarik 7
  • Error when building in vscode

    Error when building in vscode

    Hi Team, I added latest version flutter_sequencer: ^0.4.3 in dependency and run the app in vscode, but I got these errors

    Launching lib\main.dart on sdk gphone x86 in debug mode...
    
    FAILURE: Build failed with an exception.
    
    * Where:
    Build file 'C:\Users\xxxx\AppData\Local\Pub\Cache\hosted\pub.dartlang.org\flutter_sequencer-0.4.3\android\build.gradle' line: 26
    
    * What went wrong:
    A problem occurred evaluating project ':flutter_sequencer'.
    
    > Failed to apply plugin 'com.android.internal.library'.
       > The option 'android.enablePrefab' is deprecated.
         It was removed in version 4.1 of the Android Gradle plugin.
         This property has been replaced by android.buildFeatures.prefab (DSL)
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 1m 5s
    Exception: Gradle task assembleDebug failed with exit code 1
    Exited (sigterm)
    

    The error occurs in this line apply plugin: 'com.android.library'. I am not sure how to configure the enablePrefab I am on the Android studio version 2020.3.1. Any ideas to solve this? Thanks a lot!

    opened by thusimon 3
  • (iOS - TestFlight) Stucked at Loading...

    (iOS - TestFlight) Stucked at Loading...

    Hi, first of all, thanks to you for this amazing lib, you did a great job!

    After submitting app to test flight, I'm stuck at the text widget Loading..., it looks like files (sf2) are correctly included in the build, but somehow it won't load. Everything working great in the simulator and physical device, but only when installed directly.

    Does anyone have experience with this?

    I cannot debug it properly because it's only bugged in test flight and it's not crashing

    EDIT: After some time I come up to that engine is not ready... Again, only when the app is downloaded from TestFlight, in the simulator or direct install on a physical device it's working

    opened by JakubMarek 3
  • Easy question: audiokit support on android

    Easy question: audiokit support on android

    Hi

    Easy question: i know you have replaced AudioKit Sampler with Sfizz but how were you using audiokit on android as on their project page, they say that they are only supporting apple ecosystem?

    Thanks for the good work!

    Cheers

    opened by mathieurousseau 2
  • Failed to lookup symbol (dlsym(RTLD_DEFAULT, RegisterDart_PostCObject): symbol not found)

    Failed to lookup symbol (dlsym(RTLD_DEFAULT, RegisterDart_PostCObject): symbol not found)

    This is a great plugin. I encountered this error when I tried to extract the released version. It only works in debug and profile mode

    [VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: Invalid argument(s): Failed to lookup symbol (dlsym(RTLD_DEFAULT, RegisterDart_PostCObject): symbol not found)
    #0      DynamicLibrary.lookup (dart:ffi-patch/ffi_dynamic_library_patch.dart:31)
    #1      nRegisterPostCObject (package:flutter_sequencer/native_bridge.dart)
    #2      nRegisterPostCObject (package:flutter_sequencer/native_bridge.dart)
    #3      NativeBridge.doSetup (package:flutter_sequencer/native_bridge.dart:101)
    <asynchronous suspension>
    #4      GlobalState._setupEngine (package:flutter_sequencer/global_state.dart:121)
    <asynchronous suspension>
    
    Doctor summary (to see all details, run flutter doctor -v):
    [✓] Flutter (Channel stable, 1.22.5, on Mac OS X 10.15.7 19H2 darwin-x64, locale zh-Hans-CN)
    
    [!] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
        ! Some Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses
    [✓] Xcode - develop for iOS and macOS (Xcode 12.3)
    [!] Android Studio (version 4.1)
        ✗ Flutter plugin not installed; this adds Flutter specific functionality.
        ✗ Dart plugin not installed; this adds Dart specific functionality.
    [✓] VS Code (version 1.52.1)
    [✓] Connected device (3 available)
    

    I tried some solutions, but still can't solve this problem.

    In Xcode, go to Target Runner > Build Settings > Strip Style. Change from All Symbols to Non-Global Symbols.

    opened by weelion 2
  • How to switch to new audio output

    How to switch to new audio output

    Hi, I am using Sf2Instrument to play notes from sf2 files in my piano application.

    On Android, when I plugin a new USB audio device to my phone, the sound output of the library does not switch to the new device and I can not hear the notes I play after that moment.

    What is the proper way of switching to the new audio device with this plugin?

    opened by postacik 1
  • could not run example in ios Simulator

    could not run example in ios Simulator

    when i change FLUTTER_ROOT value to my path, it runs well

    https://github.com/mikeperri/flutter_sequencer/blob/master/example/ios/Runner.xcodeproj/project.pbxproj

    opened by letyletylety 1
  • Xcode build fail

    Xcode build fail

    Hi,

    I was trying to build a minimal example and followed the installation instructions of the lib on pub.dev.

    I have attached an iPad via USB cable and ran flutter run . After a while I get this:

    Running pod install...
    Running Xcode build...
    Xcode build done.                                           21,2s
    Failed to build iOS app
    Error output from Xcode build:
    ↳
        ** BUILD FAILED **
    
    
    Xcode's output:
    ↳
        ld: in /Users/\<user>/Documents/piano_practice/build/ios/Debug-iphoneos/AudioKit.framework/AudioKit(EZAudio.o), building for iOS, but linking in object file built for iOS Simulator, file '/Users/\<user>/Documents/piano_practice/build/ios/Debug-iphoneos/AudioKit.framework/AudioKit' for architecture arm64
        clang: error: linker command failed with exit code 1 (use -v to see invocation)
        note: Using new build system
        note: Building targets in parallel
        note: Planning build
        note: Constructing build description
    

    Did I just miss to set some property?

    EDIT:

    I am using flutter 1.22.4 and XCode 12.2

    opened by ghost23 1
  • Add reverb and pitch effects to playing note

    Add reverb and pitch effects to playing note

    Hi, The flutter_midi plugin is not fast enough for playing single notes from an sf2 file (there's a huge of amount of delay) so I'm using your plugin with the following functions:

    _selectedTrack?.startNoteNow(noteNumber: noteNumber, velocity: velocity);
    _selectedTrack?.stopNoteNow(noteNumber: noteNumber);
    

    And this plugin is super fast, thank you for your great work.

    I use a midi keyboard with a pitch wheel and when I experiment with the wheel, I get pitch values between 0 (lowest) and 127 (highest).

    So I assumed that, I can change the pitch of the playing note (triggered with startNoteNow() function) using the following function:

    _selectedTrack?.midiPitchBendNow(value: (pitch - 64) / 64);

    I assume the value parameter should be between -1 and 1.

    However it has no effect on the playing note.

    Can you please help about this function?

    And is it also possible to apply reverb to the playing note?

    opened by postacik 0
  • feat: expose preset index for sf2

    feat: expose preset index for sf2

    SF2 files such as FluidR3_GM come with patches (preset indices) that are currently set to 0 on both Android and iOS.

    Exposing a variable to set it when the instrument is created would allow developers that use sf2 to change their preset.

    opened by razvangeangu 0
  • Development Team Error

    Development Team Error

    I am getting an error when I try to run development build on iOS:

    Could not build the precompiled application for the device.
    Error (Xcode): Signing for "flutter_sequencer-flutter_sequencer" requires a development team. Select a development team in the Signing & Capabilities editor.
    /<path>/bpm-calc-app/ios/Pods/Pods.xcodeproj
    

    I can change the development team through XCode and run the app successfully in XCode, but I still can't run it through command/IDE (IntelliJ IDEA).

    opened by iksent 2
  • [iOS] Using the just_audio package to play a specific mp3 is breaking the flutter_sequencer but it doensn't throw any errors.

    [iOS] Using the just_audio package to play a specific mp3 is breaking the flutter_sequencer but it doensn't throw any errors.

    Whenever I play an mp3 file the whole flutter_sequencer just stops. Currently using the just_audio package to play audio files.

    Reproduced this issue on the example project of the flutter_sequencer by adding a simple button widget to play the mp3 file and adding the just_audio package to the pubspec.yaml file.

    I crossed referenced the offending mp3 file with other working mp3 files and found out that if an mp3 has these properties the flutter_sequencer package breaks:

    • Audio Channel: Stereo
    • Sample Rate: 48 kHz

    Mp3 files: Archive.zip

    main.dart

            ...
                ElevatedButton(
                  onPressed: () async {
                    final player = AudioPlayer();
                    var duration = await player.setAsset('assets/mp3/sfx-pop_mono_44k.mp3');
                    player.play();
                  },
                  child: Text('Mono - 44k'),
                ),
                ElevatedButton(
                  onPressed: () async {
                    final player = AudioPlayer();
                    var duration = await player.setAsset('assets/mp3/sfx-pop_mono_48k.mp3');
                    player.play();
                  },
                  child: Text('Mono - 48k'),
                ),
                ElevatedButton(
                  onPressed: () async {
                    final player = AudioPlayer();
                    var duration = await player.setAsset('assets/mp3/sfx-pop_stereo_44k.mp3');
                    player.play();
                  },
                  child: Text('Stereo - 44k'),
                ),
                ElevatedButton(
                  onPressed: () async {
                    final player = AudioPlayer();
                    var duration = await player.setAsset('assets/mp3/sfx-pop_stereo_48k.mp3');
                    player.play();
                  },
                  child: Text('Stereo - 48k'),
                ),
           ...
    

    No erros or logs are produced.


    ADDITIONAL INFO:

    • Playing a video that has sample rate of 48k break the flutter_sequencer.
    • The SFZ that is currently being used for the flutter_sequencer is in 44.1k
    opened by dmendoza05 0
  • Getting this log:

    Getting this log: "throwing -10878"

    Getting a very vague "throwing -10878" with the custom soundfont I'm using.

    Is there a way to find out what is wrong with this soundfont?

    monopiano.zip

    opened by dmendoza05 0
  • Crash when calling destroy() on Sequence

    Crash when calling destroy() on Sequence

    Hi!

    I noticed that in Sequence's destroy() method you're iterating through a collection with forEach at the same time as you're modifying it. Not sure how this has worked before. Maybe some behavior of how iterating through the values of a map has changed recently.

    void destroy() {
        _tracks.values.forEach((track) => deleteTrack(track));
        globalState.unregisterSequence(this);
    }
    

    deleteTrack now seems to be modifying the collection we are iterating through it. A simple solution is to copy the list of track to a list before iterating through it, or just using _tracks.values.toList().forEachinstead.

    opened by andreasmpet 0
  • Works in release build, not works in Archived, validated ipa build

    Works in release build, not works in Archived, validated ipa build

    Hi!

    For some reason the sequence not loads if I try a validated archived IPA version on my phone. But it works fine in release mode. Do you guys have any idea how this can happen? I set the Build Architecture to arm64 only.

    opened by jugamir 1
Owner
Mike Perri
Mike Perri
🎵 Elegant music app to play local music & YouTube music. Distributes music into albums & artists. Has playlists & lyrics.

Harmonoid Elegant music app to play local music & YouTube music. Download Now ?? Feel free to report bugs & issues. We'll be there to fix. Loving the

Harmonoid 2.5k Dec 30, 2022
🎵 Elegant music app to play local music & YouTube music. Distributes music into albums & artists. Has playlists & lyrics. Windows + Linux + Android.

Harmonoid Elegant music app to play local music & YouTube music. Download Now ?? Windows, Linux & Android. Feel free to report bugs & issues. Loving t

Harmonoid 1.9k Aug 10, 2022
Flutter Music Player - First Open Source Flutter based material design music player with audio plugin to play local music files.

Flutter Music Player First Open Source Flutter based Beautiful Material Design Music Player(Online Radio will be added soon.) Demo App Play Store BETA

Pawan Kumar 1.5k Jan 8, 2023
Playify is a Flutter plugin for play/pause/seek songs, fetching music metadata, and browsing music library.

Playify Playify is a Flutter plugin for play/pause/seek songs, fetching music metadata, and browsing music library. Playify was built using iOS's Medi

Ibrahim Berat Kaya 32 Dec 14, 2022
A Flutter plugin for playing music on iOS and Android.

Stereo plugin for Flutter A Flutter plugin for playing music on iOS and Android. Features Play/pause Stop Duration / seek to position Load track from

2find 67 Sep 24, 2022
Audio manager - A flutter plugin for music playback, including notification handling.

audio_manager A flutter plugin for music playback, including notification handling. This plugin is developed for iOS based on AVPlayer, while android

Jerome Xiong 96 Oct 25, 2022
Music App made with flutter

Chillify A Flutter music app made with Provider and BLoC pattern. (Works on Android for now) Recommended Flutter version: 1.7.8+hotfix.4 UI heavily in

Karim Elghamry 632 Jan 4, 2023
:lock: this is flutter mobile application music using glass morphism concept

Flutter Glass Morphism ?? Description: This is source flutter using glass morphism concept How I can run it? ?? Clone this repo ?? Run below code in t

Dao Hong Vinh 12 Jan 19, 2022
A Flutter package for working with piano keys and sheet music

Piano A Flutter package that provides: logic for working with musical notes, clefs and octaves; a widget that can render notes on a clef; an interacti

Craig McMahon 32 Jan 5, 2023
A music player component for Flutter

This is an example I currently have no plans of putting this on Pub. Originally, I did, but I lost interest. However, I think this is a good example,

Tobe Osakwe 215 Dec 12, 2022
flutter macos music 音乐播放器

FLUTTER 实现macos音乐播放器 接口感谢 NeteaseCloudMusicApi 注意事项 由于依赖dart_vlc 需要安装cmake brew install cmake 视频返回的时候报错请查看dart_vlc Issues 修复,作者是手动进行了修复 功能 歌曲播放 歌单 歌单详

shanRaw 5 Dec 31, 2021
Caffodils - Download everything | Flutter app for Android and IOS. Download Video, Reels, Shorts, Music, Images, Files from Instagram, Facebook and Youtube

caffodils Caffodils - Download everything Flutter app for Android and IOS. Download Video, Reels, Shorts, Music, Images, Files from Instagram, Faceboo

Caffodils 11 Oct 24, 2022
A mobile music streaming app with a complex UI built with Flutter and the Deezer API🚀

Sap Sap is a music streaming & discovery app built with the Deezer API for iOS and Android. It includes a mini player, search and local storage. Be su

Carlton Aikins 53 Dec 28, 2022
Music Streaming and Downloading app made in Flutter

Musify Music Streaming and Downloading app made in Flutter! Show some ❤️ and ⭐ the Repo Features Online Song Search ?? Streaming Support ?? Offline Do

Harsh Sharma 257 Dec 30, 2022
A Music app built using flutter

Bungee A Flutter musical app built with nodejs and firebase. Description Bungee is the first music app build with Flutter. With a nice interface you c

Open Consulting Group 259 Jan 1, 2023
A clean front-end to Volumio, the Linux distribution for music playback. DigiPlayer is written in Flutter.

EN | 中文 DigiPlayer - A Clean Touch UI for Volumio 3 DigiPlayer is a clean touch UI for Volumio 3, written in Flutter for the Raspberry Pi Touch Displa

Feng Zhou 5 Jul 26, 2022
A Music Recommendation System made using Flutter and backed by FastAPI.

ProjectX Music A Music Recommendation System made using Flutter and backed by FastAPI. Introduction ProjectX Music is an online mobile application tha

ProjectX Music App 11 Dec 27, 2022
Flutter UI Challenge: Music Player

Flutter UI Challenge: Music Player Resource Design: https://dribbble.com Output

jaydip patel 4 Dec 23, 2022
Relaxing Music App

Luna Relaxing Music App Download References Figma assets Vectors If you like it, star this repo. If you find any issues, feel free to raise issues. En

Abhishek Kumar 31 Nov 8, 2022