mirror of
https://github.com/zeldaret/mm.git
synced 2026-07-10 05:57:00 -04:00
audio_seqplayer.c OK and partial docs (#833)
* Import audio_seqplayer progress from main audio branch * cleanup * Better docs * Small fix * More * Cleanup and update * PR Suggestions * PR Suggestions * mute flags
This commit is contained in:
+8
-34
@@ -3124,8 +3124,8 @@ void AudioLoad_AsyncLoadFont(s32 fontId, s32 arg1, s32 retData, OSMesgQueue* ret
|
||||
u8* AudioLoad_GetFontsForSequence(s32 seqId, u32* outNumFonts);
|
||||
void AudioLoad_DiscardSeqFonts(s32 seqId);
|
||||
void func_8018FA60(u32 tableType, u32 id, s32 arg2, s32 arg3);
|
||||
s32 AudioLoad_SyncIniPlayer(s32 playerIdx, s32 seqId, s32 arg2);
|
||||
s32 AudioLoad_SyncInitSetSeqqPlayerSkipTicks(s32 playerIdx, s32 seqId, s32 skipTicks);
|
||||
s32 AudioLoad_SyncInitSeqPlayer(s32 playerIndex, s32 seqId, s32 arg2);
|
||||
s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIndex, s32 seqId, s32 skipTicks);
|
||||
void AudioLoad_ProcessLoads(s32 resetStatus);
|
||||
void AudioLoad_SetDmaHandler(DmaHandler callback);
|
||||
void AudioLoad_Init(void* heap, u32 heapSize);
|
||||
@@ -3198,43 +3198,17 @@ void AudioEffects_SequencePlayerProcessSound(SequencePlayer* seqPlayer);
|
||||
void AudioEffects_NoteVibratoUpdate(Note* note);
|
||||
void AudioEffects_NoteVibratoInit(Note* note);
|
||||
void AudioEffects_NotePortamentoInit(Note* note);
|
||||
void AudioEffects_AdsrInit(AdsrState* adsr, AdsrEnvelope* envelope, s16* volOut);
|
||||
void AudioEffects_AdsrInit(AdsrState* adsr, EnvelopePoint* envelope, s16* volOut);
|
||||
f32 AudioEffects_AdsrUpdate(AdsrState* adsr);
|
||||
// void func_801974D0(void);
|
||||
// void func_80197538(void);
|
||||
// void func_80197714(void);
|
||||
// void func_80197880(void);
|
||||
// void func_801979D8(void);
|
||||
// void func_80197A54(void);
|
||||
void AudioSeq_SequenceChannelDisable(SequenceChannel* channel);
|
||||
// void func_80197B14(void);
|
||||
// void func_80197C0C(void);
|
||||
// void func_80197C8C(void);
|
||||
void AudioSeq_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer);
|
||||
void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer);
|
||||
void AudioSeq_AudioListPushBack(AudioListItem* list, AudioListItem* item);
|
||||
void* AudioSeq_AudioListPopBack(AudioListItem* list);
|
||||
// void func_80197E88(void);
|
||||
// void func_80197F28(void);
|
||||
// void func_80197F3C(void);
|
||||
// void func_80197F74(void);
|
||||
// void func_80197FB4(void);
|
||||
// void func_801980D0(void);
|
||||
// void func_8019815C(void);
|
||||
// void func_8019825C(void);
|
||||
// void func_80198640(void);
|
||||
// void func_80198CE0(void);
|
||||
// void func_801990F4(void);
|
||||
// void func_80199124(void);
|
||||
// void func_80199198(void);
|
||||
// void func_80199244(void);
|
||||
void func_80199268(s32* param_1);
|
||||
// void func_8019A0BC(void);
|
||||
// void func_8019AA3C(void);
|
||||
// void func_8019AAF0(void);
|
||||
void AudioSeq_ProcessSequences(s32 arg0);
|
||||
void AudioSeq_SkipForwardSequence(SequencePlayer* seqPlayer);
|
||||
void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer);
|
||||
void AudioSeq_InitSequencePlayerChannels(s32 playerIdx);
|
||||
// void func_8019ACEC(void);
|
||||
void AudioSeq_InitSequencePlayerChannels(s32 playerIndex);
|
||||
void AudioSeq_InitSequencePlayers(void);
|
||||
void func_8019AE40(s32 param_1, s32 param_2, u32 param_3, s32 param_4);
|
||||
void func_8019AEC0(UNK_PTR param_1, UNK_PTR param_2);
|
||||
@@ -3356,7 +3330,7 @@ void func_801A1DB8(Vec3f* vec, u8 seqId, f32 arg2);
|
||||
// void func_801A1E0C(void);
|
||||
void func_801A1F00(u8 arg0, u16 seqId);
|
||||
void func_801A1F88(void);
|
||||
void func_801A1FB4(u8 playerIdx, Vec3f* pos, u16 seqId, f32 maxDist);
|
||||
void func_801A1FB4(u8 playerIndex, Vec3f* pos, u16 seqId, f32 maxDist);
|
||||
// void func_801A2090(void);
|
||||
void func_801A246C(u8 param_1, u8 param_2);
|
||||
// void func_801A2544(void);
|
||||
@@ -3474,7 +3448,7 @@ void Audio_QueueSeqCmd(u32 cmd);
|
||||
// void func_801A89D0(void);
|
||||
s32 func_801A8A50(s32 param1);
|
||||
// void func_801A8ABC(void);
|
||||
void Audio_SetVolumeScale(u8 playerIdx, u8 scaleIdx, u8 targetVol, u8 volFadeTimer);
|
||||
void Audio_SetVolumeScale(u8 playerIndex, u8 scaleIndex, u8 targetVol, u8 volFadeTimer);
|
||||
// void func_801A8D5C(void);
|
||||
// void func_801A8E90(void);
|
||||
// void func_801A9768(void);
|
||||
|
||||
+5
-9
@@ -1554,16 +1554,12 @@ extern s16 gHighPassFilterData[];
|
||||
extern s16 gBandStopFilterData[];
|
||||
extern s16 gBandPassFilterData[];
|
||||
extern s16* gWaveSamples[9];
|
||||
extern UNK_PTR D_801D4D98;
|
||||
extern UNK_PTR D_801D4DB0;
|
||||
extern f32 gBendPitchOneOctaveFrequencies[256];
|
||||
// extern UNK_TYPE1 D_801D4FB4;
|
||||
// extern UNK_TYPE4 gBendPitchTwoSemitonesFrequencies;
|
||||
// extern UNK_TYPE4 D_801D53B4;
|
||||
// extern UNK_TYPE1 gPitchFrequencies;
|
||||
// extern UNK_TYPE1 gDefaultShortNoteVelocityTable;
|
||||
// extern UNK_TYPE1 gDefaultShortNoteGateTimeTable;
|
||||
// extern UNK_TYPE1 gDefaultEnvelope;
|
||||
extern f32 gBendPitchTwoSemitonesFrequencies[];
|
||||
extern f32 gPitchFrequencies[];
|
||||
extern u8 gDefaultShortNoteVelocityTable[];
|
||||
extern u8 gDefaultShortNoteGateTimeTable[];
|
||||
extern EnvelopePoint gDefaultEnvelope[];
|
||||
extern NoteSubEu gZeroNoteSub;
|
||||
extern NoteSubEu gDefaultNoteSub;
|
||||
extern u16 gHeadsetPanQuantization[];
|
||||
|
||||
+39
-32
@@ -8,9 +8,16 @@
|
||||
#define TATUMS_PER_BEAT 48
|
||||
|
||||
#define IS_SEQUENCE_CHANNEL_VALID(ptr) ((uintptr_t)(ptr) != (uintptr_t)&gAudioContext.sequenceChannelNone)
|
||||
#define SEQ_NUM_CHANNELS 16
|
||||
|
||||
#define MAX_CHANNELS_PER_BANK 3
|
||||
|
||||
#define MUTE_FLAGS_3 (1 << 3) // prevent further noteSubEus from playing
|
||||
#define MUTE_FLAGS_4 (1 << 4) // stop something in seqLayer scripts
|
||||
#define MUTE_FLAGS_SOFTEN (1 << 5) // lower volume, by default to half
|
||||
#define MUTE_FLAGS_STOP_NOTES (1 << 6) // prevent further notes from playing
|
||||
#define MUTE_FLAGS_STOP_SCRIPT (1 << 7) // stop processing sequence/channel scripts
|
||||
|
||||
#define AUDIO_LERPIMP(v0, v1, t) (v0 + ((v1 - v0) * t))
|
||||
|
||||
#define ADSR_DISABLE 0
|
||||
@@ -86,12 +93,12 @@ typedef enum {
|
||||
} AudioCacheType;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ LOAD_STATUS_0,
|
||||
/* 1 */ LOAD_STATUS_1,
|
||||
/* 2 */ LOAD_STATUS_2, // Samples/Seqplayer
|
||||
/* 3 */ LOAD_STATUS_3, // Sequences
|
||||
/* 4 */ LOAD_STATUS_4, // SoundFonts
|
||||
/* 5 */ LOAD_STATUS_5 // Permanent
|
||||
/* 0 */ LOAD_STATUS_NOT_LOADED,
|
||||
/* 1 */ LOAD_STATUS_IN_PROGRESS,
|
||||
/* 2 */ LOAD_STATUS_COMPLETE,
|
||||
/* 3 */ LOAD_STATUS_DISCARDABLE,
|
||||
/* 4 */ LOAD_STATUS_MAYBE_DISCARDABLE,
|
||||
/* 5 */ LOAD_STATUS_PERMANENT
|
||||
} AudioLoadStatus;
|
||||
|
||||
typedef s32 (*DmaHandler)(OSPiHandle* handle, OSIoMesg* mb, s32 direction);
|
||||
@@ -139,7 +146,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
/* 0x0 */ s16 delay;
|
||||
/* 0x2 */ s16 arg;
|
||||
} AdsrEnvelope; // size = 0x4
|
||||
} EnvelopePoint; // size = 0x4
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u32 start;
|
||||
@@ -231,19 +238,19 @@ typedef struct {
|
||||
/* 0x00 */ u8 loaded;
|
||||
/* 0x01 */ u8 normalRangeLo;
|
||||
/* 0x02 */ u8 normalRangeHi;
|
||||
/* 0x03 */ u8 releaseRate;
|
||||
/* 0x04 */ AdsrEnvelope* envelope;
|
||||
/* 0x03 */ u8 adsrDecayIndex; // index used to obtain adsr decay rate from adsrDecayTable
|
||||
/* 0x04 */ EnvelopePoint* envelope;
|
||||
/* 0x08 */ SoundFontSound lowNotesSound;
|
||||
/* 0x10 */ SoundFontSound normalNotesSound;
|
||||
/* 0x18 */ SoundFontSound highNotesSound;
|
||||
} Instrument; // size = 0x20
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 releaseRate;
|
||||
/* 0x00 */ u8 adsrDecayIndex; // index used to obtain adsr decay rate from adsrDecayTable
|
||||
/* 0x01 */ u8 pan;
|
||||
/* 0x02 */ u8 loaded;
|
||||
/* 0x04 */ SoundFontSound sound;
|
||||
/* 0x14 */ AdsrEnvelope* envelope;
|
||||
/* 0x14 */ EnvelopePoint* envelope;
|
||||
} Drum; // size = 0x18
|
||||
|
||||
typedef struct {
|
||||
@@ -277,11 +284,11 @@ typedef struct {
|
||||
/* 0x000 */ u8 applyBend : 1;
|
||||
/* 0x001 */ u8 state;
|
||||
/* 0x002 */ u8 noteAllocPolicy;
|
||||
/* 0x003 */ u8 muteBehavior;
|
||||
/* 0x003 */ u8 muteFlags;
|
||||
/* 0x004 */ u8 seqId;
|
||||
/* 0x005 */ u8 defaultFont;
|
||||
/* 0x006 */ u8 unk_06[1];
|
||||
/* 0x007 */ s8 playerIdx;
|
||||
/* 0x007 */ s8 playerIndex;
|
||||
/* 0x008 */ u16 tempo; // tatums per minute
|
||||
/* 0x00A */ u16 tempoAcc;
|
||||
/* 0x00C */ s16 unk_0C;
|
||||
@@ -289,7 +296,7 @@ typedef struct {
|
||||
/* 0x010 */ u16 delay;
|
||||
/* 0x012 */ u16 fadeTimer;
|
||||
/* 0x014 */ u16 fadeTimerUnkEu;
|
||||
/* 0x016 */ u16 unk_16; // New to MM
|
||||
/* 0x016 */ u16 unk_16;
|
||||
union {
|
||||
/* 0x018 */ u8* seqData;
|
||||
/* 0x018 */ u16* seqData16;
|
||||
@@ -313,9 +320,9 @@ typedef struct {
|
||||
} SequencePlayer; // size = 0x160
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ u8 releaseRate;
|
||||
/* 0x0 */ u8 decayIndex; // index used to obtain adsr decay rate from adsrDecayTable
|
||||
/* 0x1 */ u8 sustain;
|
||||
/* 0x4 */ AdsrEnvelope* envelope;
|
||||
/* 0x4 */ EnvelopePoint* envelope;
|
||||
} AdsrSettings; // size = 0x8
|
||||
|
||||
typedef struct {
|
||||
@@ -337,7 +344,7 @@ typedef struct {
|
||||
/* 0x10 */ f32 current;
|
||||
/* 0x14 */ f32 target;
|
||||
/* 0x18 */ char unk_18[4];
|
||||
/* 0x1C */ AdsrEnvelope* envelope;
|
||||
/* 0x1C */ EnvelopePoint* envelope;
|
||||
} AdsrState; // size = 0x20
|
||||
|
||||
typedef struct {
|
||||
@@ -356,7 +363,7 @@ typedef union {
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 reverb;
|
||||
/* 0x01 */ u8 unk_1;
|
||||
/* 0x01 */ u8 gain; // Increases volume by a multiplicative scaling factor. Represented as a UQ4.4 number
|
||||
/* 0x02 */ u8 pan;
|
||||
/* 0x03 */ u8 unk_3; // Possibly part of stereo?
|
||||
/* 0x04 */ Stereo stereo;
|
||||
@@ -397,7 +404,7 @@ typedef struct SequenceChannel {
|
||||
/* 0x01 */ u8 asByte;
|
||||
} changes;
|
||||
/* 0x02 */ u8 noteAllocPolicy;
|
||||
/* 0x03 */ u8 muteBehavior;
|
||||
/* 0x03 */ u8 muteFlags;
|
||||
/* 0x04 */ u8 reverb; // or dry/wet mix
|
||||
/* 0x05 */ u8 notePriority; // 0-3
|
||||
/* 0x06 */ u8 someOtherPriority;
|
||||
@@ -406,12 +413,12 @@ typedef struct SequenceChannel {
|
||||
/* 0x09 */ u8 bookOffset;
|
||||
/* 0x0A */ u8 newPan;
|
||||
/* 0x0B */ u8 panChannelWeight; // proportion of pan that comes from the channel (0..128)
|
||||
/* 0x0C */ u8 unk_0C;
|
||||
/* 0x0C */ u8 gain; // Increases volume by a multiplicative scaling factor. Represented as a UQ4.4 number
|
||||
/* 0x0D */ u8 velocityRandomVariance;
|
||||
/* 0x0E */ u8 gateTimeRandomVariance;
|
||||
/* 0x0F */ u8 unk_0F;
|
||||
/* 0x10 */ u8 unk_10; // New to MM
|
||||
/* 0x11 */ u8 unk_11; // New to MM
|
||||
/* 0x10 */ u8 unk_10;
|
||||
/* 0x11 */ u8 unk_11;
|
||||
/* 0x12 */ VibratoSubStruct vibrato;
|
||||
/* 0x20 */ u16 delay;
|
||||
/* 0x22 */ u16 unk_20;
|
||||
@@ -434,11 +441,11 @@ typedef struct SequenceChannel {
|
||||
/* 0x80 */ AdsrSettings adsr;
|
||||
/* 0x88 */ NotePool notePool;
|
||||
/* 0xC8 */ s8 soundScriptIO[8]; // bridge between sound script and audio lib, "io ports"
|
||||
/* 0xD0 */ u8* unk_D0; // New to MM
|
||||
/* 0xD0 */ u8* sfxState;
|
||||
/* 0xD4 */ s16* filter;
|
||||
/* 0xD8 */ Stereo stereo;
|
||||
/* 0xDC */ s32 unk_DC; // New to MM
|
||||
/* 0xE0 */ s32 unk_E0; // New to MM
|
||||
/* 0xDC */ s32 unk_DC;
|
||||
/* 0xE0 */ s32 unk_E0;
|
||||
} SequenceChannel; // size = 0xE4
|
||||
|
||||
// Might also be known as a Track, according to sm64 debug strings (?).
|
||||
@@ -531,7 +538,7 @@ typedef struct {
|
||||
/* 0x04 */ u8 reverbVol;
|
||||
/* 0x05 */ u8 numParts;
|
||||
/* 0x06 */ u16 samplePosFrac;
|
||||
/* 0x08 */ u16 unk_08; // New to MM
|
||||
/* 0x08 */ u16 unk_08;
|
||||
/* 0x0C */ s32 samplePosInt;
|
||||
/* 0x10 */ NoteSynthesisBuffers* synthesisBuffers;
|
||||
/* 0x14 */ s16 curVolLeft;
|
||||
@@ -596,7 +603,7 @@ typedef struct {
|
||||
/* 0x01 */ u8 hasTwoParts : 1;
|
||||
/* 0x01 */ u8 usesHeadsetPanEffects2 : 1;
|
||||
} bitField1;
|
||||
/* 0x02 */ u8 unk_2;
|
||||
/* 0x02 */ u8 gain; // Increases volume by a multiplicative scaling factor. Represented as a UQ4.4 number
|
||||
/* 0x03 */ u8 headsetPanRight;
|
||||
/* 0x04 */ u8 headsetPanLeft;
|
||||
/* 0x05 */ u8 reverbVol;
|
||||
@@ -611,8 +618,8 @@ typedef struct {
|
||||
/* 0x10 */ s16* samples; // used for synthetic waves
|
||||
} sound;
|
||||
/* 0x14 */ s16* filter;
|
||||
/* 0x18 */ u8 unk_18; // New to MM
|
||||
/* 0x19 */ u8 unk_19; // New to MM
|
||||
/* 0x18 */ u8 unk_18;
|
||||
/* 0x19 */ u8 unk_19;
|
||||
/* 0x1A */ UNK_TYPE1 pad_1A[0x6];
|
||||
} NoteSubEu; // size = 0x20
|
||||
|
||||
@@ -965,7 +972,7 @@ typedef struct {
|
||||
/* 0x4448 */ volatile u8 resetStatus;
|
||||
/* 0x4449 */ u8 audioResetSpecIdToLoad;
|
||||
/* 0x444C */ s32 audioResetFadeOutFramesLeft;
|
||||
/* 0x4450 */ f32* unk_3520; // fadeOutVelocities for ADSR
|
||||
/* 0x4450 */ f32* adsrDecayTable; // A table on the audio heap that stores decay rates used for ADSR
|
||||
/* 0x4454 */ u8* audioHeap;
|
||||
/* 0x4458 */ size_t audioHeapSize;
|
||||
/* 0x445C */ Note* notes;
|
||||
@@ -994,7 +1001,7 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 reverbVol;
|
||||
/* 0x01 */ u8 unk_1;
|
||||
/* 0x01 */ u8 gain; // Increases volume by a multiplicative scaling factor. Represented as a UQ4.4 number
|
||||
/* 0x02 */ u8 pan;
|
||||
/* 0x03 */ u8 unk_3;
|
||||
/* 0x04 */ Stereo stereo;
|
||||
@@ -1050,7 +1057,7 @@ typedef struct {
|
||||
/* 0x218 */ u8 unk_4C;
|
||||
/* 0x219 */ u8 unk_4D;
|
||||
/* 0x21A */ u8 unk_4E;
|
||||
/* 0x21B */ u8 unk_21B; // New to MM
|
||||
/* 0x21B */ u8 unk_21B;
|
||||
} unk_D_8016E750; // size = 0x21C
|
||||
|
||||
typedef struct {
|
||||
|
||||
Reference in New Issue
Block a user