Summary
SongQuery exists and can query song data from the device, but there's no Song data structure to parse the response. This prevents programmatic creation and modification of song mode sequences.
Current State
What exists:
SongQuery - Can query song slots 0-15 and work buffer
- SysEx query/response infrastructure works
What's missing:
Song struct to represent song data
- SysEx parsing for song responses
- Song serialization/deserialization
- Song mutation methods
Use Case
Users want to programmatically:
- Create song mode sequences (chains of patterns with repeats/mutes)
- Export/import songs for version control
- Generate songs algorithmically
- Build CLI tools that manipulate entire song structures
Technical Details
Based on the Analog Rytm MKII manual:
- 16 songs per project
- Songs consist of rows containing chains or patterns
- Each row can have repeats and per-track mutes
- Up to 256 pattern entries across 64 chains
Estimated structure:
pub struct Song {
rows: Vec<SongRow>,
scratch_pad: SongRow,
// ... other fields
}
pub struct SongRow {
chain_or_pattern: ChainOrPattern,
repeats: u8,
track_mutes: [bool; 12],
// ... other fields
}
pub enum ChainOrPattern {
Pattern(usize), // Pattern index 0-127
Chain(Vec<usize>), // Chain of pattern indices
}
Implementation Tasks
References
- Device manual section "12. CHAINS AND SONGS" (page 53)
- Current TODO comments in
src/lib.rs: // TODO: Songs (16) and // TODO: Work buffer song
- Related:
SongQuery implementation in src/query/song.rs
Priority
Medium - Songs are important for complete device control, but patterns can be chained manually on the device as a workaround.
Filed from an active vibe-coding session where we wanted to programmatically chain patterns together. Happy to help test once implemented!
Summary
SongQueryexists and can query song data from the device, but there's noSongdata structure to parse the response. This prevents programmatic creation and modification of song mode sequences.Current State
What exists:
SongQuery- Can query song slots 0-15 and work bufferWhat's missing:
Songstruct to represent song dataUse Case
Users want to programmatically:
Technical Details
Based on the Analog Rytm MKII manual:
Estimated structure:
Implementation Tasks
SongandSongRowdata structuresupdate_from_sysex_response()RytmProjectto include songs (currently marked TODO)References
src/lib.rs:// TODO: Songs (16)and// TODO: Work buffer songSongQueryimplementation insrc/query/song.rsPriority
Medium - Songs are important for complete device control, but patterns can be chained manually on the device as a workaround.
Filed from an active vibe-coding session where we wanted to programmatically chain patterns together. Happy to help test once implemented!