music_file_format
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| music_file_format [2026/02/02 13:29] – appledog | music_file_format [2026/02/02 13:35] (current) – appledog | ||
|---|---|---|---|
| Line 2: | Line 2: | ||
| How to do it? | How to do it? | ||
| - | == Proposal 1 | + | == Proposal 1: Text file |
| + | * on a row: CWND CWND CWND CWND | ||
| + | * " | ||
| + | * Can have commands like TEMPO = 90 and ROW=HalfNote (meaning 180 rows/minute for Tempo=90) | ||
| + | ** This would require auto-shutoff of notes/a polling player (could be done using Int 11h music timers) | ||
| + | |||
| + | |||
| + | == Proposal 2 (Data-File) | ||
| MUSIC FILE FORMAT v1.0\\ | MUSIC FILE FORMAT v1.0\\ | ||
| ====================== | ====================== | ||
| Line 82: | Line 89: | ||
| ** A4 = (4 * 12) + 9 + 1 = 58 = $3A | ** A4 = (4 * 12) + 9 + 1 = 58 = $3A | ||
| - | == Possible TEXT format | + | === Example Data File |
| - | * on a row: CWND CWND CWND CWND | + | <codify armasm> |
| - | * "Channel, Waveform, Note, Duration" | + | ; ============================================================================ |
| - | * Can have commands like TEMPO = 90 | + | ; Simple test song: C-E-G-C chord progression |
| + | ; ============================================================================ | ||
| + | |||
| + | music_test_song: | ||
| + | |||
| + | ; Header (16 bytes) | ||
| + | music_header: | ||
| + | | ||
| + | .byte 1 ; Version | ||
| + | .byte 0 ; Flags | ||
| + | .word 250 ; Tempo: 250ms per row (240 BPM) | ||
| + | .byte 2 ; 2 instruments | ||
| + | .byte 2 ; 2 patterns | ||
| + | .byte 4 ; 4 orders (play pattern 0, 1, 0, 1) | ||
| + | .fill 7, 0 ; Reserved | ||
| + | |||
| + | ; Instruments (8 bytes each) | ||
| + | music_instruments: | ||
| + | ; Instrument 0: Lead (pulse wave) | ||
| + | .byte WAVE_PULSE | ||
| + | .byte $40 ; 50% duty | ||
| + | .byte $10 ; Attack | ||
| + | .byte $20 ; Decay | ||
| + | .byte $80 ; Sustain | ||
| + | .byte $40 ; Release | ||
| + | .byte $C0 ; Volume | ||
| + | .byte 0 ; Reserved | ||
| + | |||
| + | ; Instrument 1: Bass (triangle) | ||
| + | .byte WAVE_TRIANGLE | ||
| + | .byte 0 ; Duty (ignored for triangle) | ||
| + | .byte $08 ; Attack | ||
| + | .byte $10 ; Decay | ||
| + | .byte $A0 ; Sustain | ||
| + | .byte $30 ; Release | ||
| + | .byte $FF ; Volume | ||
| + | .byte 0 ; Reserved | ||
| + | |||
| + | ; Order list | ||
| + | music_orders: | ||
| + | .byte 0 ; Play pattern 0 | ||
| + | .byte 1 ; Play pattern 1 | ||
| + | .byte 0 ; Play pattern 0 again | ||
| + | .byte 1 ; Play pattern 1 again | ||
| + | .byte $FF ; End of song | ||
| + | |||
| + | ; Patterns | ||
| + | music_patterns: | ||
| + | |||
| + | ; Pattern 0 offset (for seeking) | ||
| + | music_pattern_0: | ||
| + | ; Row 0: Channel 0 plays C4 with instrument 0 | ||
| + | .byte $00, $31, $00 ; Ch0, Note On, C4, Inst 0 | ||
| + | .byte $40, $19, $01 ; Ch1, Note On, C3, Inst 1 (bass) | ||
| + | .byte $FF ; End of row | ||
| + | |||
| + | ; Row 1: Channel 0 plays E4 | ||
| + | .byte $00, $35, $00 ; Ch0, Note On, E4, Inst 0 | ||
| + | .byte $FF ; End of row | ||
| + | |||
| + | ; Row 2: Channel 0 plays G4 | ||
| + | .byte $00, $38, $00 ; Ch0, Note On, G4, Inst 0 | ||
| + | .byte $FF ; End of row | ||
| + | |||
| + | ; Row 3: Channel 0 plays C5 | ||
| + | .byte $00, $3D, $00 ; Ch0, Note On, C5, Inst 0 | ||
| + | .byte $FF ; End of row | ||
| + | |||
| + | .byte $FF ; End of pattern | ||
| + | |||
| + | music_pattern_1: | ||
| + | ; Row 0: Note off on channel 0, bass plays G2 | ||
| + | .byte $10 ; Ch0, Note Off | ||
| + | .byte $40, $14, $01 ; Ch1, Note On, G2, Inst 1 | ||
| + | .byte $FF ; End of row | ||
| + | |||
| + | ; Row 1: Channel 0 plays G4 | ||
| + | .byte $00, $38, $00 ; Ch0, Note On, G4, Inst 0 | ||
| + | .byte $FF ; End of row | ||
| + | |||
| + | ; Row 2: Channel 0 plays B4 | ||
| + | .byte $00, $3C, $00 ; Ch0, Note On, B4, Inst 0 | ||
| + | .byte $FF ; End of row | ||
| + | |||
| + | ; Row 3: Channel 0 plays D5 | ||
| + | .byte $00, $3F, $00 ; Ch0, Note On, D5, Inst 0 | ||
| + | .byte $FF ; End of row | ||
| + | |||
| + | .byte $FF ; End of pattern | ||
| + | music_end: | ||
| + | </ | ||
music_file_format.1770038972.txt.gz · Last modified: by appledog
