diff options
| author | notyourav <65437533+notyourav@users.noreply.github.com> | 2021-04-03 19:17:01 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-03 19:17:01 -0700 |
| commit | 010c0456eb207267d75c91cf68ff2b2356debcc0 (patch) | |
| tree | cab487b0a7e3dc34f0a5337be5175d62ed83db40 /include | |
| parent | 9f6afe9bfbeac18ed36ee9c0507b539c480d163b (diff) | |
| parent | cb03157e6553fde6787ee9837d3c70bc500696d3 (diff) | |
Merge pull request #145 from Henny022p/m4a
Sound
Diffstat (limited to 'include')
| -rw-r--r-- | include/audio.h | 429 | ||||
| -rw-r--r-- | include/functions.h | 3 | ||||
| -rw-r--r-- | include/gba/m4a.h | 187 | ||||
| -rw-r--r-- | include/gba/m4a_internal.h | 397 | ||||
| -rw-r--r-- | include/main.h | 2 |
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; |
