diff options
| author | Henny022p <info@henny022.de> | 2021-03-24 08:40:16 +0100 |
|---|---|---|
| committer | Henny022p <info@henny022.de> | 2021-03-24 08:40:16 +0100 |
| commit | 6e7674e8657bf189b797afcc7e9501f07bbff245 (patch) | |
| tree | f70054504c7a1098dc96bd9a4d981d8aa5a597ef /include/gba | |
| parent | 5af4805e59a3f83e12467fcb9443a18e2f6d5a4c (diff) | |
music players
Diffstat (limited to 'include/gba')
| -rw-r--r-- | include/gba/m4a.h | 121 |
1 files changed, 117 insertions, 4 deletions
diff --git a/include/gba/m4a.h b/include/gba/m4a.h index 15e1a972..0dcbd822 100644 --- a/include/gba/m4a.h +++ b/include/gba/m4a.h @@ -46,18 +46,131 @@ typedef struct SongHeader { typedef struct Song { const SongHeader* header; - u16 ms; + u16 musicPlayerIndex; u16 me; } Song; +typedef struct SoundChannel { + u8 statusFlags; + u8 type; + u8 rightVolume; + u8 leftVolume; + u8 attack; + u8 decay; + u8 sustain; + u8 release; + u8 key; + u8 envelopeVolume; + u8 envelopeVolumeRight; + u8 envelopeVolumeLeft; + u8 echoVolume; + u8 echoLength; + u8 unk0; + u8 unk1; + u8 gateTime; + u8 midiKey; + u8 velocity; + u8 priority; + u8 rhythmPan; + u8 unk2[3]; + u32 count; + u32 fw; + u32 frequency; + WaveData* wav; + u32 currentPointer; + MusicPlayerTrack* track; + u32 prev; + u32 next; + u32 unk3; + u16 xpi; + u16 xpc; +} SoundChannel; + +typedef void (*MPlayMainFunc)(MusicPlayerInfo*); + +// typedef above +struct MusicPlayerInfo { + const SongHeader* songHeader; + u32 status; + u8 trackCount; + u8 priority; + u8 cmd; + u8 unk_B; + u32 clock; + u8 gap[8]; + u8* memAccArea; + u16 tempoD; + u16 tempoU; + u16 tempoI; + u16 tempoC; + u16 fadeOI; + u16 fadeOC; + u16 fadeOV; + MusicPlayerTrack* tracks; + ToneData* tone; + u32 ident; + MPlayMainFunc func; + u32* intp; +}; + +#define MPT_FLG_VOLSET 0x01 +#define MPT_FLG_VOLCHG 0x03 +#define MPT_FLG_PITSET 0x04 +#define MPT_FLG_PITCHG 0x0C +#define MPT_FLG_START 0x40 +#define MPT_FLG_EXIST 0x80 + +// typedef above +struct MusicPlayerTrack { + u8 flags; + u8 wait; + u8 patternLevel; + u8 repN; + u8 gateTime; + u8 key; + u8 velocity; + u8 runningStatus; + u8 keyM; + u8 pitM; + s8 keyShift; + s8 keyShiftX; + s8 tune; + u8 pitX; + s8 bend; + u8 bendRange; + u8 volMR; + u8 volML; + u8 vol; + u8 volX; + s8 pan; + s8 panX; + s8 modM; + u8 mod; + u8 modT; + u8 lfoSpeed; + u8 lfoSpeedC; + u8 lfoDelay; + u8 lfoDelayC; + u8 priority; + u8 echoVolume; + u8 echoLength; + SoundChannel* chan; + ToneData tone; + u8 gap[10]; + u16 unk_3A; + u32 unk_3C; + u8* cmdPtr; + u8* patternStack[3]; +}; + typedef struct MusicPlayer { MusicPlayerInfo* info; - MusicPlayerTrack* track; - u8 unk_8; + MusicPlayerTrack* tracks; + u8 nTracks; u16 unk_A; } MusicPlayer; -extern const MusicPlayer gMPlayTable[]; +extern const MusicPlayer gMusicPlayers[]; extern const Song gSongTable[]; void m4aSoundInit(void); |
