use crate::core::SoundFont;
use crate::SoundFontId;
use crate::Synth;
impl Synth {
pub fn add_font(&mut self, font: SoundFont, reset_presets: bool) -> SoundFontId {
self.core.add_font(font, reset_presets)
}
pub fn remove_font(&mut self, id: SoundFontId, reset_presets: bool) -> Result<(), ()> {
self.core.remove_font(id, reset_presets)
}
pub fn count_fonts(&self) -> usize {
self.core.count_fonts()
}
pub fn nth_sfont(&self, num: usize) -> Option<&SoundFont> {
self.core.nth_font(num)
}
pub fn sfont(&self, id: SoundFontId) -> Option<&SoundFont> {
self.core.sfont(id)
}
pub fn set_bank_offset(&mut self, sfont_id: SoundFontId, offset: u32) {
self.core.font_bank.bank_offsets.set(sfont_id, offset)
}
pub fn bank_offset(&self, sfont_id: SoundFontId) -> Option<u32> {
self.core
.font_bank
.bank_offsets
.get(sfont_id)
.map(|o| o.offset)
}
}
#[cfg(test)]
mod test {
use crate::core::{SoundFont, Synth, SynthDescriptor};
#[test]
fn font_and_preset() {
let mut synth = Synth::new(SynthDescriptor::default()).unwrap();
assert_eq!(synth.count_fonts(), 0);
let sin = {
let mut file = std::fs::File::open("./testdata/sin.sf2").unwrap();
let font = SoundFont::load(&mut file).unwrap();
let id = synth.add_font(font, true);
assert_eq!(synth.count_fonts(), 1);
let font = synth.sfont(id).unwrap();
let preset = font.preset(0, 0).unwrap();
assert_eq!(preset.name(), "Sine Wave");
assert_eq!(preset.banknum(), 0);
assert_eq!(preset.num(), 0);
id
};
let boom = {
let mut file = std::fs::File::open("./testdata/Boomwhacker.sf2").unwrap();
let font = SoundFont::load(&mut file).unwrap();
let id = synth.add_font(font, true);
assert_eq!(synth.count_fonts(), 2);
let font = synth.sfont(id).unwrap();
let preset = font.preset(0, 0).unwrap();
assert_eq!(preset.name(), "Boomwhacker");
assert_eq!(preset.banknum(), 0);
assert_eq!(preset.num(), 0);
id
};
{
}
{
let font = synth.sfont(sin).unwrap();
let preset = font.preset(0, 0).unwrap();
assert_eq!(preset.name(), "Sine Wave");
assert_eq!(preset.banknum(), 0);
assert_eq!(preset.num(), 0);
}
{
let font = synth.sfont(boom).unwrap();
let preset = font.preset(0, 0).unwrap();
assert_eq!(preset.name(), "Boomwhacker");
assert_eq!(preset.banknum(), 0);
assert_eq!(preset.num(), 0);
}
}
}