RustySynth

RustySynth is a SoundFont MIDI synthesizer written in pure Rust, ported from MeltySynth.

Features

Examples

An example code to synthesize a simple chord:

```rust // Load the SoundFont. let mut sf2 = File::open("TimGM6mb.sf2").unwrap(); let sound_font = Arc::new(SoundFont::new(&mut sf2).unwrap());

// Create the synthesizer. let settings = SynthesizerSettings::new(44100); let mut synthesizer = Synthesizer::new(&sound_font, &settings).unwrap();

// Play some notes (middle C, E, G). synthesizer.noteon(0, 60, 100); synthesizer.noteon(0, 64, 100); synthesizer.note_on(0, 67, 100);

// The output buffer (3 seconds). let samplecount = (3 * settings.samplerate) as usize; let mut left: Vec = vec![0f32; samplecount]; let mut right: Vec = vec![0f32; samplecount];

// Render the waveform. synthesizer.render(&mut left[..], &mut right[..]); ```

Another example code to synthesize a MIDI file:

```rust // Load the SoundFont. let mut sf2 = File::open("TimGM6mb.sf2").unwrap(); let sound_font = Arc::new(SoundFont::new(&mut sf2).unwrap());

// Load the MIDI file. let mut mid = File::open("flourish.mid").unwrap(); let midi_file = Arc::new(MidiFile::new(&mut mid).unwrap());

// Create the MIDI file sequencer. let settings = SynthesizerSettings::new(44100); let synthesizer = Synthesizer::new(&sound_font, &settings).unwrap(); let mut sequencer = MidiFileSequencer::new(synthesizer);

// Play the MIDI file. sequencer.play(&midi_file, false);

// The output buffer. let samplecount = (settings.samplerate as f64 * midifile.getlength()) as usize; let mut left: Vec = vec![0f32; samplecount]; let mut right: Vec = vec![0f32; samplecount];

// Render the waveform. sequencer.render(&mut left[..], &mut right[..]); ```

Todo

License

RustySynth is available under the MIT license.