JASPlayer_impl

This commit is contained in:
Jcw87
2023-10-29 15:10:44 -07:00
parent 55adb20bcf
commit c3f8d78bc4
4 changed files with 176 additions and 11 deletions
+1 -1
View File
@@ -664,7 +664,7 @@ config.libs = [
Object(Matching, "JSystem/JAudio/JASSystemHeap.cpp"),
Object(NonMatching, "JSystem/JAudio/JASNoteMgr.cpp"),
Object(NonMatching, "JSystem/JAudio/JASOuterParam.cpp"),
Object(NonMatching, "JSystem/JAudio/JASPlayer_impl.cpp"),
Object(Matching, "JSystem/JAudio/JASPlayer_impl.cpp"),
Object(Matching, "JSystem/JAudio/JASRegisterParam.cpp"),
Object(NonMatching, "JSystem/JAudio/JASSeqCtrl.cpp"),
Object(NonMatching, "JSystem/JAudio/JASSeqParser.cpp"),
+2 -2
View File
@@ -9,8 +9,8 @@ namespace JASystem {
struct Osc_ {
/* 0x00 */ u8 field_0x0;
/* 0x04 */ f32 field_0x4;
/* 0x08 */ u32 table;
/* 0x0C */ int rel_table;
/* 0x08 */ void* table;
/* 0x0C */ void* rel_table;
/* 0x10 */ f32 field_0x10;
/* 0x14 */ f32 field_0x14;
};
+26
View File
@@ -0,0 +1,26 @@
#ifndef JASPLAYER_H
#define JASPLAYER_H
#include "JSystem/JAudio/JASOscillator.h"
#include "dolphin/types.h"
namespace JASystem {
namespace Player {
s16 extend8to16(u8 param_1);
f32 pitchToCent(f32 param_1, f32 param_2);
s32 getRandomS32();
extern const f32 s_key_table[];
extern const TOscillator::Osc_ sAdsrDef;
extern const TOscillator::Osc_ sEnvelopeDef;
extern const TOscillator::Osc_ sVibratoDef;
extern const TOscillator::Osc_ sTremoroDef;
extern s16 CUTOFF_TO_IIR_TABLE[];
extern s16 sAdsTable[];
extern s16 sRelTable[];
extern s16 sVibTable[];
extern s16 sTreTable[];
}
}
#endif /* JASPLAYER_H */
+147 -8
View File
@@ -3,21 +3,160 @@
// Translation Unit: JASPlayer_impl.cpp
//
#include "JASPlayer_impl.h"
#include "dolphin/types.h"
#include "JSystem/JAudio/JASPlayer.h"
#include "JSystem/JAudio/JASDriverTables.h"
/* 8027E170-8027E190 .text extend8to16__Q28JASystem6PlayerFUc */
void JASystem::Player::extend8to16(unsigned char) {
/* Nonmatching */
s16 JASystem::Player::extend8to16(u8 param_1) {
s16 var1 = param_1;
if (param_1 & 0x80) {
var1 += 0xFF00;
}
return var1;
}
const f32 JASystem::Player::s_key_table[] = {
1.000000, 1.000910, 1.001821, 1.002733,
1.003645, 1.004559, 1.005473, 1.006388,
1.007304, 1.008220, 1.009138, 1.010056,
1.010975, 1.011896, 1.012816, 1.013738,
1.014661, 1.015584, 1.016508, 1.017433,
1.018359, 1.019286, 1.020214, 1.021142,
1.022071, 1.023002, 1.023933, 1.024864,
1.025797, 1.026731, 1.027665, 1.028600,
1.029536, 1.030473, 1.031411, 1.032350,
1.033289, 1.034230, 1.035171, 1.036113,
1.037056, 1.038000, 1.038944, 1.039890,
1.040836, 1.041783, 1.042731, 1.043680,
1.044630, 1.045581, 1.046532, 1.047485,
1.048438, 1.049392, 1.050347, 1.051303,
1.052260, 1.053217, 1.054176, 1.055135,
1.056095, 1.057056, 1.058018, 1.058981,
};
/* 8027E190-8027E250 .text pitchToCent__Q28JASystem6PlayerFff */
void JASystem::Player::pitchToCent(float, float) {
/* Nonmatching */
f32 JASystem::Player::pitchToCent(f32 param_1, f32 param_2) {
f32 var1 = param_1 * 4.0f * param_2;
s16 var3 = var1;
f32 var2 = var1 - var3;
if (var1 < 0.0f && var2 != 0.0f) {
var2 += 1.0f;
var3 -= 1;
}
if (var2 >= 1.0f) {
var2 -= 1.0f;
var3 += 1;
}
return s_key_table[u16(var2 * 64.0f)] * Driver::C5BASE_PITCHTABLE[var3 + 0x3c];
}
/* 8027E250-8027E2C0 .text getRandomS32__Q28JASystem6PlayerFv */
void JASystem::Player::getRandomS32() {
/* Nonmatching */
s32 JASystem::Player::getRandomS32() {
static s32 sV0 = 0x1000;
static s32 sV1 = 0x5555;
s32 result = sV1 * -0x6789abce + 1 + (sV0 * 0x13579bde >> 4);
sV0 = sV1;
sV1 = result;
return result;
}
const JASystem::TOscillator::Osc_ JASystem::Player::sAdsrDef = {
0, 1.0f, NULL, NULL, 1.0f, 0.0f
};
const JASystem::TOscillator::Osc_ JASystem::Player::sEnvelopeDef = {
0, 1.0f, NULL, &sRelTable, 1.0f, 0.0f
};
const JASystem::TOscillator::Osc_ JASystem::Player::sVibratoDef = {
1, 0.5f, &sVibTable, &sVibTable, 0.0f, 1.0f
};
const JASystem::TOscillator::Osc_ JASystem::Player::sTremoroDef = {
0, 0.5f, &sTreTable, &sTreTable, 0.0f, 1.0f
};
s16 JASystem::Player::CUTOFF_TO_IIR_TABLE[] = {
0x0F5C, 0x0A3D, 0x4665, 0x3999, 0x103F, 0x0A28, 0x45D7, 0x3925,
0x1122, 0x0A14, 0x454A, 0x38B0, 0x1205, 0x09FF, 0x44BC, 0x383C,
0x12E8, 0x09EA, 0x442E, 0x37C8, 0x13CB, 0x09D6, 0x43A0, 0x3754,
0x14AE, 0x09C1, 0x4312, 0x36E0, 0x1591, 0x09AC, 0x4284, 0x366C,
0x1674, 0x0998, 0x41F6, 0x35F8, 0x1757, 0x0983, 0x4168, 0x3584,
0x183A, 0x096E, 0x40DA, 0x3510, 0x191D, 0x095A, 0x404C, 0x349C,
0x1A00, 0x0945, 0x3FBE, 0x3427, 0x1AE3, 0x0931, 0x3F31, 0x33B3,
0x1BC6, 0x091C, 0x3EA3, 0x333F, 0x1CA9, 0x0907, 0x3E15, 0x32CB,
0x1D8C, 0x08F3, 0x3D87, 0x3257, 0x1E6F, 0x08DE, 0x3CF9, 0x31E3,
0x1F52, 0x08C9, 0x3C6B, 0x316F, 0x2035, 0x08B5, 0x3BDD, 0x30FB,
0x2118, 0x08A0, 0x3B4F, 0x3087, 0x21FC, 0x088B, 0x3AC1, 0x3012,
0x22DF, 0x0877, 0x3A33, 0x2F9E, 0x23C2, 0x0862, 0x39A6, 0x2F2A,
0x24A5, 0x084D, 0x3918, 0x2EB6, 0x2588, 0x0839, 0x388A, 0x2E42,
0x266B, 0x0824, 0x37FC, 0x2DCE, 0x274E, 0x0810, 0x376E, 0x2D5A,
0x2831, 0x07FB, 0x36E0, 0x2CE6, 0x2914, 0x07E6, 0x3652, 0x2C72,
0x29F7, 0x07D2, 0x35C4, 0x2BFE, 0x2ADA, 0x07BD, 0x3536, 0x2B89,
0x2BBD, 0x07A8, 0x34A8, 0x2B15, 0x2CA0, 0x0794, 0x341B, 0x2AA1,
0x2D83, 0x077F, 0x338D, 0x2A2D, 0x2E66, 0x076A, 0x32FF, 0x29B9,
0x2F49, 0x0756, 0x3271, 0x2945, 0x302C, 0x0741, 0x31E3, 0x28D1,
0x310F, 0x072D, 0x3155, 0x285D, 0x31F2, 0x0718, 0x30C7, 0x27E9,
0x32D5, 0x0703, 0x3039, 0x2775, 0x33B8, 0x06EF, 0x2FAB, 0x2700,
0x349C, 0x06DA, 0x2F1D, 0x268C, 0x357F, 0x06C5, 0x2E8F, 0x2618,
0x3662, 0x06B1, 0x2E02, 0x25A4, 0x3745, 0x069C, 0x2D74, 0x2530,
0x3828, 0x0687, 0x2CE6, 0x24BC, 0x390B, 0x0673, 0x2C58, 0x2448,
0x39EE, 0x065E, 0x2BCA, 0x23D4, 0x3AD1, 0x0649, 0x2B3C, 0x2360,
0x3BB4, 0x0635, 0x2AAE, 0x22EB, 0x3C97, 0x0620, 0x2A20, 0x2277,
0x3D7A, 0x060C, 0x2992, 0x2203, 0x3E5D, 0x05F7, 0x2904, 0x218F,
0x3F40, 0x05E2, 0x2877, 0x211B, 0x4023, 0x05CE, 0x27E9, 0x20A7,
0x4106, 0x05B9, 0x275B, 0x2033, 0x41E9, 0x05A4, 0x26CD, 0x1FBF,
0x42CC, 0x0590, 0x263F, 0x1F4B, 0x43AF, 0x057B, 0x25B1, 0x1ED7,
0x4492, 0x0566, 0x2523, 0x1E62, 0x4575, 0x0552, 0x2495, 0x1DEE,
0x4658, 0x053D, 0x2407, 0x1D7A, 0x473B, 0x0529, 0x2379, 0x1D06,
0x481F, 0x0514, 0x22EB, 0x1C92, 0x4902, 0x04FF, 0x225E, 0x1C1E,
0x49E5, 0x04EB, 0x21D0, 0x1BAA, 0x4AC8, 0x04D6, 0x2142, 0x1B36,
0x4BAB, 0x04C1, 0x20B4, 0x1AC2, 0x4C8E, 0x04AD, 0x2026, 0x1A4E,
0x4D71, 0x0498, 0x1F98, 0x19D9, 0x4E54, 0x0483, 0x1F0A, 0x1965,
0x4F37, 0x046F, 0x1E7C, 0x18F1, 0x501A, 0x045A, 0x1DEE, 0x187D,
0x50FD, 0x0445, 0x1D60, 0x1809, 0x51E0, 0x0431, 0x1CD3, 0x1795,
0x52C3, 0x041C, 0x1C45, 0x1721, 0x53A6, 0x0408, 0x1BB7, 0x16AD,
0x5489, 0x03F3, 0x1B29, 0x1639, 0x556C, 0x03DE, 0x1A9B, 0x15C4,
0x564F, 0x03CA, 0x1A0D, 0x1550, 0x5732, 0x03B5, 0x197F, 0x14DC,
0x5815, 0x03A0, 0x18F1, 0x1468, 0x58F8, 0x038C, 0x1863, 0x13F4,
0x59DB, 0x0377, 0x17D5, 0x1380, 0x5ABF, 0x0362, 0x1747, 0x130C,
0x5BA2, 0x034E, 0x16BA, 0x1298, 0x5C85, 0x0339, 0x162C, 0x1224,
0x5D68, 0x0324, 0x159E, 0x11B0, 0x5E4B, 0x0310, 0x1510, 0x113B,
0x5F2E, 0x02FB, 0x1482, 0x10C7, 0x6011, 0x02E7, 0x13F4, 0x1053,
0x60F4, 0x02D2, 0x1366, 0x0FDF, 0x61D7, 0x02BD, 0x12D8, 0x0F6B,
0x62BA, 0x02A9, 0x124A, 0x0EF7, 0x639D, 0x0294, 0x11BC, 0x0E83,
0x6480, 0x027F, 0x112F, 0x0E0F, 0x6563, 0x026B, 0x10A1, 0x0D9B,
0x6646, 0x0256, 0x1013, 0x0D27, 0x6729, 0x0241, 0x0F85, 0x0CB2,
0x680C, 0x022D, 0x0EF7, 0x0C3E, 0x68EF, 0x0218, 0x0E69, 0x0BCA,
0x69D2, 0x0204, 0x0DDB, 0x0B56, 0x6AB5, 0x01EF, 0x0D4D, 0x0AE2,
0x6B98, 0x01DA, 0x0CBF, 0x0A6E, 0x6C7B, 0x01C6, 0x0C31, 0x09FA,
0x6D5F, 0x01B1, 0x0BA3, 0x0986, 0x6E42, 0x019C, 0x0B16, 0x0912,
0x6F25, 0x0188, 0x0A88, 0x089D, 0x7008, 0x0173, 0x09FA, 0x0829,
0x70EB, 0x015E, 0x096C, 0x07B5, 0x71CE, 0x014A, 0x08DE, 0x0741,
0x72B1, 0x0135, 0x0850, 0x06CD, 0x7394, 0x0120, 0x07C2, 0x0659,
0x7477, 0x010C, 0x0734, 0x05E5, 0x755A, 0x00F7, 0x06A6, 0x0571,
0x763D, 0x00E3, 0x0618, 0x04FD, 0x7720, 0x00CE, 0x058B, 0x0489,
0x7803, 0x00B9, 0x04FD, 0x0414, 0x78E6, 0x00A5, 0x046F, 0x03A0,
0x79C9, 0x0090, 0x03E1, 0x032C, 0x7AAC, 0x007B, 0x0353, 0x02B8,
0x7B8F, 0x0067, 0x02C5, 0x0244, 0x7C72, 0x0052, 0x0237, 0x01D0,
0x7D55, 0x003D, 0x01A9, 0x015C, 0x7E38, 0x0029, 0x011B, 0x00E8,
0x7F1B, 0x0014, 0x008D, 0x0074, 0x7FFF, 0x0000, 0x0000, 0x0000,
};
s16 JASystem::Player::sAdsTable[] = {
0x0000, 0x0000, 0x7FFF, 0x0000,
0x0000, 0x7FFF, 0x0000, 0x0000,
0x0000, 0x000E, 0x0000, 0x0000,
};
s16 JASystem::Player::sRelTable[] = {
0, 10, 0, 15, 1, 0
};
s16 JASystem::Player::sVibTable[] = {
0, 0, 0, 0, 12, 0x7FFF, 0, 12, 0, 0, 12, 0xC000, 0, 12, 0, 13, 0, 1
};
s16 JASystem::Player::sTreTable[] = {
0, 0, 0x7FFF, 0, 20, 0, 0, 20, 0x8001, 0, 20, 0, 0, 20, 0x7FFF, 13, 0, 1
};