Alchemy

sound

games/tbs/include/sound on GitHub

audio_engine_types.h

games/tbs/include/sound/audio_engine_types.h

Structures

SoundVoice

struct SoundVoice

A voice a track plays its notes with: its kind and base key, the sample or wave it plays, and its attack, decay, sustain and release.

FieldDeclared as
kindu8 kindbits: 7 rhythm | 6 key split | 3 fixed rate for PCM, bias rounding for CGB | 2..0 CGB channel (0 PCM). A rhythm or split voice plays an entry of the voice table at target, chosen by the key (rhythm) or through the key map that attack's four bytes point to (split).
baseKeyu8 baseKeyKey a rhythm entry plays every note at.
lengthu8 lengthCGB sound length (NRx1); 0 plays until released.
panOrSweepu8 panOrSweepCGB channel 1's sweep (NR10) when bit 7 is clear and bits 6..4 are not; else no sweep. In a rhythm entry with bit 7 set, the note's pan is (value - 192) * 2.
targetconst void *targetThe PCM sample, the CGB wave pattern, duty or noise width, or for a rhythm or split voice its voice table.
attacku8 attackPCM: added to the envelope each frame until 255. CGB: frames a step. In a split voice, these four bytes are a pointer to its key map.
decayu8 decayPCM: envelope * decay / 256 a frame. CGB: frames a step.
sustainu8 sustainLevel decay stops at: 0 to 255 for PCM, 0 to 15 for CGB.
releaseu8 releasePCM: envelope * release / 256 a frame. CGB: frames a step.

Line 114

SoundNote

struct SoundNote

A PCM note, one of 12 the mixer renders: its state and envelope, its output levels, and its links to the other notes of its track. A track's note list holds CGB notes through this type too; the names from 0x0a to 0x1c come from the CGB layout (CgbNote).

FieldDeclared as
stateu8 state0 when free. bits: 7 start | 6 released | 4 looping | 2 echo | 1..0 phase (3 attack, 2 decay, 1 sustain, 0 release).
kindu8 kindThe voice's kind; bits 2..0 nonzero for a CGB note.
outRightu8 outRightVelocity and track volume to the right, 0 to 255.
outLeftu8 outLeftVelocity and track volume to the left, 0 to 255.
unk04u8 unk04[2]The voice's attack (0x04) and decay (0x05).
sustainu8 sustainThe voice's sustain level.
unk07u8 unk07[3]The voice's release (0x07), the key played (0x08) and the envelope level, 0 to 255 (0x09).
peaku8 peakFor a PCM note, the mixer writes the envelope's right level here each frame; the name comes from CgbNote.peak.
unk0bu8 unk0b[0x0e]0x0b left level, 0x0c echo level, 0x0d echo frames, 0x10 gate in ticks, 0x11 the song's key, 0x12 velocity, 0x13 priority, 0x14 rhythm pan; the mixer keeps a PCM note's samples left in the word at 0x18.
sustainLevelu8 sustainLevelCgbNote.sustainLevel; inside the samples-left word for a PCM note.
unk1au8 unk1aInside the samples-left word for a PCM note.
panBitsu8 panBitsCgbNote.panBits; inside the samples-left word for a PCM note.
channelBitsu8 channelBitsCgbNote.channelBits; for a PCM note, the mixer's fractional sample position is the word at 0x1c.
unk1du8 unk1d[0x0f]0x1d CGB update bits, 0x1e CGB length, 0x1f CGB sweep, 0x20 the word frequency, 0x24 the voice's target (the sample), 0x28 the next sample byte (mixer).
trackstruct SoundTrack *trackThe track whose list holds this note; NULL once detached.
prevstruct SoundNote *prevThe note started after this one in the track's list (nearer its head); NULL at the head.
nextstruct SoundNote *nextThe note started before this one in the track's list; NULL at the end.
unk38u8 unk38[8]Not named by TBS code.

Used by AudioCommand_InvokeSlot34, AudioEngine_SetMode, AudioEngine_StopAllChannels.

Line 142

CgbNote

struct CgbNote

A note on one of the four CGB channels of the hardware: its state and envelope, its levels and pan, its frequency and its wave.

