From 038d7245b731640b4e75803118c80e421139f189 Mon Sep 17 00:00:00 2001 From: Cuyler36 Date: Sat, 21 Jun 2025 09:52:38 -0400 Subject: [PATCH] jaudio_NES: link noteon --- configure.py | 2 +- src/static/jaudio_NES/internal/noteon.c | 67 +++++++++++++------------ 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/configure.py b/configure.py index 9114b028..0ea79f63 100644 --- a/configure.py +++ b/configure.py @@ -783,7 +783,7 @@ config.libs = [ Object(NonMatching, "jaudio_NES/internal/jamosc.c"), Object(NonMatching, "jaudio_NES/internal/memory.c"), Object(Matching, "jaudio_NES/internal/midplay.c"), - Object(NonMatching, "jaudio_NES/internal/noteon.c"), + Object(Matching, "jaudio_NES/internal/noteon.c"), Object(NonMatching, "jaudio_NES/internal/oneshot.c"), Object(NonMatching, "jaudio_NES/internal/rate.c"), Object(NonMatching, "jaudio_NES/internal/rspsim.c"), diff --git a/src/static/jaudio_NES/internal/noteon.c b/src/static/jaudio_NES/internal/noteon.c index 235be219..dc9b3bd9 100644 --- a/src/static/jaudio_NES/internal/noteon.c +++ b/src/static/jaudio_NES/internal/noteon.c @@ -16,16 +16,18 @@ s32 NoteON(seqp_* track, s32 channel, s32 flag1, s32 flag2, s32 playFlag) if (track->isMuted && (track->pauseStatus & 0x40)) { return -1; } - + if (track->channels[channel]) { NoteOFF(track, channel); } - seqp_* parent = track->parent; - jcs_* jcs = &track->parentController; + jc_* sound; u32 reg; - - seqp_* temp = parent; + seqp_* temp; + seqp_* parent = track->parent; + jcs_* jcs = &track->parentController; + + temp = parent; while (jcs->chanCount == 0 || jcs->freeChannels == 0) { if (temp == NULL) { jcs = &track->parentController; @@ -36,7 +38,7 @@ s32 NoteON(seqp_* track, s32 channel, s32 flag1, s32 flag2, s32 playFlag) } if (track->flags == 4) { - if (parent == NULL) { + if (track->parent == NULL) { return -1; } @@ -63,15 +65,18 @@ s32 NoteON(seqp_* track, s32 channel, s32 flag1, s32 flag2, s32 playFlag) reg = Jam_ReadRegDirect(track, 6); u16 phys = Jac_BnkVirtualToPhysical(reg >> 8); + u32 r = reg & 0xFF; u32 b = (phys & 0xff) << 8 | reg & 0xff; u32 a = b << 16 | flag1 << 8 | flag2; - jc_* sound; SOUNDID_ id; + u32 flag; + u32 i; + id.value = a; - if ((u8)reg >= 0xf0) { + if (r >= 0xf0) { sound = Play_1shot_Osc(jcs, id, playFlag); - } else if ((u8)reg >= 0xe4) { + } else if (r >= 0xe4) { sound = Play_1shot_Perc(jcs, id, playFlag); } else { sound = Play_1shot(jcs, id, playFlag); @@ -84,27 +89,26 @@ s32 NoteON(seqp_* track, s32 channel, s32 flag1, s32 flag2, s32 playFlag) UpdatePanPower_1Shot(sound, track->regParam.param.arguments[0], track->regParam.param.arguments[1], track->regParam.param.arguments[2], track->regParam.param.arguments[3]); - for (u32 i = 0; i < 2; i++) { - u32 flag = track->oscillatorRouting[i]; - if (flag == 15 || flag == 14) { - continue; - } + for (i = 0; i < 2; i++) { + flag = track->oscillatorRouting[i]; + + if (flag != 15 && flag != 14) { + if (flag >= 8) { + flag -= 8; + if (sound->mOscillators[flag]) { + track->oscillators[i] = *sound->mOscillators[flag]; + } + } else if (flag >= 4) { + flag -= 4; + s16* prev = track->oscillators[i].releaseVecOffset; + if (sound->mOscillators[flag]) { + track->oscillators[i] = *sound->mOscillators[flag]; + track->oscillators[i].releaseVecOffset = prev; + } + } - if (flag >= 8) { - flag -= 8; - if (sound->mOscillators[flag]) { - track->oscillators[i] = *sound->mOscillators[flag]; - } - } else if (flag >= 4) { - flag -= 4; - s16* prev = track->oscillators[i].releaseVecOffset; - if (sound->mOscillators[flag]) { - track->oscillators[i] = *sound->mOscillators[flag]; - track->oscillators[i].releaseVecOffset = prev; - } - } - - Effecter_Overwrite_1ShotD(sound, &track->oscillators[i], flag); + Effecter_Overwrite_1ShotD(sound, &track->oscillators[i], flag); + } } Jam_UpdateTrack(track, 3); @@ -192,10 +196,7 @@ BOOL CheckNoteStop(seqp_* track, s32 param_2) track->activeSoundIds[param_2] = 0; return TRUE; } - if (jc->note == 0xff) { - return TRUE; - } - return FALSE; + return jc->note == 0xff; } return TRUE; }