Skip to main content

rustysynth_ext/
lib.rs

1//! A SoundFont (`.sf2` and, behind the `sf3` feature, `.sf3`) MIDI synthesizer
2//! written in pure Rust.
3//!
4//! A [`SoundFont`] is loaded once and shared behind an `Arc`, and a [`Synthesizer`]
5//! built from it renders the waveform into a pair of `f32` buffers, either played
6//! directly with [`Synthesizer::note_on`] and friends or driven by a [`MidiFile`]
7//! through a [`MidiFileSequencer`].
8//!
9//! ```no_run
10//! use std::fs::File;
11//! use std::sync::Arc;
12//!
13//! use rustysynth_ext::{SoundFont, Synthesizer, SynthesizerSettings};
14//!
15//! let mut sf2 = File::open("TimGM6mb.sf2").unwrap();
16//! let sound_font = Arc::new(SoundFont::new(&mut sf2).unwrap());
17//!
18//! let settings = SynthesizerSettings::new(44100);
19//! let mut synthesizer = Synthesizer::new(&sound_font, &settings).unwrap();
20//!
21//! synthesizer.note_on(0, 60, 100);
22//!
23//! let mut left = vec![0.0_f32; 44100];
24//! let mut right = vec![0.0_f32; 44100];
25//! synthesizer.render(&mut left, &mut right);
26//! ```
27
28mod error;
29
30mod array_math;
31mod binary_reader;
32mod four_cc;
33mod read_counter;
34
35mod generator;
36mod generator_type;
37mod instrument;
38mod instrument_info;
39mod instrument_region;
40mod loop_mode;
41mod preset;
42mod preset_info;
43mod preset_region;
44mod sample_header;
45mod soundfont;
46mod soundfont_info;
47mod soundfont_math;
48mod soundfont_parameters;
49mod soundfont_sampledata;
50#[cfg(feature = "sf3")]
51mod soundfont_sf3;
52mod soundfont_version;
53mod zone;
54mod zone_info;
55
56mod bi_quad_filter;
57mod channel;
58mod envelope_stage;
59mod lfo;
60mod modulation_envelope;
61mod oscillator;
62mod region_ex;
63mod region_pair;
64mod synthesizer;
65mod synthesizer_settings;
66mod voice;
67mod voice_collection;
68mod volume_envelope;
69
70mod midifile;
71mod midifile_looptype;
72mod midifile_sequencer;
73
74mod chorus;
75mod reverb;
76
77#[cfg(test)]
78mod test_font;
79
80pub use self::error::MidiFileError;
81pub use self::error::SoundFontError;
82pub use self::error::SynthesizerError;
83pub use self::instrument::Instrument;
84pub use self::instrument_region::InstrumentRegion;
85pub use self::loop_mode::LoopMode;
86pub use self::midifile::MidiFile;
87pub use self::midifile::MidiMessage;
88pub use self::midifile_looptype::MidiFileLoopType;
89pub use self::midifile_sequencer::MidiFileSequencer;
90pub use self::preset::Preset;
91pub use self::preset_region::PresetRegion;
92pub use self::sample_header::SampleHeader;
93pub use self::soundfont::SoundFont;
94pub use self::soundfont_info::SoundFontInfo;
95pub use self::soundfont_version::SoundFontVersion;
96pub use self::synthesizer::Synthesizer;
97pub use self::synthesizer_settings::SynthesizerSettings;