frodo
Music JSON -> MIDI (Standard MIDI File) compiler in Rust. The goal is to let LLMs describe music at a musical level (beats, patterns, instruments) and hide MIDI delta-time details.
cargo buildCreate a starter song JSON:
cargo run -- new --out song.jsonCompile JSON -> MIDI:
cargo run -- json2midi --input song.json --output out.midListen:
timidity out.midPrimary API is in src/song.rs and exported via src/lib.rs:
compile_song_json(json: &str) -> Result<Smf, SongCompileError>Smf::to_bytes() -> Vec<u8>
examples/techno_v2.jsonexamples/neon_relay_v2.jsonexamples/rock_tv_jingle_raw.jsonexamples/song_v1.json
v2 supports clips, step-sequencer lanes, per-lane groove, and CC/pitch-bend automation (points + ramps).
The v2 loader normalizes some common LLM outputs:
time_signaturemay be"4/4"(string) or an object.steps.lanesmay be an array (preferred) or an object map ({\"kick\": {...}}).- Notes may use
start_beat/duration_beats(aliases forstart/duration). - Chords may use
pitches: [...](expanded into multiple notes).