mirror of https://github.com/PrimeDecomp/prime.git
Match adsrHandle
Former-commit-id: 3cd23e9ab856d3b4ef139eb432adeb23d723632f
This commit is contained in:
parent
c712d523b3
commit
7d74b1f127
10
configure.py
10
configure.py
|
@ -1172,11 +1172,11 @@ config.libs = [
|
|||
],
|
||||
},
|
||||
MusyX(
|
||||
# debug=True,
|
||||
# mw_version="GC/1.2.5",
|
||||
# major=2,
|
||||
# minor=0,
|
||||
# patch=0,
|
||||
debug=True,
|
||||
mw_version="GC/1.2.5",
|
||||
major=1,
|
||||
minor=5,
|
||||
patch=3,
|
||||
objects=[
|
||||
Object(Matching, "musyx/runtime/seq.c"),
|
||||
Object(Matching, "musyx/runtime/synth.c"),
|
||||
|
|
|
@ -513,7 +513,7 @@ typedef struct SYNTH_VOICE {
|
|||
u32 id; // offset 0xF4, size 0x4
|
||||
VID_LIST* vidList; // offset 0xF8, size 0x4
|
||||
VID_LIST* vidMasterList; // offset 0xFC, size 0x4
|
||||
#if MUSY_VERSION > MUSY_VERSION_CHECK(1, 5, 3) && MUSY_VERSION <= MUSY_VERSION_CHECK(2, 0, 0)
|
||||
#if MUSY_VERSION >= MUSY_VERSION_CHECK(1, 5, 0) && MUSY_VERSION <= MUSY_VERSION_CHECK(2, 0, 0)
|
||||
u16 allocId; // offset 0x100, size 0x2
|
||||
#else
|
||||
u32 allocId;
|
||||
|
|
|
@ -13,9 +13,14 @@ static u32 adsrGetIndex(ADSR_VARS* adsr) {
|
|||
|
||||
u32 adsrConvertTimeCents(long tc) { return 1000.f * powf(2.f, 1.2715658e-08f * tc); }
|
||||
|
||||
#pragma dont_inline on
|
||||
u32 salChangeADSRState(ADSR_VARS* adsr) {
|
||||
u32 VoiceDone; // r30
|
||||
VoiceDone = FALSE;
|
||||
|
||||
return VoiceDone;
|
||||
}
|
||||
#pragma dont_inline reset
|
||||
|
||||
u32 adsrSetup(ADSR_VARS* adsr) {
|
||||
adsr->state = 0;
|
||||
|
@ -68,6 +73,57 @@ u32 adsrHandle(ADSR_VARS* adsr, u16* adsr_start, u16* adsr_delta) {
|
|||
s32 old_volume; // r29
|
||||
bool VoiceDone; // r28
|
||||
s32 vDelta; // r27
|
||||
|
||||
VoiceDone = FALSE;
|
||||
|
||||
switch (adsr->mode) {
|
||||
case 0:
|
||||
if (adsr->state != 3) {
|
||||
old_volume = adsr->currentVolume;
|
||||
adsr->currentVolume += adsr->currentDelta;
|
||||
*adsr_start = old_volume >> 16;
|
||||
if (adsr->currentDelta >= 0) {
|
||||
*adsr_delta = adsr->currentDelta >> 21;
|
||||
} else {
|
||||
*adsr_delta = -(-adsr->currentDelta >> 21);
|
||||
}
|
||||
|
||||
if (--adsr->cnt == 0) {
|
||||
VoiceDone = salChangeADSRState(adsr);
|
||||
}
|
||||
} else {
|
||||
*adsr_start = adsr->currentVolume >> 16;
|
||||
*adsr_delta = 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (adsr->state != 3) {
|
||||
old_volume = adsr->currentVolume;
|
||||
if (adsr->data.dls.aMode == 0 && adsr->state == 1) {
|
||||
adsr->currentVolume += adsr->currentDelta;
|
||||
} else {
|
||||
adsr->currentIndex += adsr->currentDelta;
|
||||
adsr->currentVolume = dspAttenuationTab[adsrGetIndex(adsr)] << 16;
|
||||
}
|
||||
*adsr_start = old_volume >> 16;
|
||||
vDelta = adsr->currentVolume - old_volume;
|
||||
if (vDelta >= 0) {
|
||||
*adsr_delta = vDelta >> 21;
|
||||
} else {
|
||||
*adsr_delta = -(-vDelta >> 21);
|
||||
}
|
||||
|
||||
if (--adsr->cnt == 0) {
|
||||
VoiceDone = salChangeADSRState(adsr);
|
||||
}
|
||||
} else {
|
||||
*adsr_start = adsr->currentVolume >> 16;
|
||||
*adsr_delta = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return VoiceDone;
|
||||
}
|
||||
u32 adsrHandleLowPrecision(ADSR_VARS* adsr, u16* adsr_start, u16* adsr_delta) {
|
||||
u8 i; // r31
|
||||
|
|
Loading…
Reference in New Issue