#audio #synth #soundfont #sf2 #sf3

fluidlite

Safe bindings to fluidlite library

2 releases

✓ Uses Rust 2018 edition

0.1.2 Feb 14, 2020
0.1.0 Feb 11, 2020

#80 in Audio

LGPL-2.1

1MB
24K SLoC

Rust fluidlite bindings

License: LGPL-2.1 Crates.io Package Docs.rs API Docs Travis-CI Status

This project aims provide safe Rust bindings to fluidlite C library.

FluidLite is a very light version of FluidSynth designed to be hardware, platform and external dependency independant. It only uses standard C libraries.

It also adds support for SF3 files (SF2 files compressed with ogg vorbis) and an additional setting to remove the constraint of channel 9 (drums): fluid_settings_setstr(settings, "synth.drums-channel.active", "no"); you can still select bank 128 on any channel to use drum kits.

FluidLite keeps very minimal functionnalities (settings and synth), therefore MIDI file reading, realtime MIDI events and audio output must be implemented externally.

Crates

Features

  • generate-bindings Force generate bindings on build instead of using pre-generated

Example

use std::{
    fs::File,
    io::Write,
};
use byte_slice_cast::AsByteSlice;
use fluidlite::{Settings, Synth};

let settings = Settings::new().unwrap();

let synth = Synth::new(settings).unwrap();
synth.sfload("soundfont.sf3", true).unwrap();

let mut buffer = [0i16; 44100 * 2];

let mut file = File::create("soundfont-sample.pcm").unwrap();

synth.note_on(0, 60, 127).unwrap();
synth.write(buffer.as_mut()).unwrap();
file.write(buffer.as_byte_slice()).unwrap();

synth.note_off(0, 60).unwrap();
synth.write(buffer.as_mut()).unwrap();
file.write(buffer.as_byte_slice()).unwrap();

Dependencies

~0.5–1MB
~23K SLoC