JASVoiceBank, JASBasicWaveBank, JASBank, JAUSeqCollection (#1924)

* JASVoiceBank OK

* JASBasicWaveBank

* JASBank

* JAUSeqCollection
This commit is contained in:
Jcw87
2023-09-12 08:14:57 -07:00
committed by GitHub
parent 696024598c
commit 4ab104f390
35 changed files with 600 additions and 860 deletions
+94 -52
View File
@@ -4,49 +4,16 @@
//
#include "JSystem/JAudio2/JASBank.h"
#include "JSystem/JAudio2/JASAiCtrl.h"
#include "JSystem/JAudio2/JASBasicInst.h"
#include "JSystem/JAudio2/JASBasicWaveBank.h"
#include "JSystem/JAudio2/JASChannel.h"
#include "dol2asm.h"
//
// Types:
//
struct JASOscillator {
struct Data {};
};
template <typename A0>
struct JASMemPool_MultiThreaded {};
/* JASMemPool_MultiThreaded<JASChannel> */
struct JASMemPool_MultiThreaded__template2 {
/* 802978DC */ void func_802978DC(void* _this);
};
struct JASGenericMemPool {
/* 80290848 */ JASGenericMemPool();
/* 80290948 */ void alloc(u32);
};
struct JASDsp {
struct TChannel {};
};
struct JASDriver {
/* 8029C9E8 */ void getDacRate();
};
struct JASChannel {
/* 8029A800 */ JASChannel(void (*)(u32, JASChannel*, JASDsp::TChannel*, void*), void*);
/* 8029A9F0 */ void play();
/* 8029AB64 */ void setOscInit(u32, JASOscillator::Data const*);
};
struct JASBank {
/* 80297930 */ void noteOn(JASBank const*, int, u8, u8, u16,
void (*)(u32, JASChannel*, JASDsp::TChannel*, void*), void*);
/* 80297C40 */ void noteOnOsc(int, u8, u8, u16,
void (*)(u32, JASChannel*, JASDsp::TChannel*, void*), void*);
};
//
// Forward References:
//
@@ -65,8 +32,6 @@ extern "C" void __ct__10JASChannelFPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv();
extern "C" void play__10JASChannelFv();
extern "C" void setOscInit__10JASChannelFUlPCQ213JASOscillator4Data();
extern "C" void getDacRate__9JASDriverFv();
extern "C" void OSDisableInterrupts();
extern "C" void OSRestoreInterrupts();
extern "C" void __register_global_object();
extern "C" void _savegpr_23();
extern "C" void _savegpr_25();
@@ -99,34 +64,88 @@ SECTION_SDATA2 static f32 lit_250 = 0.5f;
/* 80297930-80297C40 292270 0310+00 0/0 1/1 0/0 .text
* noteOn__7JASBankFPC7JASBankiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv */
// vtables for JASWaveBank, JASWaveHandle
#ifdef NONMATCHING
JASChannel* JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8 param_3, u16 param_4,
void (*param_5)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_6) {
if (param_1 >= 0xf0) {
return noteOnOsc(param_1 - 0xf0, param_2, param_3, param_4, param_5, param_6);
}
if (!param_0) {
return NULL;
}
JASInstParam stack_60;
if (!param_0->getInstParam(param_1, param_2, param_3, &stack_60)) {
return NULL;
}
JASWaveBank* waveBank = param_0->getWaveBank();
if (!waveBank) {
return NULL;
}
JASWaveHandle* waveHandle = waveBank->getWaveHandle(stack_60.field_0x1a);
if (!waveHandle) {
return NULL;
}
const JASWaveInfo* waveInfo = waveHandle->getWaveInfo();
if (!waveInfo) {
return NULL;
}
int wavePtr = waveHandle->getWavePtr();
if (!wavePtr) {
return NULL;
}
JASChannel* channel = new JASChannel(param_5, param_6);
if (!channel) {
return NULL;
}
channel->setPriority(param_4);
channel->field_0xdc.field_0x4 = *waveInfo;
channel->field_0x104 = wavePtr;
channel->field_0xdc.field_0x0 = stack_60.field_0x1c;
channel->setBankDisposeID(param_0);
channel->setInitPitch(stack_60.mPitch * (waveInfo->field_0x04 / JASDriver::getDacRate()));
if (stack_60.field_0x1e == 0) {
channel->setKey(param_2 - waveInfo->field_0x01);
}
channel->setInitVolume(stack_60.mVolume);
channel->setVelocity(param_3);
channel->setInitPan(stack_60.mPan);
channel->setInitFxmix(stack_60.mFxMix);
channel->setInitDolby(stack_60.mDolby);
for (u32 i = 0; i < stack_60.field_0x1d; i++) {
channel->setOscInit(i, stack_60.field_0x14[i]);
}
channel->setDirectRelease(stack_60.field_0x18);
if (!channel->play()) {
return NULL;
}
return channel;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8 param_3, u16 param_4,
asm JASChannel* JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8 param_3, u16 param_4,
void (*param_5)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_6) {
nofralloc
#include "asm/JSystem/JAudio2/JASBank/noteOn__7JASBankFPC7JASBankiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 8039B190-8039B19C 0277F0 000C+00 1/0 0/0 0/0 .rodata OSC_RELEASE_TABLE$260 */
SECTION_RODATA static u8 const OSC_RELEASE_TABLE[12] = {
0x00, 0x01, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
SECTION_RODATA static s16 const OSC_RELEASE_TABLE[6] = {
0x0001, 0x000A, 0x0000, 0x000F, 0x0000, 0x0000,
};
COMPILER_STRIP_GATE(0x8039B190, &OSC_RELEASE_TABLE);
/* 8039B19C-8039B1B8 -00001 0018+04 1/1 0/0 0/0 .rodata OSC_ENV$261 */
SECTION_RODATA static void* const OSC_ENV[6 + 1 /* padding */] = {
(void*)NULL,
(void*)0x3F800000,
(void*)NULL,
(void*)&OSC_RELEASE_TABLE,
(void*)0x3F800000,
(void*)NULL,
/* padding */
NULL,
SECTION_RODATA static const JASOscillator::Data OSC_ENV = {
0, 1.0f, NULL, OSC_RELEASE_TABLE, 1.0f, 0.0f,
};
COMPILER_STRIP_GATE(0x8039B19C, &OSC_ENV);
@@ -135,13 +154,36 @@ SECTION_SDATA2 static f32 lit_290 = 16736.015625f;
/* 80297C40-80297D78 292580 0138+00 1/1 0/0 0/0 .text
* noteOnOsc__7JASBankFiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv */
// wild ~JASMemPool_MultiThreaded<JASChannel> destructor appeared!
#ifdef NONMATCHING
JASChannel* JASBank::noteOnOsc(int param_0, u8 param_1, u8 param_2, u16 param_3,
void (*param_4)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_5) {
JASChannel* channel = new JASChannel(param_4, param_5);
if (!channel) {
return NULL;
}
channel->setPriority(param_3);
channel->field_0x104 = param_0;
channel->field_0xdc.field_0x0 = 2;
channel->setInitPitch(16736.02f / JASDriver::getDacRate());
channel->setKey(param_1 - channel->field_0xdc.field_0x4.field_0x01);
channel->setVelocity(param_2);
channel->setOscInit(0, &OSC_ENV);
if (!channel->play()) {
return NULL;
}
return channel;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JASBank::noteOnOsc(int param_0, u8 param_1, u8 param_2, u16 param_3,
asm JASChannel* JASBank::noteOnOsc(int param_0, u8 param_1, u8 param_2, u16 param_3,
void (*param_4)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_5) {
nofralloc
#include "asm/JSystem/JAudio2/JASBank/noteOnOsc__7JASBankFiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv.s"
}
#pragma pop
#endif