User Tools

Site Tools


music_file_format

This is an old revision of the document!


Music File Format

How to do it?

Proposal 1

MUSIC FILE FORMAT v1.0

  • Header (16 bytes):
    • +0: [2] Magic: “SD” ($53 $44)
    • +2: [1] Version (1)
    • +3: [1] Flags
    • +4: [2] Tempo (ms per row)
    • +6: [1] Number of instruments
    • +7: [1] Number of patterns
    • +8: [1] Song length (orders)
    • +9: [7] Reserved
  • Instrument Table (8 bytes each):
    • +0: [1] Waveform (WAVE_xx constant)
    • +1: [1] Pulse width / duty cycle
    • +2: [1] Attack
    • +3: [1] Decay
    • +4: [1] Sustain
    • +5: [1] Release
    • +6: [1] Default volume
    • +7: [1] Reserved

NOTE: This might support sample playback later. Waveform can be 0x10 to indicate sample? Address can be in +1, +2, +3, followed by volume envelope, speed, effects and (reserved) remains intact.

  • Order List (1 byte each):
    • Pattern numbers in playback order
    • Terminated by $FF ($FFFF or $0000?)
  • Patterns:
    • Each pattern is a sequence of rows
    • Each row is a sequence of channel commands
    • Row terminated by $00
    • Pattern terminated by $FF (see above)

Row Command Format

Command Byte:

  • Bits 7-6: Channel (0-3)
  • Bits 5-4: Command type
  • Bits 3-0: Depends on command type

OR

  • Command Byte
  • Channel Byte
  • Data Word + Data Word + Data Word (Reserved)

Command Types:

  • 00 = Note On (3 bytes total)
    • [Cmd] [Note] [Instrument]
  • 01 = Note Off (1 byte)
    • [Cmd]
  • 10 = Set Volume (2 bytes)
    • [Cmd] [Volume]
  • 11 = Effect (3 bytes)
    • [Cmd] [Effect Type] [Effect Param]
music_file_format.1770038534.txt.gz · Last modified: by appledog

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki