Files
dusklight/libs/JSystem/src/JAudio2/JASDrumSet.cpp
T

119 lines
2.7 KiB
C++

#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JASDrumSet.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JKernel/JKRHeap.h"
JASDrumSet::JASDrumSet() {
mPercArray = NULL;
mPercNumMax = 0;
}
JASDrumSet::~JASDrumSet() {
}
void JASDrumSet::newPercArray(u8 num, JKRHeap* heap) {
if (num) {
JUT_ASSERT(39, num <= 128);
mPercNumMax = num;
mPercArray = JKR_NEW_ARRAY_ARGS(TPerc*, mPercNumMax, heap, 0);
#if TARGET_ANDROID
JASCalc::_bzero(mPercArray, mPercNumMax * sizeof(TPerc*));
#else
JASCalc::bzero(mPercArray, mPercNumMax * sizeof(TPerc*));
#endif
}
}
bool JASDrumSet::getParam(int key, int velocity, JASInstParam* o_param) const {
UNUSED(velocity);
JUT_ASSERT(48, key >= 0);
if (mPercArray == NULL) {
return false;
}
if (key >= mPercNumMax) {
JUT_WARN(54, "JASDrumSet: key %d >= PERC_MAX %d\n", key, mPercNumMax);
return false;
}
TPerc* perc = mPercArray[key];
if (perc == NULL) {
return false;
}
o_param->mChannelType = 0;
o_param->mDontSetKey = 1;
o_param->mVolume = perc->mVolume;
o_param->mPitch = perc->mPitch;
o_param->mPan = perc->mPan;
o_param->mDirectRelease = u16(perc->mDirectRelease);
static JASOscillator::Data osc;
osc.mTarget = 0;
osc.mRate = 1.0f;
osc.mTable = NULL;
osc.rel_table = NULL;
osc.mScale = 1.0f;
osc.mVertex = 0.0f;
static JASOscillator::Data* oscp = &osc;
o_param->mOscillators = &oscp;
o_param->mOscillatorCount = 1;
o_param->mVolume *= perc->mVolumeMult;
o_param->mPitch *= perc->mPitchMult;
o_param->mWaveId = u16(perc->mWaveId);
return true;
}
void JASDrumSet::setPerc(int index, JASDrumSet::TPerc* param_1) {
JUT_ASSERT(123, index >= 0);
JUT_ASSERT(125, index < mPercNumMax);
JUT_ASSERT(126, mPercArray);
JUT_ASSERT(127, mPercArray[index] == 0);
mPercArray[index] = param_1;
}
JASDrumSet::TPerc* JASDrumSet::getPerc(int index) {
if (index < 0) {
return NULL;
}
if (index >= mPercNumMax) {
return NULL;
}
if (!mPercArray) {
return NULL;
}
return mPercArray[index];
}
JASDrumSet::TPerc* JASDrumSet::getPerc(int index) const {
if (index < 0) {
return NULL;
}
if (index >= mPercNumMax) {
return NULL;
}
if (!mPercArray) {
return NULL;
}
return mPercArray[index];
}
JASDrumSet::TPerc::TPerc() {
mVolume = 1.0f;
mPitch = 1.0f;
mPan = 0.5f;
mDirectRelease = 1000;
}
void JASDrumSet::TPerc::setRelease(u32 release) {
JUT_ASSERT(224, release < 0x10000);
mDirectRelease = release;
}
u32 JASDrumSet::getType() const { return 'PERC'; }