summaryrefslogtreecommitdiff
path: root/src/JSystem/JAudio/JASBasicInst.cpp
diff options
context:
space:
mode:
authorJcw87 <Jcw87@users.noreply.github.com>2023-10-29 23:18:35 -0700
committerJcw87 <Jcw87@users.noreply.github.com>2023-10-30 05:46:10 -0700
commit2c224d3cd4bcec848637dc4378f8110de2508de5 (patch)
tree07cc8a509a19626394b71cce6deeada211ab6ebe /src/JSystem/JAudio/JASBasicInst.cpp
parent8841b74ba1ee0dc2027cc153a629fca4f19998fd (diff)
JASBasicInst
Diffstat (limited to 'src/JSystem/JAudio/JASBasicInst.cpp')
-rw-r--r--src/JSystem/JAudio/JASBasicInst.cpp169
1 files changed, 126 insertions, 43 deletions
diff --git a/src/JSystem/JAudio/JASBasicInst.cpp b/src/JSystem/JAudio/JASBasicInst.cpp
index 0361aff6..dac876e3 100644
--- a/src/JSystem/JAudio/JASBasicInst.cpp
+++ b/src/JSystem/JAudio/JASBasicInst.cpp
@@ -3,91 +3,174 @@
// Translation Unit: JASBasicInst.cpp
//
-#include "JASBasicInst.h"
-#include "dolphin/types.h"
+#include "JSystem/JAudio/JASBasicInst.h"
+#include "JSystem/JAudio/JASBank.h"
+#include "JSystem/JAudio/JASCalc.h"
+#include "JSystem/JAudio/JASInstEffect.h"
+#include "JSystem/JKernel/JKRHeap.h"
+#include "JSystem/JUtility/JUTAssert.h"
/* 80284844-80284888 .text __ct__Q28JASystem10TBasicInstFv */
JASystem::TBasicInst::TBasicInst() {
- /* Nonmatching */
+ field_0x4 = 1.0f;
+ field_0x8 = 1.0f;
+ mEffect = NULL;
+ mEffectCount = 0;
+ mOsc = NULL;
+ mOscCount = 0;
+ field_0x1c = 0;
+ mKeymap = NULL;
}
/* 80284888-80284914 .text __dt__Q28JASystem10TBasicInstFv */
JASystem::TBasicInst::~TBasicInst() {
- /* Nonmatching */
+ delete[] mKeymap;
+ delete[] mEffect;
+ delete[] mOsc;
}
/* 80284914-80284B4C .text getParam__Q28JASystem10TBasicInstCFiiPQ28JASystem10TInstParam */
-void JASystem::TBasicInst::getParam(int, int, JASystem::TInstParam*) const {
- /* Nonmatching */
+bool JASystem::TBasicInst::getParam(int param_1, int param_2, TInstParam* param_3) const {
+ /* Nonmatching */
+ param_3->field_0x0 = 0;
+ param_3->field_0x38 = 0;
+ param_3->field_0x8 = mOsc;
+ param_3->field_0xc = mOscCount;
+ param_3->field_0x10 *= field_0x4;
+ param_3->field_0x14 *= field_0x8;
+ for (int i = 0; i < mEffectCount; i++) {
+ TInstEffect* effect = mEffect[i];
+ if (!effect) {
+ continue;
+ }
+ f32 y = effect->getY(param_1, param_2);
+ switch (effect->mTarget) {
+ case 0:
+ param_3->field_0x18 *= y;
+ break;
+ case 1:
+ param_3->field_0x1c *= y;
+ break;
+ case 2:
+ param_3->field_0x2c += y - 0.5;
+ break;
+ case 3:
+ param_3->field_0x30 += y;
+ break;
+ case 4:
+ param_3->field_0x34 += y;
+ break;
+ default:
+ JUT_ASSERT(93, 0);
+ }
+ }
+ TKeymap* keymap = NULL;
+ for (int i = 0; i < field_0x1c; i++) {
+ keymap = &mKeymap[i];
+ if (param_1 <= keymap->field_0x0) {
+ param_3->field_0x3c = i;
+ break;
+ }
+ }
+ if (!keymap) {
+ return false;
+ }
+ for (int i = 0; i < keymap->field_0x4; i++) {
+ void* region = keymap->getVeloRegion(i);
+ // TODO
+ }
+ return false;
}
/* 80284B4C-80284B54 .text getKeymapIndex__Q28JASystem10TBasicInstCFi */
-void JASystem::TBasicInst::getKeymapIndex(int) const {
- /* Nonmatching */
+int JASystem::TBasicInst::getKeymapIndex(int param_1) const {
+ return param_1;
}
/* 80284B54-80284C10 .text setKeyRegionCount__Q28JASystem10TBasicInstFUl */
-void JASystem::TBasicInst::setKeyRegionCount(unsigned long) {
- /* Nonmatching */
+void JASystem::TBasicInst::setKeyRegionCount(u32 param_1) {
+ delete[] mKeymap;
+ mKeymap = new (TBank::getCurrentHeap(), 0) TKeymap[param_1];
+ JUT_ASSERT(140, mKeymap != 0);
+ field_0x1c = param_1;
}
/* 80284C10-80284CC4 .text setEffectCount__Q28JASystem10TBasicInstFUl */
-void JASystem::TBasicInst::setEffectCount(unsigned long) {
- /* Nonmatching */
+void JASystem::TBasicInst::setEffectCount(u32 param_1) {
+ delete[] mEffect;
+ mEffectCount = param_1;
+ if (param_1 == 0) {
+ mEffect = NULL;
+ return;
+ }
+ mEffect = new (TBank::getCurrentHeap(), 0) TInstEffect*[param_1];
+ JUT_ASSERT(157, mEffect != 0);
+ Calc::bzero(mEffect, param_1 * 4);
}
/* 80284CC4-80284D7C .text setEffect__Q28JASystem10TBasicInstFiPQ28JASystem11TInstEffect */
-void JASystem::TBasicInst::setEffect(int, JASystem::TInstEffect*) {
- /* Nonmatching */
+void JASystem::TBasicInst::setEffect(int index, TInstEffect* effect) {
+ JUT_ASSERT(164, index < mEffectCount);
+ JUT_ASSERT(165, index >= 0);
+ mEffect[index] = effect;
}
/* 80284D7C-80284E30 .text setOscCount__Q28JASystem10TBasicInstFUl */
-void JASystem::TBasicInst::setOscCount(unsigned long) {
- /* Nonmatching */
+void JASystem::TBasicInst::setOscCount(u32 param_1) {
+ delete[] mOsc;
+ mOscCount = param_1;
+ if (param_1 == 0) {
+ mOsc = NULL;
+ return;
+ }
+ mOsc = new (TBank::getCurrentHeap(), 0) TOscillator::Osc_*[param_1];
+ JUT_ASSERT(193, mOsc != 0);
+ Calc::bzero(mOsc, param_1 * 4);
}
/* 80284E30-80284EE8 .text setOsc__Q28JASystem10TBasicInstFiPQ38JASystem11TOscillator4Osc_ */
-void JASystem::TBasicInst::setOsc(int, JASystem::TOscillator::Osc_*) {
- /* Nonmatching */
+void JASystem::TBasicInst::setOsc(int index, TOscillator::Osc_* osc) {
+ JUT_ASSERT(199, index < mOscCount);
+ JUT_ASSERT(200, index >= 0);
+ mOsc[index] = osc;
}
/* 80284EE8-80284F70 .text getKeyRegion__Q28JASystem10TBasicInstFi */
-void JASystem::TBasicInst::getKeyRegion(int) {
- /* Nonmatching */
+JASystem::TBasicInst::TKeymap* JASystem::TBasicInst::getKeyRegion(int index) {
+ JUT_ASSERT(217, index >= 0);
+ if (index >= field_0x1c) {
+ return NULL;
+ }
+ return &mKeymap[index];
}
/* 80284F70-80284FC4 .text __dt__Q38JASystem10TBasicInst7TKeymapFv */
JASystem::TBasicInst::TKeymap::~TKeymap() {
- /* Nonmatching */
+ delete[] mVelomap;
}
/* 80284FC4-80285058 .text setVeloRegionCount__Q38JASystem10TBasicInst7TKeymapFUl */
-void JASystem::TBasicInst::TKeymap::setVeloRegionCount(unsigned long) {
- /* Nonmatching */
+void JASystem::TBasicInst::TKeymap::setVeloRegionCount(u32 param_1) {
+ delete[] mVelomap;
+ mVelomap = new (TBank::getCurrentHeap(), 0) u8[param_1 * 16];
+ JUT_ASSERT(244, mVelomap != 0);
+ field_0x4 = param_1;
}
/* 80285058-802850E0 .text getVeloRegion__Q38JASystem10TBasicInst7TKeymapFi */
-void JASystem::TBasicInst::TKeymap::getVeloRegion(int) {
- /* Nonmatching */
+void* JASystem::TBasicInst::TKeymap::getVeloRegion(int index) {
+ JUT_ASSERT(252, index >= 0);
+ if (index >= field_0x4) {
+ return NULL;
+ }
+ return (u8*)mVelomap + index * 16;
}
/* 802850E0-80285168 .text getVeloRegion__Q38JASystem10TBasicInst7TKeymapCFi */
-void JASystem::TBasicInst::TKeymap::getVeloRegion(int) const {
- /* Nonmatching */
-}
-
-/* 80285168-802851B0 .text __dt__Q28JASystem5TInstFv */
-JASystem::TInst::~TInst() {
- /* Nonmatching */
-}
-
-/* 802851B0-802851C8 .text __ct__Q38JASystem10TBasicInst7TKeymapFv */
-JASystem::TBasicInst::TKeymap::TKeymap() {
- /* Nonmatching */
-}
-
-/* 802851C8-802851D4 .text getType__Q28JASystem10TBasicInstCFv */
-void JASystem::TBasicInst::getType() const {
- /* Nonmatching */
+const void* JASystem::TBasicInst::TKeymap::getVeloRegion(int index) const {
+ JUT_ASSERT(261, index >= 0);
+ if (index >= field_0x4) {
+ return NULL;
+ }
+ return (u8*)mVelomap + index * 16;
}
-