RustySynth-ext
RustySynth-ext is a fork of RustySynth — a
SoundFont MIDI synthesizer written in pure Rust, ported from
MeltySynth — that adds optional
SoundFont3 (.sf3) support on top of the upstream SoundFont2 (.sf2) support.
Features
- Suitable for both real-time and offline synthesis.
- Supports standard MIDI files with additional features including dynamic tempo changing.
- No dependencies other than the standard library by default.
- Optional SoundFont3 (.sf3) support.
SF3 SoundFonts store their samples as Ogg Vorbis streams instead of raw PCM,
roughly 10x smaller than the equivalent SF2. Loading them is opt-in because it
adds the pure-Rust lewton decoder:
cargo add rustysynth-ext --features sf3
With the sf3 feature enabled, SoundFont::new loads .sf3 files
transparently, decompressing every sample into the same 16-bit PCM layout used
by .sf2 files.
Examples
An example code to synthesize a simple chord:
// Load the SoundFont.
let mut sf2 = open.unwrap;
let sound_font = new;
// Create the synthesizer.
let settings = new;
let mut synthesizer = new.unwrap;
// Play some notes (middle C, E, G).
synthesizer.note_on;
synthesizer.note_on;
synthesizer.note_on;
// The output buffer (3 seconds).
let sample_count = as usize;
let mut left: = vec!;
let mut right: = vec!;
// Render the waveform.
synthesizer.render;
Another example code to synthesize a MIDI file:
// Load the SoundFont.
let mut sf2 = open.unwrap;
let sound_font = new;
// Load the MIDI file.
let mut mid = open.unwrap;
let midi_file = new;
// Create the MIDI file sequencer.
let settings = new;
let synthesizer = new.unwrap;
let mut sequencer = new;
// Play the MIDI file.
sequencer.play;
// The output buffer.
let sample_count = as usize;
let mut left: = vec!;
let mut right: = vec!;
// Render the waveform.
sequencer.render;
Todo
- 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
- Standard MIDI file support
- MIDI file loop extension support
- Performance optimization
License
RustySynth-ext is available under the MIT license. It is a fork of RustySynth, whose copyright notice is preserved in the license text.