FieldDeclared as
stateu8 stateCgbNoteState and CgbNotePhase; 0 when the channel is free.
kindu8 kindChannel number 1 to 4 at setup, then the voice's kind; bit 3 rounds the frequency to the sound bias's resolution on channels 1 to 3.
outRightu8 outRightVelocity and track volume to the right, 0 to 255.
outLeftu8 outLeftVelocity and track volume to the left, 0 to 255.
attacku8 attackFrames per attack step.
decayu8 decayFrames per decay step.
sustainu8 sustainSustain level 0 to 15, scaled by peak.
releaseu8 releaseFrames per release step.
keyu8 keyThe key played, before the track's pitch.
levelu8 levelEnvelope level 0 to 15 written to the channel.
peaku8 peakTop of the envelope: (outRight + outLeft) / 16, at most 15 when one side plays.
counteru8 counterFrames left in the current envelope step.
echoLevelu8 echoLevelAfter release, the level held is peak * echoLevel / 256.
echoLengthu8 echoLengthFrames the echo lasts.
unk0eu8 unk0e[0x0b]0x10 gate in ticks, 0x11 the song's key, 0x12 velocity, 0x13 priority (a new note of higher priority takes the channel), 0x14 rhythm pan.
sustainLevelu8 sustainLevel(peak * sustain + 15) / 16.
triggeru8 triggerValue for NRx4: 7 restart, 6 length on, 2..0 frequency.
panBitsu8 panBitsNR51 bits this note sets: one side or both.
channelBitsu8 channelBitsThis channel's NR51 bits: 0x11, 0x22, 0x44, 0x88.
modifiedu8 modifiedCgbNoteModified: what to write to the channel.
lengthu8 lengthThe voice's length.
sweepu8 sweepChannel 1's NR10 sweep; 8 when none.
frequencyu32 frequencyTone frequency from Cgb_KeyToFrequency (2048 added), or channel 4's NR43 value.
waveu32 *waveChannel 3: the 16-byte wave pattern. Channels 1 and 2: the duty, into NRx1's bits 7..6. Channel 4: the width, into NR43's bit 3.
loadedWaveu32 *loadedWaveChannel 3: the pattern last copied into wave RAM.
unk2cu8 unk2c[0x14]0x2c track, 0x30 prev and 0x34 next, as in SoundNote.

Used by AudioEngine_StopAllChannels, CgbAudio_Initialize, CgbNote_UpdatePanEnvelope, Cgb_UpdateChannels, gSound_CgbNotes.

Line 184

SoundTrack

struct SoundTrack

A track of a playing song: the song commands it runs, its voice and notes, and the pitch, volume, pan and modulation it gives them.

FieldDeclared as
flagsu8 flagsSoundTrackFlag. bits: 7 active | 6 reset | 3..2 pitch to update | 1..0 volume to update.
unk01u8 unk01[7]0x01 ticks until the next command, 0x02 pattern depth (0 to 3), 0x03 repeat count, 0x04 gate of the last note in ticks, 0x05 its key, 0x06 its velocity, 0x07 the last command byte from 0xBD up, which a byte below 0x80 repeats.
pitchHiu8 pitchHiWhole semitones of the track's pitch, read as signed and added to each note's key (a sum below 0 plays key 0).
pitchLou8 pitchLoThe pitch's fraction, 0 to 255 in 1/256 semitone, passed as the fine pitch to the key-to-frequency step.
keyOffsetAs8 keyOffsetASemitones, from the song's key-shift command.
keyOffsetBs8 keyOffsetBSemitones, from MusicPlayer_SetPitch.
tunes8 tuneThe tune command's byte - 64: 1/64 semitone.
fineu8 fine1/256 semitone, from MusicPlayer_SetPitch.
bends8 bendThe bend command's byte - 64: full bend is bendRange.
bendRangeu8 bendRangeSemitones a full bend reaches; 2 at reset.
outVolumeAu8 outVolumeARight volume: (pan + 128) * scaled volume / 256.
outVolumeBu8 outVolumeBLeft volume: (127 - pan) * scaled volume / 256.
volumeu8 volumeThe song's volume command, scaled by volumeScale / 32.
volumeScaleu8 volumeScale0 to 64 (full, the reset value): a player volume or fade level of 0 to 0x100 divided by 4.
pans8 panThe pan command's byte - 64, -64 to 63; doubled for output.
panOffsets8 panOffsetAdded to the doubled pan, from MusicPlayer_SetPan.
modAmounts8 modAmountThe LFO's output, modDepth * wave / 64: added to the pitch in 1/16 semitone, to the pan, or scaling the volume by (amount + 128) / 128.
modDepthu8 modDepth0 to 255, from the modulation command or MusicPlayer_SetModulationDepth; 0 stops the LFO and clears modAmount.
modTargetu8 modTargetSoundModulationTarget.
lfoSpeedu8 lfoSpeedLFO phase step a tick, 22 at reset; 0 stops the LFO and clears modAmount.
lfoPhaseu8 lfoPhase0 to 255, wrapping; the wave is phase over 0 to 63, 128 - phase over 64 to 191 and phase - 256 over 192 to 255, so -64 to 64.
unk1bu8 unk1b[3]0x1b LFO delay in ticks (song command), 0x1c its countdown, reloaded by each note, 0x1d track priority added to the player's for its notes.
tailLevelu8 tailLevelEach new note's echo level.
tailLengthu8 tailLengthEach new note's echo length in frames.
notesstruct SoundNote *notesThe notes this track started, newest first, linked through SoundNote.next; PCM notes from SoundWork.pcmNotes and CGB notes. NULL ends the list or leaves it empty.
voicestruct SoundVoice voiceCopied from the player's voice table by the voice command, or set a field at a time by extended commands.
unk30u8 unk30[0x10]Not named by TBS code; zeroed with the first 64 bytes at reset.
cursorconst u8 *cursorThe next command byte in the song's data, from the header's track pointer; a track's commands end at a finish command (0xB1).
unk44u8 unk44[0x0c]Cursors to return to after each of up to three nested patterns.

