summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authornotyourav <65437533+notyourav@users.noreply.github.com>2021-04-03 19:17:01 -0700
committerGitHub <noreply@github.com>2021-04-03 19:17:01 -0700
commit010c0456eb207267d75c91cf68ff2b2356debcc0 (patch)
treecab487b0a7e3dc34f0a5337be5175d62ed83db40 /include
parent9f6afe9bfbeac18ed36ee9c0507b539c480d163b (diff)
parentcb03157e6553fde6787ee9837d3c70bc500696d3 (diff)
Merge pull request #145 from Henny022p/m4a
Sound
Diffstat (limited to 'include')
-rw-r--r--include/audio.h429
-rw-r--r--include/functions.h3
-rw-r--r--include/gba/m4a.h187
-rw-r--r--include/gba/m4a_internal.h397
-rw-r--r--include/main.h2
5 files changed, 571 insertions, 447 deletions
diff --git a/include/audio.h b/include/audio.h
index ad600283..4f8ecb84 100644
--- a/include/audio.h
+++ b/include/audio.h
@@ -1,8 +1,13 @@
#ifndef AUDIO_H
#define AUDIO_H
+#include "global.h"
+
+#define NUM_BGM 99
+
typedef enum {
SFX_NONE,
+ // BGM
BGM_CASTLE_TOURNAMENT,
BGM_VAATI_MOTIF,
BGM_TITLE_SCREEN,
@@ -20,8 +25,8 @@ typedef enum {
BGM_STORY,
BGM_FESTIVAL_APPROACH,
BGM_BEAT_VAATI,
-
- BGM_BEANSTALK = 0x13,
+ BGM_UNUSED_12,
+ BGM_BEANSTALK,
BGM_HOUSE,
BGM_CUCCO_MINIGAME,
BGM_SYRUP_THEME,
@@ -62,11 +67,48 @@ typedef enum {
BGM_LOST_WOODS,
BGM_FAIRY_FOUNTAIN2,
BGM_WIND_RUINS,
-
- BGM_LEARN_SCROLL = 0x5E,
+ BGM_UNUSED_3C,
+ BGM_UNUSED_3D,
+ BGM_UNUSED_3E,
+ BGM_UNUSED_3F,
+ BGM_UNUSED_40,
+ BGM_UNUSED_41,
+ BGM_UNUSED_42,
+ BGM_UNUSED_43,
+ BGM_UNUSED_44,
+ BGM_UNUSED_45,
+ BGM_UNUSED_46,
+ BGM_UNUSED_47,
+ BGM_UNUSED_48,
+ BGM_UNUSED_49,
+ BGM_UNUSED_4A,
+ BGM_UNUSED_4B,
+ BGM_UNUSED_4C,
+ BGM_UNUSED_4D,
+ BGM_UNUSED_4E,
+ BGM_UNUSED_4F,
+ BGM_UNUSED_50,
+ BGM_UNUSED_51,
+ BGM_UNUSED_52,
+ BGM_UNUSED_53,
+ BGM_UNUSED_54,
+ BGM_UNUSED_55,
+ BGM_UNUSED_56,
+ BGM_UNUSED_57,
+ BGM_UNUSED_58,
+ BGM_UNUSED_59,
+ BGM_UNUSED_5A,
+ BGM_UNUSED_5B,
+ BGM_UNUSED_5C,
+ BGM_UNUSED_5D,
+ BGM_LEARN_SCROLL,
BGM_EZLO_GET,
-
- SFX_BEEP = 0x64,
+ BGM_UNUSED_60,
+ BGM_UNUSED_61,
+ BGM_UNUSED_62,
+ BGM_UNUSED_63,
+ // SFX
+ SFX_BEEP,
SFX_TEXTBOX_OPEN,
SFX_TEXTBOX_CLOSE,
SFX_TEXTBOX_NEXT,
@@ -147,8 +189,30 @@ typedef enum {
SFX_VO_MINISH2,
SFX_VO_MINISH3,
SFX_VO_MINISH4,
-
- SFX_REM_SLEEP = 0xCC,
+ SFX_B5,
+ SFX_B6,
+ SFX_B7,
+ SFX_B8,
+ SFX_B9,
+ SFX_BA,
+ SFX_BB,
+ SFX_BC,
+ SFX_BD,
+ SFX_BE,
+ SFX_BF,
+ SFX_C0,
+ SFX_C1,
+ SFX_C2,
+ SFX_C3,
+ SFX_C4,
+ SFX_C5,
+ SFX_C6,
+ SFX_C7,
+ SFX_C8,
+ SFX_C9,
+ SFX_CA,
+ SFX_CB,
+ SFX_REM_SLEEP,
SFX_TASK_COMPLETE,
SFX_KEY_APPEAR,
SFX_CF,
@@ -178,84 +242,357 @@ typedef enum {
SFX_WIND1,
SFX_WIND2,
SFX_WIND3,
-
- SFX_SUMMON = 0xF4,
+ SFX_EA,
+ SFX_EB,
+ SFX_EC,
+ SFX_ED,
+ SFX_EE,
+ SFX_EF,
+ SFX_F0,
+ SFX_F1,
+ SFX_F2,
+ SFX_F3,
+ SFX_SUMMON,
SFX_F5,
SFX_EVAPORATE,
SFX_APPARATE,
SFX_F8,
SFX_TELEPORTER,
-
- SFX_ITEM_BOMB_EXPLODE = 0xFD,
+ SFX_FA,
+ SFX_FB,
+ SFX_FC,
+ SFX_ITEM_BOMB_EXPLODE,
SFX_HIT,
-
- SFX_ITEM_SHIELD_BOUNCE = 0x118,
+ SFX_FF,
+ SFX_100,
+ SFX_101,
+ SFX_102,
+ SFX_103,
+ SFX_104,
+ SFX_105,
+ SFX_106,
+ SFX_107,
+ SFX_108,
+ SFX_109,
+ SFX_10A,
+ SFX_10B,
+ SFX_10C,
+ SFX_10D,
+ SFX_10E,
+ SFX_10F,
+ SFX_110,
+ SFX_111,
+ SFX_112,
+ SFX_113,
+ SFX_114,
+ SFX_115,
+ SFX_116,
+ SFX_117,
+ SFX_ITEM_SHIELD_BOUNCE,
SFX_ITEM_GLOVES_KNOCKBACK,
SFX_EM_ARMOS_ON,
-
- SFX_EM_MOBLIN_SPEAR = 0x11E,
+ SFX_11B,
+ SFX_11C,
+ SFX_11D,
+ SFX_EM_MOBLIN_SPEAR,
SFX_LOW_HEALTH,
SFX_CHARGING_UP,
SFX_STAIRS,
-
- SFX_BOSS_HIT = 0x127,
+ SFX_122,
+ SFX_123,
+ SFX_124,
+ SFX_125,
+ SFX_126,
+ SFX_BOSS_HIT,
SFX_BOSS_DIE,
SFX_BOSS_EXPLODE,
-
- SFX_ITEM_LANTERN_ON = 0x13D,
+ SFX_12A,
+ SFX_12B,
+ SFX_12C,
+ SFX_12D,
+ SFX_12E,
+ SFX_12F,
+ SFX_130,
+ SFX_131,
+ SFX_132,
+ SFX_133,
+ SFX_134,
+ SFX_135,
+ SFX_136,
+ SFX_137,
+ SFX_138,
+ SFX_139,
+ SFX_13A,
+ SFX_13B,
+ SFX_13C,
+ SFX_ITEM_LANTERN_ON,
SFX_ITEM_LANTERN_OFF,
SFX_ITEM_SWORD_BEAM,
SFX_140,
SFX_HEART_CONTAINER_SPAWN,
SFX_SPARKLES,
-
- SFX_PLY_SHRINKING = 0x16F,
+ SFX_143,
+ SFX_144,
+ SFX_145,
+ SFX_146,
+ SFX_147,
+ SFX_148,
+ SFX_149,
+ SFX_14A,
+ SFX_14B,
+ SFX_14C,
+ SFX_14D,
+ SFX_14E,
+ SFX_14F,
+ SFX_150,
+ SFX_151,
+ SFX_152,
+ SFX_153,
+ SFX_154,
+ SFX_155,
+ SFX_156,
+ SFX_157,
+ SFX_158,
+ SFX_159,
+ SFX_15A,
+ SFX_15B,
+ SFX_15C,
+ SFX_15D,
+ SFX_15E,
+ SFX_15F,
+ SFX_160,
+ SFX_161,
+ SFX_162,
+ SFX_163,
+ SFX_164,
+ SFX_165,
+ SFX_166,
+ SFX_167,
+ SFX_168,
+ SFX_169,
+ SFX_16A,
+ SFX_16B,
+ SFX_16C,
+ SFX_16D,
+ SFX_16E,
+ SFX_PLY_SHRINKING,
SFX_PLY_GROW,
-
- SFX_EZLO_UI = 0x173,
-
- SFX_LAVA_TILE_STEP = 0x17B,
+ SFX_171,
+ SFX_172,
+ SFX_EZLO_UI,
+ SFX_174,
+ SFX_175,
+ SFX_176,
+ SFX_177,
+ SFX_178,
+ SFX_179,
+ SFX_17A,
+ SFX_LAVA_TILE_STEP,
SFX_LAVA_TILE_WOBBLE,
SFX_LAVA_TILE_SINK,
SFX_LAVA_TILE_FLIP,
SFX_LAVA_TILE_LAND,
-
- SFX_STAIRS_ASCEND = 0x187,
+ SFX_180,
+ SFX_181,
+ SFX_182,
+ SFX_183,
+ SFX_184,
+ SFX_185,
+ SFX_186,
+ SFX_STAIRS_ASCEND,
SFX_STAIRS_DESCEND,
-
- SFX_ICE_BLOCK_SLIDE = 0x1B1,
+ SFX_189,
+ SFX_18A,
+ SFX_18B,
+ SFX_18C,
+ SFX_18D,
+ SFX_18E,
+ SFX_18F,
+ SFX_190,
+ SFX_191,
+ SFX_192,
+ SFX_193,
+ SFX_194,
+ SFX_195,
+ SFX_196,
+ SFX_197,
+ SFX_198,
+ SFX_199,
+ SFX_19A,
+ SFX_19B,
+ SFX_19C,
+ SFX_19D,
+ SFX_19E,
+ SFX_19F,
+ SFX_1A0,
+ SFX_1A1,
+ SFX_1A2,
+ SFX_1A3,
+ SFX_1A4,
+ SFX_1A5,
+ SFX_1A6,
+ SFX_1A7,
+ SFX_1A8,
+ SFX_1A9,
+ SFX_1AA,
+ SFX_1AB,
+ SFX_1AC,
+ SFX_1AD,
+ SFX_1AE,
+ SFX_1AF,
+ SFX_1B0,
+ SFX_ICE_BLOCK_SLIDE,
SFX_ICE_BLOCK_STOP,
SFX_ICE_BLOCK_MELT,
-
- SFX_VO_GORON1 = 0x1B7,
+ SFX_1B4,
+ SFX_1B5,
+ SFX_1B6,
+ SFX_VO_GORON1,
SFX_VO_GORON2,
SFX_VO_GORON3,
SFX_VO_GORON4,
SFX_EM_DEKUSCRUB_HIT,
-
- SFX_ELEMENT_PLACE = 0x1CD,
+ SFX_1BC,
+ SFX_1BD,
+ SFX_1BE,
+ SFX_1BF,
+ SFX_1C0,
+ SFX_1C1,
+ SFX_1C2,
+ SFX_1C3,
+ SFX_1C4,
+ SFX_1C5,
+ SFX_1C6,
+ SFX_1C7,
+ SFX_1C8,
+ SFX_1C9,
+ SFX_1CA,
+ SFX_1CB,
+ SFX_1CC,
+ SFX_ELEMENT_PLACE,
SFX_ELEMENT_FLOAT,
SFX_ELEMENT_CHARGE,
SFX_1D0,
SFX_ELEMENT_INFUSE,
-
- SFX_VO_CUCCO1 = 0x1D6,
+ SFX_1D2,
+ SFX_1D3,
+ SFX_1D4,
+ SFX_1D5,
+ SFX_VO_CUCCO1,
SFX_VO_CUCCO2,
SFX_VO_CUCCO3,
SFX_VO_CUCCO4,
SFX_VO_CUCCO5,
-
- SND_STOP_ALL = 0x80010000,
- SONG_VOL_ZERO = 0x80020000,
- SND_VOL_RESET_ALL = 0x80030000,
- SND_VSYNC_OFF = 0x80040000,
+ SFX_1DB,
+ SFX_1DC,
+ SFX_1DD,
+ SFX_1DE,
+ SFX_1DF,
+ SFX_1E0,
+ SFX_1E1,
+ SFX_1E2,
+ SFX_1E3,
+ SFX_1E4,
+ SFX_1E5,
+ SFX_1E6,
+ SFX_1E7,
+ SFX_1E8,
+ SFX_1E9,
+ SFX_1EA,
+ SFX_1EB,
+ SFX_1EC,
+ SFX_1ED,
+ SFX_1EE,
+ SFX_1EF,
+ SFX_1F0,
+ SFX_1F1,
+ SFX_1F2,
+ SFX_1F3,
+ SFX_1F4,
+ SFX_1F5,
+ SFX_1F6,
+ SFX_1F7,
+ SFX_1F8,
+ SFX_1F9,
+ SFX_1FA,
+ SFX_1FB,
+ SFX_1FC,
+ SFX_1FD,
+ SFX_1FE,
+ SFX_1FF,
+ SFX_200,
+ SFX_201,
+ SFX_202,
+ SFX_203,
+ SFX_204,
+ SFX_205,
+ SFX_206,
+ SFX_207,
+ SFX_208,
+ SFX_209,
+ SFX_20A,
+ SFX_20B,
+ SFX_20C,
+ SFX_20D,
+ SFX_20E,
+ SFX_20F,
+ SFX_210,
+ SFX_211,
+ SFX_212,
+ SFX_213,
+ SFX_214,
+ SFX_215,
+ SFX_216,
+ SFX_217,
+ SFX_218,
+ SFX_219,
+ SFX_21A,
+ SFX_21B,
+ SFX_21C,
+ SFX_21D,
+ SFX_21E,
+ SFX_21F,
+ SFX_220,
+ SFX_221,
+ // special functions
+ SONG_STOP_ALL = 0x80010000,
+ SONG_MUTE = 0x80020000,
+ SONG_PLAY_VOL_RESET_ALL = 0x80030000,
+ SONG_VSYNC_OFF = 0x80040000,
SONG_STOP = 0x80050000,
- SND_VSYNC_ON = 0x80060000,
+ SONG_VSYNC_ON = 0x80060000,
+ SONG_CONTINUE = 0x80070000,
SONG_VOL_FADE_OUT = 0x80080000,
- SONG_VOL_RESET = 0x800B0000,
- SONG_VOL_CHAN1_SILENT = 0x800D0000,
- SONG_VOL_CHAN1_RESET = 0x800E0000,
- SONG_RESET_UNK = 0x80100000,
+ SONG_FADE_IN = 0x80090000,
+ SONG_FADE_IN_CONTINUE = 0x800A0000,
+ SONG_PLAY_VOL_RESET = 0x800B0000,
+ SONG_PLAY_TEMPO_CONTROL = 0x800C0000,
+ SONG_FADE_OUT_BGM = 0x800D0000,
+ SONG_FADE_IN_BGM = 0x800E0000,
+ SONG_INIT = 0x800F0000,
+ SONG_STOP_BGM = 0x80100000,
+ SONG_BGM_0 = 0x80110000,
} Sound;
+typedef struct SoundPlayingInfo {
+ u16 unk_00;
+ bool8 stopBgm;
+ // u8 unk_03;
+ u16 unk_04;
+ s16 volumeMasterUnk;
+ s16 volumeMaster;
+ s16 volumeMasterTarget;
+ s16 volumeBgmUnk;
+ s16 volumeBgm;
+ s16 volumeBgmTarget;
+ s16 volumeSfx;
+ u16 currentBgm;
+} SoundPlayingInfo;
+
+extern SoundPlayingInfo gSoundPlayingInfo;
+
+void InitSound(void);
+void SoundReq(Sound sound);
+void SoundLoop(void);
+
#endif // AUDIO_H
diff --git a/include/functions.h b/include/functions.h
index 5c62cced..b73bd01d 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -11,7 +11,6 @@
#include "structures.h"
// Identified - to be sorted into header files
-extern void SoundReq(u32);
extern void ShowNPCDialogue(Entity*, Dialog*);
extern void DoFade(u32, u32);
extern u32 CheckKinstoneFused(u32);
@@ -143,7 +142,7 @@ extern void sub_080AF2E4(void);
extern void sub_0804F578(void);
extern void sub_08059994(void);
extern s32 sub_0801CFA8(u32);
-extern void sub_080A3210(void);
+extern void InitSoundPlayingInfo(void);
extern void sub_080ADA14(u32, u32); // trampoline to sub_080B27F4
extern void sub_0801E1B8(u32, u32);
extern void sub_0801E1EC(s32, s32, s32);
diff --git a/include/gba/m4a.h b/include/gba/m4a.h
new file mode 100644
index 00000000..0dcbd822
--- /dev/null
+++ b/include/gba/m4a.h
@@ -0,0 +1,187 @@
+#ifndef GUARD_M4A_INTERNAL_H
+#define GUARD_M4A_INTERNAL_H
+
+#include "global.h"
+
+typedef struct MusicPlayerTrack MusicPlayerTrack;
+typedef struct MusicPlayerInfo MusicPlayerInfo;
+
+typedef struct WaveData {
+ u16 type;
+ u16 status;
+ u32 freq;
+ u32 loopStart;
+ u32 size; // number of samples
+ s8 data[1]; // samples
+} WaveData;
+
+#define TONEDATA_TYPE_CGB 0x07
+#define TONEDATA_TYPE_FIX 0x08
+#define TONEDATA_TYPE_SPL 0x40 // key split
+#define TONEDATA_TYPE_RHY 0x80 // rhythm
+
+#define TONEDATA_P_S_PAN 0xc0
+#define TONEDATA_P_S_PAM TONEDATA_P_S_PAN
+
+typedef struct ToneData {
+ u8 type;
+ u8 key;
+ u8 length; // sound length (compatible sound)
+ u8 pan_sweep; // pan or sweep (compatible sound ch. 1)
+ WaveData* wav;
+ u8 attack;
+ u8 decay;
+ u8 sustain;
+ u8 release;
+} ToneData;
+
+typedef struct SongHeader {
+ u8 trackCount;
+ u8 blockCount;
+ u8 priority;
+ u8 reverb;
+ ToneData* tone;
+ u8* part[1];
+} SongHeader;
+
+typedef struct Song {
+ const SongHeader* header;
+ 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* tracks;
+ u8 nTracks;
+ u16 unk_A;
+} MusicPlayer;
+
+extern const MusicPlayer gMusicPlayers[];
+extern const Song gSongTable[];
+
+void m4aSoundInit(void);
+void m4aSongNumStart(u16 n);
+void m4aSongNumStartOrContinue(u16 n);
+void m4aSongNumStop(u16 n);
+void m4aMPlayAllStop(void);
+void m4aMPlayImmInit(MusicPlayerInfo* mplayInfo);
+void m4aMPlayTempoControl(MusicPlayerInfo* mplayInfo, u16 tempo);
+void m4aMPlayVolumeControl(MusicPlayerInfo* mplayInfo, u16 trackBits, u16 volume);
+void m4aSoundVSyncOn(void);
+void m4aSoundVSyncOff(void);
+
+#endif // GUARD_M4A_INTERNAL_H
diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h
deleted file mode 100644
index 05a47859..00000000
--- a/include/gba/m4a_internal.h
+++ /dev/null
@@ -1,397 +0,0 @@
-#ifndef GUARD_M4A_INTERNAL_H
-#define GUARD_M4A_INTERNAL_H
-
-#include "gba/gba.h"
-
-// ASCII encoding of 'Smsh' in reverse
-// This is presumably short for SMASH, the developer of MKS4AGB.
-#define ID_NUMBER 0x68736D53
-
-#define C_V 0x40 // center value for PAN, BEND, and TUNE
-
-#define SOUND_MODE_REVERB_VAL 0x0000007F
-#define SOUND_MODE_REVERB_SET 0x00000080
-#define SOUND_MODE_MAXCHN 0x00000F00
-#define SOUND_MODE_MAXCHN_SHIFT 8
-#define SOUND_MODE_MASVOL 0x0000F000
-#define SOUND_MODE_MASVOL_SHIFT 12
-#define SOUND_MODE_FREQ_05734 0x00010000
-#define SOUND_MODE_FREQ_07884 0x00020000
-#define SOUND_MODE_FREQ_10512 0x00030000
-#define SOUND_MODE_FREQ_13379 0x00040000
-#define SOUND_MODE_FREQ_15768 0x00050000
-#define SOUND_MODE_FREQ_18157 0x00060000
-#define SOUND_MODE_FREQ_21024 0x00070000
-#define SOUND_MODE_FREQ_26758 0x00080000
-#define SOUND_MODE_FREQ_31536 0x00090000
-#define SOUND_MODE_FREQ_36314 0x000A0000
-#define SOUND_MODE_FREQ_40137 0x000B0000
-#define SOUND_MODE_FREQ_42048 0x000C0000
-#define SOUND_MODE_FREQ 0x000F0000
-#define SOUND_MODE_FREQ_SHIFT 16
-#define SOUND_MODE_DA_BIT_9 0x00800000
-#define SOUND_MODE_DA_BIT_8 0x00900000
-#define SOUND_MODE_DA_BIT_7 0x00A00000
-#define SOUND_MODE_DA_BIT_6 0x00B00000
-#define SOUND_MODE_DA_BIT 0x00B00000
-#define SOUND_MODE_DA_BIT_SHIFT 20
-
-struct WaveData {
- u16 type;
- u16 status;
- u32 freq;
- u32 loopStart;
- u32 size; // number of samples
- s8 data[1]; // samples
-};
-
-#define TONEDATA_TYPE_CGB 0x07
-#define TONEDATA_TYPE_FIX 0x08
-#define TONEDATA_TYPE_SPL 0x40 // key split
-#define TONEDATA_TYPE_RHY 0x80 // rhythm
-
-#define TONEDATA_P_S_PAN 0xc0
-#define TONEDATA_P_S_PAM TONEDATA_P_S_PAN
-
-struct ToneData {
- u8 type;
- u8 key;
- u8 length; // sound length (compatible sound)
- u8 pan_sweep; // pan or sweep (compatible sound ch. 1)
- struct WaveData* wav;
- u8 attack;
- u8 decay;
- u8 sustain;
- u8 release;
-};
-
-struct CgbChannel {
- u8 sf;
- u8 ty;
- u8 rightVolume;
- u8 leftVolume;
- u8 at;
- u8 de;
- u8 su;
- u8 re;
- u8 ky;
- u8 ev;
- u8 eg;
- u8 ec;
- u8 echoVolume;
- u8 echoLength;
- u8 d1;
- u8 d2;
- u8 gt;
- u8 mk;
- u8 ve;
- u8 pr;
- u8 rp;
- u8 d3[3];
- u8 d5;
- u8 sg;
- u8 n4;
- u8 pan;
- u8 panMask;
- u8 mo;
- u8 le;
- u8 sw;
- u32 fr;
- u32* wp;
- u32 cp;
- u32 tp;
- u32 pp;
- u32 np;
- u8 d4[8];
-};
-
-struct MusicPlayerTrack;
-
-struct SoundChannel {
- u8 status;
- u8 type;
- u8 rightVolume;
- u8 leftVolume;
- u8 attack;
- u8 decay;
- u8 sustain;
- u8 release;
- u8 ky;
- u8 ev;
- u8 er;
- u8 el;
- u8 echoVolume;
- u8 echoLength;
- u8 d1;
- u8 d2;
- u8 gt;
- u8 mk;
- u8 ve;
- u8 pr;
- u8 rp;
- u8 d3[3];
- u32 ct;
- u32 fw;
- u32 freq;
- struct WaveData* wav;
- u32 cp;
- struct MusicPlayerTrack* track;
- u32 pp;
- u32 np;
- u32 d4;
- u16 xpi;
- u16 xpc;
-};
-
-#define MAX_DIRECTSOUND_CHANNELS 12
-
-#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer
-
-struct SoundInfo {
- // This field is normally equal to ID_NUMBER but it is set to other
- // values during sensitive operations for locking purposes.
- // This field should be volatile but isn't. This could potentially cause
- // race conditions.
- u32 ident;
-
- vu8 pcmDmaCounter;
-
- // Direct Sound
- u8 reverb;
- u8 maxChans;
- u8 masterVolume;
- u8 freq;
-
- u8 mode;
- u8 c15;
- u8 pcmDmaPeriod; // number of V-blanks per PCM DMA
- u8 maxLines;
- u8 gap[3];
- s32 pcmSamplesPerVBlank;
- s32 pcmFreq;
- s32 divFreq;
- struct CgbChannel* cgbChans;
- u32 func;
- u32 intp;
- void (*CgbSound)(void);
- void (*CgbOscOff)(u8);
- u32 (*MidiKeyToCgbFreq)(u8, u8, u8);
- u32 MPlayJumpTable;
- void* plynote;
- void (*ExtVolPit)(void);
- u8 gap2[16];
- struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS];
- s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2];
-};
-
-struct SongHeader {
- u8 trackCount;
- u8 blockCount;
- u8 priority;
- u8 reverb;
- struct ToneData* tone;
- u8* part[1];
-};
-
-#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
-
-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;
- struct SoundChannel* chan;
- struct ToneData tone;
- u8 gap[10];
- u16 unk_3A;
- u32 unk_3C;
- u8* cmdPtr;
- u8* patternStack[3];
-};
-
-#define MUSICPLAYER_STATUS_TRACK 0x0000ffff
-#define MUSICPLAYER_STATUS_PAUSE 0x80000000
-
-#define MAX_MUSICPLAYER_TRACKS 16
-
-#define TEMPORARY_FADE 0x0001
-#define FADE_IN 0x0002
-#define FADE_VOL_MAX 64
-#define FADE_VOL_SHIFT 2
-
-struct MusicPlayerInfo {
- struct 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;
- struct MusicPlayerTrack* tracks;
- struct ToneData* tone;
- u32 ident;
- u32 func;
- u32 intp;
-};
-
-struct MusicPlayer {
- struct MusicPlayerInfo* info;
- struct MusicPlayerTrack* track;
- u8 unk_8;
- u16 unk_A;
-};
-
-struct Song {
- struct SongHeader* header;
- u16 ms;
- u16 me;
-};
-
-extern const struct MusicPlayer gMPlayTable[];
-extern const struct Song gSongTable[];
-
-extern u8 gMPlayMemAccArea[];
-
-#define MAX_POKEMON_CRIES 2
-
-extern char SoundMainRAM[];
-
-extern void* gMPlayJumpTable[];
-
-typedef void (*XcmdFunc)(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-extern const XcmdFunc gXcmdTable[];
-
-extern struct CgbChannel gCgbChans[];
-extern const u8 gCgb3Vol[];
-
-extern const u8 gScaleTable[];
-extern const u32 gFreqTable[];
-extern const u16 gPcmSamplesPerVBlankTable[];
-
-extern const u8 gCgbScaleTable[];
-extern const s16 gCgbFreqTable[];
-extern const u8 gNoiseTable[];
-
-extern char gNumMusicPlayers[];
-extern char gMaxLines[];
-
-#define NUM_MUSIC_PLAYERS ((u16)gNumMusicPlayers)
-#define MAX_LINES ((u32)gMaxLines)
-
-u32 umul3232H32(u32 multiplier, u32 multiplicand);
-void SoundMain(void);
-void SoundMainBTM(void);
-void TrackStop(struct MusicPlayerInfo* mplayInfo, struct MusicPlayerTrack* track);
-void MPlayMain(void);
-void RealClearChain(void* x);
-
-void MPlayContinue(struct MusicPlayerInfo* mplayInfo);
-void MPlayStart(struct MusicPlayerInfo* mplayInfo, struct SongHeader* songHeader);
-void MPlayStop(struct MusicPlayerInfo* mplayInfo);
-void FadeOutBody(struct MusicPlayerInfo* mplayInfo);
-void TrkVolPitSet(struct MusicPlayerInfo* mplayInfo, struct MusicPlayerTrack* track);
-void MPlayFadeOut(struct MusicPlayerInfo* mplayInfo, u16 speed);
-void ClearChain(void* x);
-void Clear64byte(void* addr);
-void SoundInit(struct SoundInfo* soundInfo);
-void MPlayExtender(struct CgbChannel* cgbChans);
-void m4aSoundMode(u32 mode);
-void MPlayOpen(struct MusicPlayerInfo* mplayInfo, struct MusicPlayerTrack* track, u8 a3);
-void CgbSound(void);
-void CgbOscOff(u8);
-u32 MidiKeyToCgbFreq(u8, u8, u8);
-void nullsub_141(void);
-void MPlayJumpTableCopy(void** mplayJumpTable);
-void SampleFreqSet(u32 freq);
-void m4aSoundVSyncOn(void);
-void m4aSoundVSyncOff(void);
-
-void m4aMPlayTempoControl(struct MusicPlayerInfo* mplayInfo, u16 tempo);
-void m4aMPlayVolumeControl(struct MusicPlayerInfo* mplayInfo, u16 trackBits, u16 volume);
-void m4aMPlayPitchControl(struct MusicPlayerInfo* mplayInfo, u16 trackBits, s16 pitch);
-void m4aMPlayPanpotControl(struct MusicPlayerInfo* mplayInfo, u16 trackBits, s8 pan);
-void ClearModM(struct MusicPlayerTrack* track);
-void m4aMPlayModDepthSet(struct MusicPlayerInfo* mplayInfo, u16 trackBits, u8 modDepth);
-void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo* mplayInfo, u16 trackBits, u8 lfoSpeed);
-
-// sound command handler functions
-void ply_fine(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_goto(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_patt(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_pend(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_rept(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_memacc(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_prio(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_tempo(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_keysh(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_voice(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_vol(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_pan(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_bend(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_bendr(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_lfos(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_lfodl(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_mod(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_modt(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_tune(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_port(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_xcmd(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_endtie(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_note(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-
-// extended sound command handler functions
-void ply_xxx(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_xwave(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_xtype(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_xatta(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_xdeca(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_xsust(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_xrele(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_xiecv(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_xiecl(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_xleng(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-void ply_xswee(struct MusicPlayerInfo*, struct MusicPlayerTrack*);
-
-#endif // GUARD_M4A_INTERNAL_H
diff --git a/include/main.h b/include/main.h
index 1653a40e..3e8c63eb 100644
--- a/include/main.h
+++ b/include/main.h
@@ -79,7 +79,6 @@ extern UI gUnk_02032EC0;
void InitScreen(u32 screen);
-extern void InitSound(void);
extern void sub_08056208(void);
extern void sub_0804FFE4(void);
extern void sub_080ADD30(void);
@@ -89,7 +88,6 @@ extern void sub_08056260(void);
extern void VBlankIntrWait();
extern void MessageUpdate(void);
extern void sub_08050154(void);
-extern void sub_080A3480(void);
extern u8 gUnk_03003DE4;