mirror of
https://github.com/emu-russia/pureikyubu.git
synced 2025-04-02 10:42:15 -04:00
- Verified ADPCM decoder output in emulator - AX mixer volume envelope fixed (saturation) - Still buzzing sounds instead clear samples
100 lines
2.5 KiB
C++
100 lines
2.5 KiB
C++
#include "pch.h"
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
// Deploy Dsp Core
|
|
|
|
DSP::DspCore* core = new DSP::DspCore(nullptr);
|
|
assert(core);
|
|
|
|
// Init adpcm decoder
|
|
|
|
//core->Accel.AdpcmCoef[0] = 0x0136;
|
|
//core->Accel.AdpcmCoef[1] = 0xfe78;
|
|
//core->Accel.AdpcmCoef[2] = 0x06b2;
|
|
//core->Accel.AdpcmCoef[3] = 0xff09;
|
|
//core->Accel.AdpcmCoef[4] = 0x029f;
|
|
//core->Accel.AdpcmCoef[5] = 0x038d;
|
|
//core->Accel.AdpcmCoef[6] = 0x0a05;
|
|
//core->Accel.AdpcmCoef[7] = 0xfd47;
|
|
//core->Accel.AdpcmCoef[8] = 0x047d;
|
|
//core->Accel.AdpcmCoef[9] = 0xff11;
|
|
//core->Accel.AdpcmCoef[10] = 0x0742;
|
|
//core->Accel.AdpcmCoef[11] = 0x0005;
|
|
//core->Accel.AdpcmCoef[12] = 0x04ce;
|
|
//core->Accel.AdpcmCoef[13] = 0x02b7;
|
|
//core->Accel.AdpcmCoef[14] = 0x0c87;
|
|
//core->Accel.AdpcmCoef[15] = 0xfb49;
|
|
|
|
core->Accel.AdpcmCoef[0] = 0x00bf;
|
|
core->Accel.AdpcmCoef[1] = 0xffc8;
|
|
core->Accel.AdpcmCoef[2] = 0x0661;
|
|
core->Accel.AdpcmCoef[3] = 0xff43;
|
|
core->Accel.AdpcmCoef[4] = 0x02b9;
|
|
core->Accel.AdpcmCoef[5] = 0x037d;
|
|
core->Accel.AdpcmCoef[6] = 0x0a35;
|
|
core->Accel.AdpcmCoef[7] = 0xfd14;
|
|
|
|
core->Accel.AdpcmCoef[8] = 0x03ca;
|
|
core->Accel.AdpcmCoef[9] = 0x000e;
|
|
core->Accel.AdpcmCoef[10] = 0x0732;
|
|
core->Accel.AdpcmCoef[11] = 0x0018;
|
|
core->Accel.AdpcmCoef[12] = 0x0499;
|
|
core->Accel.AdpcmCoef[13] = 0x02ee;
|
|
core->Accel.AdpcmCoef[14] = 0x0cf9;
|
|
core->Accel.AdpcmCoef[15] = 0xfad5;
|
|
|
|
core->Accel.AdpcmGan = 0;
|
|
core->Accel.AdpcmYn1 = 0;
|
|
core->Accel.AdpcmYn2 = 0;
|
|
|
|
// Load Adpcm buffer
|
|
|
|
size_t adpcmDataSize = 0;
|
|
|
|
uint8_t* adpcmData = (uint8_t *)UI::FileLoad(argv[1], &adpcmDataSize);
|
|
assert(adpcmData);
|
|
|
|
// Create output file
|
|
|
|
FILE* out;
|
|
|
|
fopen_s(&out, "out.bin", "wb");
|
|
assert(out);
|
|
|
|
// Decode
|
|
|
|
uint8_t* ptr = adpcmData;
|
|
size_t byteCounter = 0;
|
|
|
|
while (adpcmDataSize != 0)
|
|
{
|
|
uint16_t pcmSample = 0;
|
|
|
|
uint8_t nextByte = *ptr++;
|
|
|
|
if (byteCounter == 0)
|
|
{
|
|
core->Accel.AdpcmPds = nextByte;
|
|
}
|
|
else
|
|
{
|
|
pcmSample = _byteswap_ushort(core->DecodeAdpcm(nextByte >> 4));
|
|
fwrite(&pcmSample, 1, sizeof(uint16_t), out);
|
|
|
|
pcmSample = _byteswap_ushort(core->DecodeAdpcm(nextByte & 0xf));
|
|
fwrite(&pcmSample, 1, sizeof(uint16_t), out);
|
|
}
|
|
|
|
adpcmDataSize--;
|
|
byteCounter++;
|
|
if (byteCounter >= 8)
|
|
{
|
|
byteCounter = 0;
|
|
}
|
|
}
|
|
|
|
fclose(out);
|
|
free(adpcmData);
|
|
delete core;
|
|
}
|