dart_melty_soundfont 1.1.13 copy "dart_melty_soundfont: ^1.1.13" to clipboard
dart_melty_soundfont: ^1.1.13 copied to clipboard

A Soundfont synthesizer (i.e. '.sf2' player) written in pure Dart.

dart_melty_soundfont is a SoundFont synthesizer (i.e. '.sf2' player) written in pure Dart.

It is a port of MeltySynth (C#, MIT License) written by Nobuaki Tanaka, to Dart.

https://github.com/sinshu/meltysynth

Dependencies #

This package has no dependencies.

Maintanence #

This project was specifically designed to not require maintanence, in large part by not having any dependencies. Apart from breaking changes to the Dart language (rare), it should be solid code that works for decades. It will work on any Dart SDK sdk>=2.12 && sdk<4.0 indefinitely.

This package was written against Dart SDK 2.16.1.

Example #

Synthesize a simple chord:

// Necessary Imports
import 'package:dart_melty_soundfont/dart_melty_soundfont.dart';
import 'package:flutter/services.dart' show rootBundle;

// load sf2
ByteData bytes = await rootBundle.load('assets/akai_steinway.sf2');

// Create the synthesizer.
Synthesizer synth = Synthesizer.loadByteData(bytes, 
    SynthesizerSettings(
        sampleRate: 44100, 
        blockSize: 64, 
        maximumPolyphony: 64, 
        enableReverbAndChorus: true,
    ));

// optional: print available instruments (aka presets)
List<Preset> p = synth.soundFont.presets;
for (int i = 0; i < p.length; i++) {
  String instrumentName = p[i].regions.isNotEmpty ? p[i].regions[0].instrument.name : "N/A";
  print('[preset $i] name: ${p[i].name} instrument: $instrumentName');
}

//  optional: select first instrument (aka preset)
synth.selectPreset(channel: 0, preset: 0);

// turn on some notes
synth.noteOn(channel: 0, key: 72, velocity: 120);
synth.noteOn(channel: 0, key: 76, velocity: 120);
synth.noteOn(channel: 0, key: 79, velocity: 120);
synth.noteOn(channel: 0, key: 82, velocity: 120);

// create a pcm buffer
ArrayInt16 buf16 = ArrayInt16.zeros(numShorts: 44100 * 3);

// render the waveform (1 second)
synth.renderMonoInt16(buf16);

// turn off a note
synth.noteOff(channel: 0, key: 72, velocity: 120);

// render another second
synth.renderMonoInt16(buf16);

Playing Sound #

This library does not audibly make sound, it only generates the PCM waveform.

To actually hear something, you need to pass the generated PCM waveform to your device's speakers using PCM.

See the Example App for a flutter_pcm_sound + dart_melty_soundfont example.

Isolates #

It is recommended to do your audio rendering in isolates or using compute. This will keep your UI fast & prevent audio stuttering.

Features #

  • No memory allocation in the rendering process.

  • Wave synthesis

    • ✅ SoundFont reader
    • ✅ Waveform generator
    • ✅ Envelope generator
    • ✅ Low-pass filter
    • ✅ Vibrato LFO
    • ✅ Modulation LFO
  • MIDI message processing

    • ✅ Note on/off
    • ✅ Bank selection
    • ✅ Modulation
    • ✅ Volume control
    • ✅ Pan
    • ✅ Expression
    • ✅ Hold pedal
    • ✅ Program change
    • ✅ Pitch bend
    • ✅ Tuning
  • Effects

    • ✅ Reverb
    • ✅ Chorus
  • Other things

    • ✅ Loop extension support
    • ✅ Performace optimization

License #

DartMeltySoundFont is available under the MIT license.

References #

35
likes
150
pub points
73%
popularity

Publisher

verified publisherjamcorder.com

A Soundfont synthesizer (i.e. '.sf2' player) written in pure Dart.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

More

Packages that depend on dart_melty_soundfont