summaryrefslogtreecommitdiff
path: root/src/audio/lib
diff options
context:
space:
mode:
authorcadmic <cadmic24@gmail.com>2024-09-03 17:32:38 -0700
committerGitHub <noreply@github.com>2024-09-03 20:32:38 -0400
commite44c7c656c8d3ff730503f09f6000f1526b28bd0 (patch)
tree217eaa904533953356555fc849e316e9538f166b /src/audio/lib
parent3e200769f125e2886829dd29a8d786db2406067e (diff)
[ntsc-1.2] Match audio (#2122)
* general.c mostly ok * match remaining audio funcs * comments * Finish matching audio --------- Co-authored-by: engineer124 <engineer124engineer124@gmail.com>
Diffstat (limited to 'src/audio/lib')
-rw-r--r--src/audio/lib/seqplayer.c13
-rw-r--r--src/audio/lib/synthesis.c15
-rw-r--r--src/audio/lib/thread.c7
3 files changed, 34 insertions, 1 deletions
diff --git a/src/audio/lib/seqplayer.c b/src/audio/lib/seqplayer.c
index 11866bf61..63aedeb56 100644
--- a/src/audio/lib/seqplayer.c
+++ b/src/audio/lib/seqplayer.c
@@ -435,6 +435,14 @@ void AudioSeq_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer) {
}
void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
+ s32 finished = 0;
+
+#if PLATFORM_N64
+ if (seqPlayer->finished == 1) {
+ finished = 1;
+ }
+#endif
+
AudioSeq_SequencePlayerDisableChannels(seqPlayer, 0xFFFF);
Audio_NotePoolClear(&seqPlayer->notePool);
if (!seqPlayer->enabled) {
@@ -449,6 +457,11 @@ void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
}
if (AudioLoad_IsFontLoadComplete(seqPlayer->defaultFont)) {
+#if PLATFORM_N64
+ if (finished == 1) {
+ AudioHeap_ReleaseNotesForFont(seqPlayer->defaultFont);
+ }
+#endif
AudioLoad_SetFontLoadStatus(seqPlayer->defaultFont, LOAD_STATUS_MAYBE_DISCARDABLE);
}
diff --git a/src/audio/lib/synthesis.c b/src/audio/lib/synthesis.c
index 2a84f0cde..d2214d99a 100644
--- a/src/audio/lib/synthesis.c
+++ b/src/audio/lib/synthesis.c
@@ -643,7 +643,13 @@ Acmd* AudioSynth_DoOneAudioUpdate(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updat
aMix(cmd++, DMEM_2CH_SIZE >> 4, reverb->decayRatio + 0x8000, DMEM_WET_LEFT_CH, DMEM_WET_LEFT_CH);
// Leak reverb between the left and right channels
- if (reverb->leakRtl != 0 || reverb->leakLtr != 0) {
+
+#if PLATFORM_N64
+ if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioCtx.soundMode != SOUNDMODE_MONO))
+#else
+ if ((reverb->leakRtl != 0) || (reverb->leakLtr != 0))
+#endif
+ {
cmd = AudioSynth_LeakReverb(cmd, reverb);
}
@@ -778,6 +784,13 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSubEu, NoteSynthesisS
nParts = noteSubEu->bitField1.hasTwoParts + 1;
samplesLenFixedPoint = (resamplingRateFixedPoint * aiBufLen * 2) + synthState->samplePosFrac;
numSamplesToLoad = samplesLenFixedPoint >> 16;
+
+#if PLATFORM_N64
+ if (numSamplesToLoad == 0) {
+ skipBytes = false;
+ }
+#endif
+
synthState->samplePosFrac = samplesLenFixedPoint & 0xFFFF;
// Partially-optimized out no-op ifs required for matching. SM64 decomp
diff --git a/src/audio/lib/thread.c b/src/audio/lib/thread.c
index d1809c2d0..561e95e14 100644
--- a/src/audio/lib/thread.c
+++ b/src/audio/lib/thread.c
@@ -16,12 +16,19 @@ AudioTask* AudioThread_Update(void) {
return AudioThread_UpdateImpl();
}
+#if PLATFORM_N64
+static s32 sMaxAbiCmdCnt = 0x80;
+static AudioTask* sWaitingAudioTask = NULL;
+#endif
+
/**
* This is Audio_Update for the audio thread
*/
AudioTask* AudioThread_UpdateImpl(void) {
+#if !PLATFORM_N64
static s32 sMaxAbiCmdCnt = 0x80;
static AudioTask* sWaitingAudioTask = NULL;
+#endif
u32 samplesRemainingInAi;
s32 abiCmdCnt;
s32 pad;