Used by MusicPlayer_Initialize, MusicPlayer_ResetActiveTracks, MusicPlayer_SetLfoSpeed, MusicPlayer_SetModulationDepth, MusicPlayer_SetPan, MusicPlayer_SetPitch, MusicPlayer_SetVolume, MusicPlayer_StartSong, MusicPlayer_StepFade, MusicPlayer_Stop, MusicTrack_CalcOutput, MusicTrack_ClearModulation, MusicTrack_DispatchStreamCommand, MusicTrack_OperateWorkByte, MusicTrack_ReadVoiceTarget, MusicTrack_SetTailLength, MusicTrack_SetTailLevel, MusicTrack_SetVoiceAttack, MusicTrack_SetVoiceDecay, MusicTrack_SetVoiceKind, MusicTrack_SetVoiceLength, MusicTrack_SetVoicePanOrSweep, MusicTrack_SetVoiceRelease, MusicTrack_SetVoiceSustain, Runtime_CallWorkEntryWithArgs.

Line 275

SequenceHeader

struct SequenceHeader

A song's header: its track count, priority and mode, its voices, and where each track's commands start.

FieldDeclared as
trackCountu8 trackCountAt most 16; 0 in the empty songs.
unk01u8 unk010 in every song; ags-music refuses another block count.
priorityu8 priorityBecomes the player's priority.
modeu8 modeWith bit 7 set, passed to AudioEngine_SetMode (bits 6..0 the reverb); ags-music's reverb field.
voicesconst struct SoundVoice *voicesThe voice table its tracks choose from.
tracksconst u8 *tracks[1]Each track's first command, trackCount of them.

Used by MusicPlayer_StartSong.

Line 339

SoundPlayer

struct SoundPlayer

A player, which plays one song: its header and status, its tracks, its tempo and fade.

FieldDeclared as
headerconst struct SequenceHeader *headerThe song playing or last played.
statusu32 statusbits: 31 paused | 15..0 tracks active after the last tick. Set to SOUND_PLAYER_PAUSED alone when no track is left.
trackCountu8 trackCountTracks this player owns, at most 16.
priorityu8 priorityThe song's priority.
unk0au8 unk0aThe last command run: its byte - 0xB1.
checkPriorityu8 checkPriorityNonzero: a song of lower priority does not replace a playing one. From gSound_PlayerSlots, 0 for every player.
ticksu32 ticksSong ticks played since the song started.
unk10u8 unk10[8]Not named by TBS code.
workBytesu8 *workBytesgSound_WorkBytes, which the work-byte command uses.
tempou16 tempoTwice the tempo command's byte; 150 at start.
tempoScaleu16 tempoScale256 plays at the song's tempo.
tempoStepu16 tempoSteptempo * tempoScale / 256, added to tempoCount each frame.
tempoCountu16 tempoCountEach 150 in it runs one tick, so a tempoStep of 150 is a tick a frame.
fadePeriodu16 fadePeriodFrames between fade steps; 0 when not fading.
fadeCounteru16 fadeCounterFrames left until the next fade step.
fadeVolumeu16 fadeVolumebits: 8..4 level, 0 to 0x100 in steps of 16 | 1 fade in | 0 pause at the end (SoundFadeFlag).
unk2au8 unk2a[2]Not named by TBS code.
tracksstruct SoundTrack *trackstrackCount tracks.
voicesconst struct SoundVoice *voicesThe song's voice table.
locku32 lockSOUND_LOCK when free; raised while the player is changed or ticked.
nextTickvoid (*nextTick)(struct SoundPlayer *player)The tick routine and player that were first in the chain before this player was added; this player's tick runs them first.
nextTickPlayerstruct SoundPlayer *nextTickPlayerPassed to nextTick.

