humster 0.0.2

Modern music toolkit for Rust
Documentation
#[cfg(feature = "midi")]
fn main() -> humster::Result<()> {
    use humster::prelude::*;

    let mut track = Track::Midi(MidiTrack::new(vec![
        MidiEvent::new(60, 80),
        MidiEvent::new(64, 90),
    ]));

    struct VelocityBoost(f32);

    impl Processor for VelocityBoost {
        fn process_midi(&self, track: &mut MidiTrack) {
            for event in track.events.iter_mut() {
                let boosted = (event.velocity as f32 * self.0).round() as u32;
                event.velocity = boosted.min(127) as u8;
            }
        }
    }

    let boost = VelocityBoost(1.25);
    track.apply(&boost);

    if let Some(midi) = track.as_midi() {
        for (idx, event) in midi.events().iter().enumerate() {
            println!("Event #{idx}: note {}, velocity {}", event.note, event.velocity);
        }
    }

    Ok(())
}

#[cfg(not(feature = "midi"))]
fn main() {
    eprintln!("Enable the `midi` feature to run this example.");
}