diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2025-11-27 21:19:33 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-27 21:19:33 -0800 |
| commit | 6f96e665186c87f15acb6f5cb8d27665afee3130 (patch) | |
| tree | 3ea70fe7d635a0f55aae44b1a386814766a46597 /src/Z2AudioLib/Z2Calc.cpp | |
| parent | 767caeecc3e374779cccc9960b6546b74e7a9e50 (diff) | |
various Z2Audio / JAudio debug cleanup (#2876)
* some JAudio work
* audio cleanup checkpoint
* checkpoint more audio cleanup
* fix symbols
* more z2 cleanup
* fix regression
* fix build
* some fixes
Diffstat (limited to 'src/Z2AudioLib/Z2Calc.cpp')
| -rw-r--r-- | src/Z2AudioLib/Z2Calc.cpp | 164 |
1 files changed, 69 insertions, 95 deletions
diff --git a/src/Z2AudioLib/Z2Calc.cpp b/src/Z2AudioLib/Z2Calc.cpp index eb12401057..9ba1fb58ec 100644 --- a/src/Z2AudioLib/Z2Calc.cpp +++ b/src/Z2AudioLib/Z2Calc.cpp @@ -1,138 +1,112 @@ -// -// Generated By: dol2asm -// Translation Unit: Z2Calc -// - #include "Z2AudioLib/Z2Calc.h" #include "JSystem/JMath/random.h" -#include "math.h" -#include "dol2asm.h" +#include <math.h> /* 802A968C-802A96F4 2A3FCC 0068+00 1/1 16/16 0/0 .text linearTransform__6Z2CalcFfffffb */ -f32 Z2Calc::linearTransform(f32 param1, f32 param2, f32 param3, f32 param4, f32 param5, - bool param6) { - f32 temp; - - temp = param4 + (param1 - param2) * ((param5 - param4) / (param3 - param2)); - - if (param6) { - return temp; - } else if (param4 < param5) { - if (temp > param5) { - return param5; - } else if (temp < param4) { - return param4; - } else { - return temp; - } - } else if (temp > param4) { - return param4; - } else if (temp < param5) { - return param5; +f32 Z2Calc::linearTransform(f32 inValue, f32 inMin, f32 inMax, f32 outMin, f32 outMax, bool noClamp) { + f32 transformed = outMin + ((inValue - inMin) * ((outMax - outMin) / (inMax - inMin))); + if (noClamp) { + return transformed; + } + + if (outMin < outMax) { + return transformed > outMax ? outMax : + transformed < outMin ? outMin : + transformed; } else { - return temp; + return transformed > outMin ? outMin : + transformed < outMax ? outMax : + transformed; } } -/* ############################################################################################## */ /* 80455820-80455824 003E20 0004+00 0/0 1/1 0/0 .sdata2 cEqualCSlope__6Z2Calc */ -SECTION_SDATA2 f32 Z2Calc::cEqualCSlope = 1.0f; +const f32 Z2Calc::cEqualCSlope = 1.0f; /* 80455824-80455828 003E24 0004+00 0/0 1/1 0/0 .sdata2 cEqualPSlope__6Z2Calc */ -SECTION_SDATA2 f32 Z2Calc::cEqualPSlope = 0.5f; +const f32 Z2Calc::cEqualPSlope = 0.5f; /* 802A96F4-802A9814 2A4034 0120+00 0/0 29/29 0/0 .text * getParamByExp__6Z2CalcFffffffQ26Z2Calc9CurveSign */ -f32 Z2Calc::getParamByExp(f32 f1, f32 f2, f32 f3, f32 f4, f32 f5, f32 f6, Z2Calc::CurveSign sign) { - f32 out; - if (sign == Z2Calc::CURVE_SIGN_1) { - f32 tmp = exp(Z2Calc::linearTransform(f1, f2, f3, 0.0f, f4, true)); - out = Z2Calc::linearTransform(tmp, 1.0f, exp(f4), f5, f6, true); - } else if (sign == Z2Calc::CURVE_SIGN_0) { - f32 tmp = exp(Z2Calc::linearTransform(f1, f2, f3, f4, 0.0f, true)); - out = Z2Calc::linearTransform(tmp, exp(f4), 1.0f, f5, f6, true); +f32 Z2Calc::getParamByExp(f32 value, f32 inMin, f32 inMax, f32 exponent, f32 outMin, f32 outMax, Z2Calc::CurveSign curveSign) { + if (curveSign == Z2Calc::CURVE_POSITIVE) { + value = linearTransform(value, inMin, inMax, 0.0f, exponent, true); + value = expf(value); + value = linearTransform(value, 1.0f, expf(exponent), outMin, outMax, true); + } else if (curveSign == Z2Calc::CURVE_NEGATIVE) { + value = linearTransform(value, inMin, inMax, exponent, 0.0f, true); + value = expf(value); + value = linearTransform(value, expf(exponent), 1.0f, outMin, outMax, true); } else { - out = Z2Calc::linearTransform(f1, f2, f3, f5, f6, false); - } - if (out > f6) { - return f6; + value = linearTransform(value, inMin, inMax, outMin, outMax, false); } - if (out < f5) { - return f5; - } - return out; + + return value > outMax ? outMax : + value < outMin ? outMin : + value; } /* 802A9814-802A98D4 2A4154 00C0+00 0/0 2/2 0/0 .text getRandom__6Z2CalcFfff */ -f32 Z2Calc::getRandom(f32 f1, f32 f2, f32 f3) { - f32 tmp = 2.0f * f3; - f32 tmp2 = (1.0f - f3) * -2.0f; - f1 *= Z2Calc::getRandom_0_1() < f3 ? tmp : tmp2; - f32 tmp3 = pow(Z2Calc::getRandom_0_1(), f2); - return tmp3 * f1; +f32 Z2Calc::getRandom(f32 magnitude, f32 exponent, f32 bias) { + f32 posBias = 2.0f * bias; + f32 negBias = (1.0f - bias) * -2.0f; + magnitude *= Z2Calc::getRandom_0_1() < bias ? posBias : negBias; + + f32 exprnd = pow(Z2Calc::getRandom_0_1(), exponent); + return exprnd * magnitude; } /* 802A98D4-802A9944 2A4214 0070+00 1/1 1/1 0/0 .text getRandom_0_1__6Z2CalcFv */ -f32 Z2Calc::getRandom_0_1(void) { - static JMath::TRandom_fast_ oRandom(0); +f32 Z2Calc::getRandom_0_1() { + static JMath::TRandom_<JMath::TRandom_fast_> oRandom(0); return oRandom.get_ufloat_1(); } /* 802A9944-802A9958 2A4284 0014+00 0/0 1/1 0/0 .text setParam__Q26Z2Calc8FNoise1fFfff */ -void Z2Calc::FNoise1f::setParam(f32 param1, f32 param2, f32 param3) { - this->unk0 = param1; - this->unk4 = param1; - this->unk12 = param2; - this->unk8 = param3; +void Z2Calc::FNoise1f::setParam(f32 value, f32 threshold, f32 step) { + value_ = value; + targetValue_ = value; + threshold_ = threshold; + step_ = step; } /* 802A9958-802A99A0 2A4298 0048+00 1/1 0/0 0/0 .text tau__Q26Z2Calc8FNoise1fFf */ -f32 Z2Calc::FNoise1f::tau(f32 param1) { - f32 temp1; - f32 temp2; - - temp1 = param1; - temp2 = temp1 + (temp1 * temp1); - - if (temp2 > 1.0f) { - temp2 = temp2 - 1.0f; - - if (temp1 < this->unk12) { - temp2 = temp2 + this->unk12; +f32 Z2Calc::FNoise1f::tau(f32 input) { + f32 var_f30 = 1.0f; + + f32 result = input + (input * input); + if (result > var_f30) { + result = result - var_f30; + if (input < threshold_) { + result += threshold_; } + return result; + } - return temp2; - } else if (temp1 < this->unk12) { - temp2 = temp2 + this->unk12; + if (input < threshold_) { + result += threshold_; } - return temp2; + + return result; } /* 802A99A0-802A9A34 2A42E0 0094+00 0/0 5/5 0/0 .text calcNoise1f__Q26Z2Calc8FNoise1fFv */ -f32 Z2Calc::FNoise1f::calcNoise1f(void) { - f32 temp1; - f32 temp2; - - temp1 = this->unk0; - - if (this->unk0 < this->unk4) { - this->unk0 = temp1 + this->unk8; - - if (this->unk0 < this->unk4) { - return this->unk0; +f32 Z2Calc::FNoise1f::calcNoise1f() { + if (value_ < targetValue_) { + value_ += step_; + if (value_ < targetValue_) { + return value_; } } else { - this->unk0 = temp1 - this->unk8; - - if (this->unk0 > this->unk4) { - return this->unk0; + value_ -= step_; + if (value_ > targetValue_) { + return value_; } } - this->unk0 = this->unk4; - temp2 = tau(this->unk0); - this->unk4 = temp2; - return this->unk0; + value_ = targetValue_; + targetValue_ = tau(value_); + return value_; } |