Used by Audio_Initialize, Audio_PlayOrResumeSound, Audio_PlaySoundIfInactive, Audio_ResumePlayer, Audio_ResumeSound, Audio_StopSound, MusicPlayer_BeginFadeOut, MusicPlayer_FadeIn, MusicPlayer_FadeOut, MusicPlayer_FadeOutPause, MusicPlayer_Initialize, MusicPlayer_ResetActiveTracks, MusicPlayer_Resume, MusicPlayer_SetFadeParameters, MusicPlayer_SetLfoSpeed, MusicPlayer_SetModulationDepth, MusicPlayer_SetPan, MusicPlayer_SetPitch, MusicPlayer_SetPitchAndUpdateFrequency, MusicPlayer_SetVolume, MusicPlayer_StartSong, MusicPlayer_StepFade, MusicPlayer_Stop, MusicTrack_CalcOutput, MusicTrack_DispatchStreamCommand, MusicTrack_OperateWorkByte, MusicTrack_ReadVoiceTarget, MusicTrack_SetTailLength, MusicTrack_SetTailLevel, MusicTrack_SetVoiceAttack, MusicTrack_SetVoiceDecay, MusicTrack_SetVoiceKind, MusicTrack_SetVoiceLength, MusicTrack_SetVoicePanOrSweep, MusicTrack_SetVoiceRelease, MusicTrack_SetVoiceSustain, Runtime_CallWorkEntryWithArgs, gMusicPlayerBgm, gMusicPlayerFanfare, gSound_Player3.

Line 352

SoundWork

struct SoundWork

The sound driver's work: its lock, the mixer's rate and buffers, the PCM and CGB notes, and the routines the driver calls.

FieldDeclared as
locku32 lockSOUND_LOCK when free; raised while the driver changes it.
transferCountdownvolatile u8 transferCountdown
reverbu8 reverb0 to 127 (mode bits 6..0); 0 skips the reverb pass.
pcmNoteCountu8 pcmNoteCountPCM notes in use, 8 at start (mode bits 11..8).
volumeu8 volumePCM volume 0 to 15, 15 at start (mode bits 15..12).
rateu8 rate1 to 12, indexes gSound_FrameLengths (mode bits 19..16).
unk09u8 unk09Not named by TBS code.
cgbTicku8 cgbTickCounts 14 down to 0 once a CGB update; at 0 the envelopes take an extra step.
transferPeriodu8 transferPeriodFrames the buffers hold: 0x630 / frameSamples.
maxLinesu8 maxLinesNonzero: the mixer stops taking notes once the scanline passes this many lines after its start. Sound_MaxLines, 0.
unk0du8 unk0d[3]Not named by TBS code.
frameSamplesu32 frameSamplesSamples mixed a frame, from gSound_FrameLengths.
outputRateu32 outputRateSamples a second: frameSamples * 59.7275, rounded.
rateStepu32 rateStep2^23 / outputRate, rounded; a note's frequency times it is its step a sample.
cgbNotesstruct CgbNote *cgbNotesgSound_CgbNotes; NULL before CGB setup.
tickvoid (*tick)(struct SoundPlayer *player)First of the chain of player ticks run each mixer frame; NULL for none.
tickPlayerstruct SoundPlayer *tickPlayerPassed to tick.
cgbUpdatevoid (*cgbUpdate)(void)Run each mixer frame: Cgb_UpdateChannels.
cgbMutevoid (*cgbMute)(u8 channel)CgbChannel_Mute, channel 1 to 4.
cgbFrequencys32 (*cgbFrequency)(u8 kind, u8 key, u8 fine)Cgb_KeyToFrequency.
commandsSoundCommand *commandsgSound_CommandTable.
noteOnvoid (*noteOn)(u32 command, struct SoundPlayer *player, struct SoundTrack *track)MusicTrack_HandleNote, run for song bytes from 0xCF up with the byte - 0xCF.
unk3cvoid (*unk3c)(void)Set to Audio_EmptyCallback by AudioEngine_Initialize; no TBS code reads it by name.
unk40u8 unk40[0x10]Not named by TBS code.
pcmNotesstruct SoundNote pcmNotes[12]pcmNoteCount of them play.
bufferss8 buffers[2][0x630]Right (0, DMA 1 to FIFO A) and left (1, DMA 2 to FIFO B) samples, transferPeriod frames of frameSamples each.

