Music format
		
		
		
		Jump to navigation
		Jump to search
		
This page documents the format for music and sound effects in the context of the disassembly.
Sound channels
The gameboy has 4 sound channels, but the oracles keep track of 8 channels internally (4 for music, 4 for sound effects). Only one of each can play at a time, since they share the same hardware channels.
| Actual channel | Music channel index | Sound effect channel index | 
|---|---|---|
| Square 1 | 0 | 2 | 
| Square 2 | 1 | 3 | 
| Wave | 4 | 5 | 
| Noise | 6 | 7 | 
The music melody usually goes on Square 2, so sound effects usually prefer Square 1, so as not to drown it out. Square 1 has the "frequency sweep" feature which may be better used for sound effects?
audio/ages/soundChannelPointers.s
Data is formatted like so (Lynna city music used as an example):
sound0a:
	.db $00
	.dw sound0aChannel0
	.db $01
	.dw sound0aChannel1
	.db $04
	.dw sound0aChannel4
	.db $06
	.dw sound0aChannel6
	.db $ff- The .dblines determine which channel to use, and what its priority is.- Bits 4-7 (the first digit) determine the priority. Lower or equal values will override higher ones when multiple sound effects are played.
- Bits 0-3 (the second digit) determine the channel number.
 
- The .dwlines are pointers to the channel data (in audio/ages/soundChannelData.s).
- It stops reading channels at .db $ff.
Command list
These are commands used in audio/ages/soundChannelData.s.
| Command | Description | 
|---|---|
| note $XX $YY | Plays a note with frequency X for length Y. | 
| wait1 $XX | Wait a certain number of time units. | 
| wait2 $XX | ? | 
| env $X $YY | Sets the channel "envelope", which controls how the volume changes while each note is being played. | 
| vol $X | Sets the channel volume (0-15). Does not work on the wave channel. (Volume control is limited, so it's reserved for softening on the menu screen? Must use softer waveforms instead to control volume.) | 
| cmdf0 $XX | ? | 
| duty $XX | Sets the "duty cycle" (for square channels, 0-3), or the waveform (for the wave channel). | 
| cmdf8 $XX | Controls sweep for square channel 1? Frequency goes up if bit 7 is unset, down if set. | 
| vibrato $XX | Controls vibrato. | 
| cmdfd $XX | Transpose? | 
| goto <label> | Jump to an address (used for looping). | 
| cmdff | End of music / sound effect? |