diff --git a/configure.py b/configure.py index 4b2875672..b261008d9 100644 --- a/configure.py +++ b/configure.py @@ -687,12 +687,12 @@ config.libs = [ Object(Matching, "JSystem/JAudio/JASWaveBankMgr.cpp"), Object(NonMatching, "JSystem/JAudio/JASBankMgr.cpp"), Object(Matching, "JSystem/JAudio/JASAudioThread.cpp"), - Object(NonMatching, "JSystem/JAudio/JASDSPBuf.cpp"), + Object(Matching, "JSystem/JAudio/JASDSPBuf.cpp"), Object(NonMatching, "JSystem/JAudio/JASDSPChannel.cpp"), Object(Matching, "JSystem/JAudio/JASDSPInterface.cpp"), Object(Matching, "JSystem/JAudio/JASDriverIF.cpp"), Object(Matching, "JSystem/JAudio/JASChGlobal.cpp"), - Object(NonMatching, "JSystem/JAudio/JASChAllocQueue.cpp"), + Object(Matching, "JSystem/JAudio/JASChAllocQueue.cpp"), Object(NonMatching, "JSystem/JAudio/JASChannel.cpp"), Object(NonMatching, "JSystem/JAudio/JASChannelMgr.cpp"), Object(NonMatching, "JSystem/JAudio/JASOscillator.cpp"), diff --git a/include/JSystem/JAudio/JASAiCtrl.h b/include/JSystem/JAudio/JASAiCtrl.h index 9b757dd77..2716a1d2b 100644 --- a/include/JSystem/JAudio/JASAiCtrl.h +++ b/include/JSystem/JAudio/JASAiCtrl.h @@ -24,6 +24,8 @@ namespace JASystem { extern int JASVframeCounter; extern s16* (*extMixCallback)(s32); extern u8 extMixMode; + + inline void JASAiMixLimit16(s32) {} // TODO } } diff --git a/include/JSystem/JAudio/JASChannel.h b/include/JSystem/JAudio/JASChannel.h index c5025e716..d349b0472 100644 --- a/include/JSystem/JAudio/JASChannel.h +++ b/include/JSystem/JAudio/JASChannel.h @@ -54,6 +54,13 @@ namespace JASystem { void extraUpdate(TChannel*, u32); static void updatecallLogicalChannel(TChannel*, u32); + u8 getNoteOnPriority() const { return field_0x48; } + + // TODO + void getLifeTimePriority() const {} + void getReleasePriority() const {} + void setSkipSamples(u32) {} + /* 0x00 */ u8 field_0x0; /* 0x01 */ u8 field_0x1; /* 0x02 */ u8 mPauseFlag; diff --git a/include/JSystem/JAudio/JASRate.h b/include/JSystem/JAudio/JASRate.h index 29260f582..a89e1d7ab 100644 --- a/include/JSystem/JAudio/JASRate.h +++ b/include/JSystem/JAudio/JASRate.h @@ -7,10 +7,17 @@ namespace JASystem { namespace Kernel { extern f32 gDacRate; extern u32 gSubFrames; - extern int gFrameSamples; + extern u32 gFrameSamples; extern u32 gDacSize; extern int gOutputRate; extern int gAiSetting; + + inline f32 getDacRate() { return gDacRate; } + inline u32 getSubFrames() { return gSubFrames; } + inline u32 getFrameSamples() { return gFrameSamples; } + inline u32 getDacSize() { return gDacSize; } + inline int getOutputRate() { return gOutputRate; } + inline int getAiSetting() { return gAiSetting; } } } diff --git a/src/JSystem/JAudio/JASAiCtrl.cpp b/src/JSystem/JAudio/JASAiCtrl.cpp index d745ca406..ba922448d 100644 --- a/src/JSystem/JAudio/JASAiCtrl.cpp +++ b/src/JSystem/JAudio/JASAiCtrl.cpp @@ -34,12 +34,12 @@ s16* JASystem::Kernel::dac[3]; /* 8027AE5C-8027AEF8 .text initSystem__Q28JASystem6KernelFv */ void JASystem::Kernel::initSystem() { for (int i = 0; i < 3; i++) { - dac[i] = (s16*)allocFromSysDram(gDacSize * 2); - Calc::bzero(dac[i], gDacSize * 2); - DCStoreRange(dac[i], gDacSize * 2); + dac[i] = (s16*)allocFromSysDram(getDacSize() * 2); + Calc::bzero(dac[i], getDacSize() * 2); + DCStoreRange(dac[i], getDacSize() * 2); } AIInit(NULL); - AIInitDMA(u32(dac[2]), gDacSize * 2); + AIInitDMA(u32(dac[2]), getDacSize() * 2); } int JASystem::Kernel::JASUniversalDacCounter; @@ -61,26 +61,26 @@ void JASystem::Kernel::registerMixCallback(s16* (*param_1)(s32), u8 param_2) { void JASystem::Kernel::vframeWork() { static u32 dacp = 0; JASVframeCounter++; - s16* buf = TDSP_DACBuffer::mixDSP(gDacSize / 2); - Calc::imixcopy(buf + gFrameSamples, buf, dac[dacp], gDacSize / 2); + s16* buf = TDSP_DACBuffer::mixDSP(getDacSize() / 2); + Calc::imixcopy(buf + gFrameSamples, buf, dac[dacp], getDacSize() / 2); if (extMixCallback) { switch(extMixMode) { case 0: - mixMonoTrack(dac[dacp], gDacSize / 2, extMixCallback); + mixMonoTrack(dac[dacp], getDacSize() / 2, extMixCallback); break; case 1: - mixMonoTrackWide(dac[dacp], gDacSize / 2, extMixCallback); + mixMonoTrackWide(dac[dacp], getDacSize() / 2, extMixCallback); break; case 2: - mixExtraTrack(dac[dacp], gDacSize / 2, extMixCallback); + mixExtraTrack(dac[dacp], getDacSize() / 2, extMixCallback); break; case 3: - mixInterleaveTrack(dac[dacp], gDacSize / 2, extMixCallback); + mixInterleaveTrack(dac[dacp], getDacSize() / 2, extMixCallback); break; } } BOOL enable = OSDisableInterrupts(); - DCStoreRange(dac[dacp], gDacSize * 2); + DCStoreRange(dac[dacp], getDacSize() * 2); OSRestoreInterrupts(enable); lastRspMadep = dac[dacp]; dacp++; @@ -92,13 +92,12 @@ void JASystem::Kernel::vframeWork() { /* 8027B0B8-8027B160 .text updateDac__Q28JASystem6KernelFv */ void JASystem::Kernel::updateDac() { - /* Nonmatching */ if (!useRspMadep) { useRspMadep = lastRspMadep; lastRspMadep = NULL; } if (useRspMadep) { - AIInitDMA(u32(useRspMadep), gDacSize * 2); + AIInitDMA(u32(useRspMadep), getDacSize() * 2); useRspMadep = NULL; } else { JASUniversalDacCounter++; @@ -108,7 +107,7 @@ void JASystem::Kernel::updateDac() { } HardStream::main(); if (dacCallbackFunc) { - dacCallbackFunc(lastRspMadep, gDacSize / 2); + dacCallbackFunc(lastRspMadep, getDacSize() / 2); } } diff --git a/src/JSystem/JAudio/JASAudioThread.cpp b/src/JSystem/JAudio/JASAudioThread.cpp index a130dbc06..76065e767 100644 --- a/src/JSystem/JAudio/JASAudioThread.cpp +++ b/src/JSystem/JAudio/JASAudioThread.cpp @@ -57,7 +57,7 @@ void* JASystem::TAudioThread::audioproc(void*) { sbIsDSPBoot = 1; } Driver::init(); - AISetDSPSampleRate(Kernel::gAiSetting); + AISetDSPSampleRate(Kernel::getAiSetting()); AIRegisterDMACallback(syncAudio); AIStartDMA(); while (true) { diff --git a/src/JSystem/JAudio/JASBankMgr.cpp b/src/JSystem/JAudio/JASBankMgr.cpp index ed42711ec..56bb2941e 100644 --- a/src/JSystem/JAudio/JASBankMgr.cpp +++ b/src/JSystem/JAudio/JASBankMgr.cpp @@ -121,7 +121,7 @@ JASystem::TChannel* JASystem::BankMgr::noteOnOsc(TChannelMgr* param_1, int param channel->field_0xc = 2; channel->field_0x0 = param_4; channel->field_0x1 = param_3; - channel->field_0x50 = 16736.016f / Kernel::gDacRate; + channel->field_0x50 = 16736.016f / Kernel::getDacRate(); channel->field_0x58 = channel->field_0x50; s32 var1 = param_3; if (var1 < 0) { diff --git a/src/JSystem/JAudio/JASChAllocQueue.cpp b/src/JSystem/JAudio/JASChAllocQueue.cpp index cb51ec07a..79421b5f1 100644 --- a/src/JSystem/JAudio/JASChAllocQueue.cpp +++ b/src/JSystem/JAudio/JASChAllocQueue.cpp @@ -45,10 +45,9 @@ void JASystem::TDSPQueue::deQueue() { /* 8028B224-8028B288 .text enQueue__Q28JASystem9TDSPQueueFPQ28JASystem8TChannel */ void JASystem::TDSPQueue::enQueue(TChannel* param_1) { - /* Nonmatching */ JSUListIterator it; for (it = sDspQueueList.getFirst(); it != sDspQueueList.getEnd(); it++) { - if ((it->field_0x48 & 0xff) <= (param_1->field_0x48 & 0xff)) { + if (param_1->getNoteOnPriority() > it->getNoteOnPriority()) { break; } } diff --git a/src/JSystem/JAudio/JASDSPBuf.cpp b/src/JSystem/JAudio/JASDSPBuf.cpp index aa7d7b9e4..b25dec5cd 100644 --- a/src/JSystem/JAudio/JASDSPBuf.cpp +++ b/src/JSystem/JAudio/JASDSPBuf.cpp @@ -29,20 +29,19 @@ static void dummy() { /* 802892E0-802893E4 .text init__Q28JASystem14TDSP_DACBufferFv */ void JASystem::TDSP_DACBuffer::init() { - /* Nonmatching */ if (!isInit) { - int r30 = Kernel::gFrameSamples; + u32 frameSamples = Kernel::getFrameSamples(); writeBuffer = numDSPBuf - 1; readBuffer = 0; dsp_buf = new (JASDram, 0x20) s16*[numDSPBuf]; for (int i = 0; i < numDSPBuf; i++) { - dsp_buf[i] = new (JASDram, 0x20) s16[r30 * 2]; - for (u32 j = 0; j < r30 * 2; j++) { + dsp_buf[i] = new (JASDram, 0x20) s16[frameSamples * 2]; + for (u32 j = 0; j < frameSamples * 2; j++) { dsp_buf[i][j] = 0; } - DCStoreRange(dsp_buf[i], r30 * 4); + DCStoreRange(dsp_buf[i], frameSamples * 4); } - OSReport("DSP_DAC buffer size : %d\n", r30 * 2); + OSReport("DSP_DAC buffer size : %d\n", frameSamples * 2); dspStatus = 0; isInit = 1; } @@ -63,9 +62,8 @@ void JASystem::TDSP_DACBuffer::updateDSP() { /* 80289438-80289568 .text mixDSP__Q28JASystem14TDSP_DACBufferFl */ s16* JASystem::TDSP_DACBuffer::mixDSP(s32) { - /* Nonmatching */ u8 var4 = readBuffer + 1; - u32 frameSamples = Kernel::gFrameSamples; + u32 frameSamples = Kernel::getFrameSamples(); if (var4 == numDSPBuf) { var4 = 0; } @@ -97,7 +95,7 @@ void (*JASystem::TDSP_DACBuffer::callback)(s16*, u32); /* 80289568-8028963C .text finishDSPFrame__Q28JASystem14TDSP_DACBufferFv */ void JASystem::TDSP_DACBuffer::finishDSPFrame() { u8 var2 = writeBuffer + 1; - u32 r31 = Kernel::gFrameSamples; + u32 frameSamples = Kernel::getFrameSamples(); if (var2 == numDSPBuf) { var2 = 0; } @@ -106,12 +104,12 @@ void JASystem::TDSP_DACBuffer::finishDSPFrame() { return; } writeBuffer = var2; - TAudioThread::snIntCount = Kernel::gSubFrames; + TAudioThread::snIntCount = Kernel::getSubFrames(); Kernel::probeStart(7, "DSP-MAIN"); - DsyncFrame2(Kernel::gSubFrames, u32(dsp_buf[writeBuffer]), u32(&dsp_buf[writeBuffer][r31])); + DsyncFrame2(Kernel::getSubFrames(), u32(dsp_buf[writeBuffer]), u32(&dsp_buf[writeBuffer][frameSamples])); dspStatus = 1; updateDSP(); if (callback) { - callback(dsp_buf[writeBuffer], r31); + callback(dsp_buf[writeBuffer], frameSamples); } } diff --git a/src/JSystem/JAudio/JASDSPChannel.cpp b/src/JSystem/JAudio/JASDSPChannel.cpp index f531e7393..7fa0f425c 100644 --- a/src/JSystem/JAudio/JASDSPChannel.cpp +++ b/src/JSystem/JAudio/JASDSPChannel.cpp @@ -249,11 +249,11 @@ f32 JASystem::DSP_LIMIT_RATIO = 1.1f; /* 80289E68-8028A04C .text updateAll__Q28JASystem11TDSPChannelFv */ void JASystem::TDSPChannel::updateAll() { /* Nonmatching */ - if (Kernel::gSubFrames <= 10) { + if (Kernel::getSubFrames() <= 10) { OSTick time = OSGetTick(); OSTick var3 = time - old_time; old_time = time; - u32 var2 = Kernel::gSubFrames - TAudioThread::snIntCount; + u32 var2 = Kernel::getSubFrames() - TAudioThread::snIntCount; history[var2] = var3; if (var2) { if (f32(history[0]) / var3 < DSP_LIMIT_RATIO) { diff --git a/src/JSystem/JAudio/JASRate.cpp b/src/JSystem/JAudio/JASRate.cpp index 7307b897d..6cd6a2d6e 100644 --- a/src/JSystem/JAudio/JASRate.cpp +++ b/src/JSystem/JAudio/JASRate.cpp @@ -7,7 +7,7 @@ f32 JASystem::Kernel::gDacRate = 32028.5f; u32 JASystem::Kernel::gSubFrames = 7; -int JASystem::Kernel::gFrameSamples = 560; +u32 JASystem::Kernel::gFrameSamples = 560; u32 JASystem::Kernel::gDacSize = 1120; int JASystem::Kernel::gOutputRate; int JASystem::Kernel::gAiSetting; diff --git a/src/JSystem/JAudio/JASTrack.cpp b/src/JSystem/JAudio/JASTrack.cpp index 00690ccaf..c37fc0a7a 100644 --- a/src/JSystem/JAudio/JASTrack.cpp +++ b/src/JSystem/JAudio/JASTrack.cpp @@ -10,6 +10,7 @@ #include "JSystem/JAudio/JASChGlobal.h" #include "JSystem/JAudio/JASPlayer.h" #include "JSystem/JAudio/JASSystemHeap.h" +#include "JSystem/JAudio/JASRate.h" #include "JSystem/JKernel/JKRSolidHeap.h" #include "JSystem/JUtility/JUTAssert.h" @@ -481,8 +482,18 @@ void JASystem::TTrack::updateSeq(u32, bool) { } /* 802825A0-8028265C .text seqTimeToDspTime__Q28JASystem6TTrackFlUc */ -int JASystem::TTrack::seqTimeToDspTime(s32, u8) { - /* Nonmatching */ +int JASystem::TTrack::seqTimeToDspTime(s32 param_1, u8 param_2) { + f32 f1 = ((f32)param_1 * (f32)param_2) / 100.0f; + if (field_0x387) { + f1 /= field_0x368; + } else { + f1 = 120.0f * f1; + f1 /= field_0x378; + if (Kernel::getOutputRate() == 0) { + f1 = (f1 * Kernel::getSubFrames()) / 10.0f; + } + } + return f1; } /* 8028265C-8028278C .text setParam__Q28JASystem6TTrackFifi */