Used by AudioEngine_Initialize, AudioEngine_ResumeDirectSound, AudioEngine_SetMode, AudioEngine_SetPcmRate, AudioEngine_StopAllChannels, AudioEngine_SuspendDirectSound, CgbAudio_Initialize, Cgb_UpdateChannels, MusicPlayer_Initialize, gSound_Work.

Line 390

PlayerSlot

struct PlayerSlot

An entry of the player table: a player, its tracks and track count, and its priority check.

FieldDeclared as
playerstruct SoundPlayer *player
tracksstruct SoundTrack *trackstrackCount tracks for the player.
trackCountu8 trackCount
unk09u8 unk090 in every entry; not named by TBS code.
checkPriorityu16 checkPriorityCopied to the player's checkPriority; 0 everywhere.

Used by Audio_PlayOrResumeSound, Audio_PlaySound, Audio_PlaySoundIfInactive, Audio_ResumeSound, Audio_StopSound, gSound_PlayerSlots.

Line 440

SongEntry

struct SongEntry

An entry of the song table: a song's header and the player table entry that plays it.

FieldDeclared as
headerconst struct SequenceHeader *header
slotu16 slotIndex into gSound_PlayerSlots; AudioCommand_Play gives slot 7's songs the first player from 7 down to 4 with no active track, else 7.
unk06u16 unk06The same value as slot in every entry; not named by TBS code.

Used by Audio_PlayOrResumeSound, Audio_PlaySound, Audio_PlaySoundIfInactive, Audio_ResumeSound, Audio_StopSound, gSound_SongTable.

Line 450

Enumerations

SoundDriverLimit

enum SoundDriverLimit

Value=
SOUND_PCM_NOTE_CAPACITY12The PCM notes in SoundWork.pcmNotes; mode changes and AudioEngine_StopAllChannels clear all 12, though only pcmNoteCount play.
SOUND_CGB_CHANNEL_COUNT4CGB channels, numbered 1 to 4.
SOUND_PLAYER_TRACK_LIMIT16Most tracks a player takes; MusicPlayer_Initialize caps its count here, and the track masks of the MusicPlayer_Set routines are 16 bits.

Line 91

Also, enumerations without a comment: SoundModulationTarget, SoundFadeFlag, CgbNoteState, CgbNotePhase, CgbNoteModified, SoundTrackFlag, SoundPlayerFlag, SoundTrackWorkOperation.

Types

SoundCommand

typedef void (*SoundCommand)(struct SoundPlayer *player, struct SoundTrack *track);

A command table entry: the driver calls it with the player and the track.

Used by CgbAudio_Initialize, Runtime_CallWorkEntryWithArgs, gSound_CommandTable, gSound_ExtendedCommandTable.

Line 48

Macros

SOUND_COMMAND_CAST

#define SOUND_COMMAND_CAST(type, routine) ((type)(void (*)(void))(routine))

Converts between SoundCommand and a table entry that takes other parameters, through the generic function type so neither cast warns.

Used by AudioCommand_InvokeSlot34, AudioCommand_InvokeSlot35, CgbAudio_Initialize.

Line 52

SOUND_COMMAND_FINISH

#define SOUND_COMMAND_FINISH 0

Entries of gSound_CommandTable, in gSound_CommandTableTemplate's order. A song byte from 0xB1 to 0xCE runs entry (byte - 0xB1) for its track; bytes from 0xCF up start notes through the work's noteOn instead, so entries 30 to 35 are the driver's helper tail, reached only by its own calls. Unused entries hold MusicTrack_FinishSequence. @{ Byte 0xB1: ends the track, releasing and unlinking its notes.

