humster 0.0.2

Modern music toolkit for Rust
Documentation
# Humster Music Library

Humster is the starting point for a Rust library that explores building a modern music toolkit capable of working with both MIDI files and raw audio signals. The long-term goal is to make it easy to prototype ideas such as algorithmic composition, live performance tools, and audio analysis within the same crate.

## Vision

- **Unified pipeline** – Parse MIDI sequences and stream audio buffers through a consistent set of traits so creative tools can mix symbolic and audio data.
- **Extensible** – Encourage experimentation with pluggable processors (effects, transformations, analyzers) that can be chained together.

## Installation

Add `humster` to your `Cargo.toml`:

```toml
[dependencies]
humster = "0.0.2"
```

Or use `cargo add`:

```bash
cargo add humster
```

## Example

```rust
use humster::{Track, MidiTrack, AudioTrack, Processor};

struct VelocityBoost(f32);

impl Processor for VelocityBoost {
    fn process_midi(&self, track: &mut MidiTrack) {
        track.events.iter_mut().for_each(|event| {
            event.velocity = (event.velocity as f32 * self.0).min(127.0) as u8;
        });
    }

    fn process_audio(&self, _track: &mut AudioTrack) {
        // No-op for audio in this processor; other processors could handle audio buffers.
    }
}

fn main() -> humster::Result<()> {
    let mut track = Track::from_midi("assets/example.mid")?;
    let velocity_boost = VelocityBoost(1.2);
    track.apply(&velocity_boost);
    track.export("out.mid")?;
    Ok(())
}
```

This sketch keeps the API surface small while proving out key ideas:

- One crate manages both MIDI and signal data.
- Processors can be reused between offline rendering and realtime contexts.
- Users can chain processors to build complex pipelines.

## Current Status

The repository is currently under development.

## Roadmap Ideas

- Integrate a MIDI parser (e.g., `midly`) and wrap it in ergonomic types.
- Add basic DSP utilities for resampling, filtering, and FFT analysis.
- Provide bidirectional conversions between MIDI tracks and synthesized audio.
- Expose bindings for live control (e.g., MIDI controller input, OSC).
- Ship a command-line tool that uses the library to batch process files.

Contributions, feature ideas, and experiments are welcome—this README will evolve as the implementation takes shape.