Allow audio samples to be played back from anywhere in memory rather than ARAM.

This is accomplished through a new mAramBaseAddress field on the DSP channels, which effectively relocates ARAM for that channel.
This commit is contained in:
PJB3005
2026-07-25 15:49:13 +02:00
parent 30c36df76b
commit ad80933ccf
8 changed files with 57 additions and 3 deletions
+4 -1
View File
@@ -33,7 +33,7 @@ JASChannel* JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8
return NULL;
}
intptr_t wavePtr = waveHandle->getWavePtr();
if (!wavePtr) {
if (!wavePtr IF_DUSK(&& !waveHandle->getAramBaseAddress())) {
return NULL;
}
@@ -44,6 +44,9 @@ JASChannel* JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8
channel->setPriority(param_4);
channel->field_0xdc.mWaveInfo = *waveInfo;
channel->mWaveAramAddress = wavePtr;
#if TARGET_PC
channel->mAramBaseAddress = waveHandle->getAramBaseAddress();
#endif
channel->field_0xdc.mChannelType = stack_60.field_0x1c;
channel->setBankDisposeID(param_0);
channel->setInitPitch(stack_60.mPitch * (waveInfo->mSampleRate / JASDriver::getDacRate()));
+6
View File
@@ -26,6 +26,9 @@ JASChannel::JASChannel(Callback i_callback, void* i_callbackData) :
mCallback(i_callback),
mCallbackData(i_callbackData),
mUpdateTimer(0),
#if TARGET_PC
mAramBaseAddress(nullptr),
#endif
mBankDisposeID(NULL),
mKey(0),
mVelocity(0x7f),
@@ -256,6 +259,9 @@ s32 JASChannel::initialUpdateDSPChannel(JASDsp::TChannel* i_channel) {
switch (field_0xdc.mChannelType) {
case 0:
i_channel->setWaveInfo(field_0xdc.mWaveInfo, mWaveAramAddress, mSkipSamples);
#if TARGET_PC
i_channel->mAramBaseAddress = mAramBaseAddress;
#endif
break;
case 2:
i_channel->setOscInfo(mOscillatorSomething);