Used by Runtime_CallWorkEntryWithArgs.

Line 61

SOUND_COMMAND_WORK_BYTE

#define SOUND_COMMAND_WORK_BYTE 8

Byte 0xB9, installed by CgbAudio_Initialize: an operation, a work byte and an operand; sets, adds to or compares a byte of the player's workBytes (SoundTrackWorkOperation), jumping like GOTO when a comparison holds.

Used by CgbAudio_Initialize.

Line 66

SOUND_COMMAND_LFO_SPEED

#define SOUND_COMMAND_LFO_SPEED 17

Byte 0xC2: sets lfoSpeed from the next byte; 0 clears the modulation.

Used by CgbAudio_Initialize.

Line 68

SOUND_COMMAND_MODULATION

#define SOUND_COMMAND_MODULATION 19

Byte 0xC4: sets modDepth from the next byte; 0 clears the modulation.

Used by CgbAudio_Initialize.

Line 70

SOUND_COMMAND_EXTENDED

#define SOUND_COMMAND_EXTENDED 28

Byte 0xCD, installed by CgbAudio_Initialize: runs the entry of gSound_ExtendedCommandTable the next byte names (voice fields, tail level and length).

Used by CgbAudio_Initialize.

Line 74

SOUND_COMMAND_RELEASE_KEY

#define SOUND_COMMAND_RELEASE_KEY 29

Byte 0xCE: releases the track's sounding note of the key given (or of its last key when no key byte follows).

Used by CgbAudio_Initialize.

Line 77

SOUND_COMMAND_STOP_TRACK

#define SOUND_COMMAND_STOP_TRACK 31

MusicTrack_Stop: silences the track's notes and empties its list.

Used by CgbAudio_Initialize.

Line 80

SOUND_COMMAND_DETACH_NOTE

#define SOUND_COMMAND_DETACH_NOTE 34

SoundNote_Detach: unlinks a note from its track's list (AudioCommand_InvokeSlot34).

Used by AudioCommand_InvokeSlot34.

Line 85

SOUND_COMMAND_CLEAR_WORK

#define SOUND_COMMAND_CLEAR_WORK 35

SoundDriver_ClearBuffer: zeroes the first 64 bytes of a player or track (AudioCommand_InvokeSlot35).

Used by AudioCommand_InvokeSlot35.

Line 88

Also, macros without a comment: SOUND_LOCK, SOUND_WORK, REG_NR10, REG_NR11, REG_NR12, REG_NR13, REG_NR14, REG_NR21, REG_NR22, REG_NR23, REG_NR24, REG_NR30, REG_NR31, REG_NR32, REG_NR33, REG_NR34, REG_NR41, REG_NR42, REG_NR43, REG_NR44, REG_NR51, REG_NR50, REG_SOUNDCNT_L, REG_SOUNDCNT_X, SOUNDCNT_X_ENABLE, SOUNDCNT_X_ALL_TONES_ON, REG_SOUNDBIAS_H, REG_WAVE_RAM, SOUND_COMMAND_GOTO, SOUND_COMMAND_PCM_RATE, SOUND_COMMAND_FADE, SOUND_COMMAND_CALCULATE_OUTPUT, SOUND_FADE_FULL_VOLUME, SOUND_FADE_STEP.

Globals, without a comment: gSound_PlayerSlots, gSound_SongTable, gSound_CommandTable, gSound_ExtendedCommandTable.

sound.h

games/tbs/include/sound/sound.h

Macros, without a comment: SOUND_H.

Globals

gBuildStamp

extern s32 gBuildStamp[]

The build stamp System_CopyBuildStamp copies to IWRAM at power-on: twelve digits and a zero word, at the bottom of the frame-wait stack.

Used by AudioTest_RunParameterController, System_CopyBuildStamp.

Line 61

Also, globals without a comment: gSound_Cgb3LevelCodes, gSound_CgbFrequencySteps, gSound_CgbPitchCodes, gSound_FrameLengths, gSound_NoisePitchCodes, gSound_PcmFrequencySteps, gSound_PcmPitchCodes, gSound_Work, gSound_WorkBytes, gMusicFadeRequested, gSoundClipFlag, gEwram_Data1.

Declarations, without a comment: Sound_TickDmaRestartTimer.

On this page