mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-08-03 16:15:36 +00:00
55 lines
3.6 KiB
C
55 lines
3.6 KiB
C
#include "musyx/musyx_priv.h"
|
|
|
|
extern SynthInfo synthInfo;
|
|
|
|
static float toneup_tab[128] = {
|
|
1.000000, 1.059464, 1.122462, 1.189207, 1.259921, 1.334840, 1.414214, 1.498307, 1.587401, 1.681793,
|
|
1.781798, 1.887749, 2.000001, 2.118927, 2.244925, 2.378415, 2.519843, 2.669681, 2.828428, 2.996615,
|
|
3.174804, 3.363587, 3.563597, 3.775498, 4.000002, 4.237854, 4.489850, 4.756830, 5.039686, 5.339362,
|
|
5.656857, 5.993231, 6.349607, 6.727175, 7.127193, 7.550998, 8.000004, 8.475709, 8.979701, 9.513661,
|
|
10.079373, 10.678724, 11.313714, 11.986463, 12.699215, 13.454350, 14.254387, 15.101996, 16.000008, 16.951418,
|
|
17.959402, 19.027323, 20.158747, 21.357449, 22.627428, 23.972925, 25.398430, 26.908699, 28.508774, 30.203993,
|
|
32.000015, 33.902836, 35.918804, 38.054646, 40.317493, 42.714897, 45.254856, 47.945850, 50.796860, 53.817398,
|
|
57.017548, 60.407986, 64.000031, 67.805672, 71.837608, 76.109291, 80.634987, 85.429794, 90.509712, 95.891701,
|
|
101.593719, 107.634796, 114.035095, 120.815971, 128.000061, 135.611343, 143.675217, 152.218582, 161.269974, 170.859589,
|
|
181.019424, 191.783401, 203.187439, 215.269592, 228.070190, 241.631943, 256.000122, 271.222687, 287.350433, 304.437164,
|
|
322.539948, 341.719177, 362.038849, 383.566803, 406.374878, 430.539185, 456.140381, 483.263885, 512.000244, 542.445374,
|
|
574.700867, 608.874329, 645.079895, 683.438354, 724.077698, 767.133606, 812.749756, 861.078369, 912.280762, 966.527771,
|
|
1024.000488, 1084.890747, 1149.401733, 1217.748657, 1290.159790, 1366.876709, 1448.155396, 1534.267212,
|
|
};
|
|
static float tonedown_tab[128] = {
|
|
1.000000, 0.943874, 0.890899, 0.840897, 0.793700, 0.749153, 0.707107, 0.667419, 0.629960, 0.594604, 0.561231, 0.529732, 0.500000,
|
|
0.471937, 0.445449, 0.420448, 0.396851, 0.374577, 0.353553, 0.333710, 0.314981, 0.297301, 0.280616, 0.264866, 0.250000, 0.235969,
|
|
0.222725, 0.210224, 0.198425, 0.187288, 0.176777, 0.166855, 0.157490, 0.148651, 0.140307, 0.132433, 0.125000, 0.117984, 0.111362,
|
|
0.105112, 0.099213, 0.093644, 0.088388, 0.083427, 0.078745, 0.074326, 0.070154, 0.066216, 0.062500, 0.058992, 0.055681, 0.052556,
|
|
0.049606, 0.046823, 0.044194, 0.041714, 0.039372, 0.037163, 0.035077, 0.033108, 0.031250, 0.029496, 0.027841, 0.026278, 0.024803,
|
|
0.023411, 0.022097, 0.020857, 0.019687, 0.018581, 0.017538, 0.016554, 0.015625, 0.014748, 0.013920, 0.013139, 0.012402, 0.011705,
|
|
0.011048, 0.010428, 0.009843, 0.009291, 0.008769, 0.008277, 0.007812, 0.007374, 0.006960, 0.006570, 0.006201, 0.005853, 0.005525,
|
|
0.005215, 0.004922, 0.004645, 0.004385, 0.004139, 0.003906, 0.003687, 0.003480, 0.003284, 0.003100, 0.002927, 0.002762, 0.002607,
|
|
0.002460, 0.002322, 0.002192, 0.002069, 0.001953, 0.001843, 0.001740, 0.001642, 0.001550, 0.001463, 0.001381, 0.001304, 0.001230,
|
|
0.001162, 0.001096, 0.001035, 0.000977, 0.000922, 0.000870, 0.000821, 0.000775, 0.000731, 0.000690, 0.000651,
|
|
};
|
|
|
|
s32 sndPitchUpOne(u16 note) { return note * 1.059463f; }
|
|
|
|
/* non-matching https://decomp.me/scratch/6pRdi */
|
|
u32 sndGetPitch(u8 arg0, u32 arg1) {
|
|
f32 var_f0;
|
|
float scale;
|
|
u32 temp_r6;
|
|
float freq;
|
|
|
|
if (arg1 == 0xFFFFFFFF) {
|
|
arg1 = 0x40005622;
|
|
}
|
|
scale = 4096.f;
|
|
temp_r6 = (arg1 >> 0x18U);
|
|
if (arg0 != temp_r6) {
|
|
var_f0 = (f32)((arg1 & 0xFFFFFF) * (temp_r6 < arg0 ? toneup_tab[(arg0 - temp_r6)] : tonedown_tab[temp_r6 - arg0]));
|
|
} else {
|
|
var_f0 = (f32)(arg1 & 0xFFFFFF);
|
|
}
|
|
scale *= var_f0;
|
|
return (u32)(scale / synthInfo.freq);
|
|
}
|