oxisynth 0.0.3

Rust soundfont synthesizer
Documentation
use soundfont::{data::SFData, SoundFont2};

fn main() {
    let mut file = std::fs::File::open("./testdata/sin.sf2").unwrap();

    // Load from memory
    // use std::io::Cursor;
    // let mut file = Cursor::new(include_bytes!("../testdata/sin.sf2"));

    let data = SFData::load(&mut file).unwrap();
    let sf2 = SoundFont2::from_data(data);

    for p in sf2.presets.iter() {
        println!("====== Preset =======");
        println!("Name: {}", p.header.name);
        let instruments: Vec<_> = p
            .zones
            .iter()
            .filter_map(|z| {
                z.instrument().map(|id| {
                    let instrument = &sf2.instruments[*id as usize];

                    let mut samples = Vec::new();
                    for z in instrument.zones.iter() {
                        if let Some(sample_id) = z.sample() {
                            samples.push(sf2.sample_headers[*sample_id as usize].clone());
                        }
                    }

                    (instrument.header.name.clone(), samples.len())
                })
            })
            .collect();
        println!("Instruments: {:?}", instruments);
        println!("");
    }
}