RustySynth is a SoundFont MIDI synthesizer written in pure Rust, ported from MeltySynth.
An example code to synthesize a simple chord:
```rust // Load the SoundFont. let mut sf2 = File::open("TimGM6mb.sf2").unwrap(); let sound_font = Rc::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
// 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 = Rc::new(SoundFont::new(&mut sf2).unwrap());
// Load the MIDI file. let mut mid = File::open("flourish.mid").unwrap(); let midi_file = Rc::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
// Render the waveform. sequencer.render(&mut left[..], &mut right[..]); ```
RustySynth is available under the MIT license.