mirror of
https://github.com/libretro/FBNeo.git
synced 2024-11-23 08:59:39 +00:00
snes, fix clicks in yuuyuuhakusho intro
This commit is contained in:
parent
7ef5c834b1
commit
51783fe38a
@ -29479,7 +29479,7 @@ struct BurnDriver BurnDrvsnes_Yuuyuuhakusho = {
|
|||||||
BDF_GAME_WORKING, 2, HARDWARE_SNES, GBF_VSFIGHT, 0,
|
BDF_GAME_WORKING, 2, HARDWARE_SNES, GBF_VSFIGHT, 0,
|
||||||
SNESGetZipName, snes_YuuyuuhakushoRomInfo, snes_YuuyuuhakushoRomName, NULL, NULL, NULL, NULL, SNESInputInfo, SNESDIPInfo,
|
SNESGetZipName, snes_YuuyuuhakushoRomInfo, snes_YuuyuuhakushoRomName, NULL, NULL, NULL, NULL, SNESInputInfo, SNESDIPInfo,
|
||||||
DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x8000,
|
DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x8000,
|
||||||
512, 480, 4, 3
|
512, 448, 4, 3
|
||||||
};
|
};
|
||||||
|
|
||||||
// Yuu Yuu Hakusho Final - Makai Saikyou Retsuden
|
// Yuu Yuu Hakusho Final - Makai Saikyou Retsuden
|
||||||
|
@ -135,6 +135,7 @@ void dsp_reset(Dsp* dsp) {
|
|||||||
memset(dsp->firBufferR, 0, sizeof(dsp->firBufferR));
|
memset(dsp->firBufferR, 0, sizeof(dsp->firBufferR));
|
||||||
memset(dsp->sampleBuffer, 0, sizeof(dsp->sampleBuffer));
|
memset(dsp->sampleBuffer, 0, sizeof(dsp->sampleBuffer));
|
||||||
dsp->sampleOffset = 0;
|
dsp->sampleOffset = 0;
|
||||||
|
dsp->sampleCount = 0;
|
||||||
dsp->lastFrameBoundary = 0;
|
dsp->lastFrameBoundary = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,6 +187,7 @@ void dsp_handleState(Dsp* dsp, StateHandler* sh) {
|
|||||||
}
|
}
|
||||||
sh_handleByteArray(sh, dsp->ram, 0x80);
|
sh_handleByteArray(sh, dsp->ram, 0x80);
|
||||||
// sh_handleByteArray(sh, (UINT8*)&dsp->sampleBuffer[0], 0x800*2*2);
|
// sh_handleByteArray(sh, (UINT8*)&dsp->sampleBuffer[0], 0x800*2*2);
|
||||||
|
// sh_handleInts(sh, dsp->sampleCount, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dsp_cycle(Dsp* dsp) {
|
void dsp_cycle(Dsp* dsp) {
|
||||||
@ -207,8 +209,9 @@ void dsp_cycle(Dsp* dsp) {
|
|||||||
}
|
}
|
||||||
if (bBurnRunAheadFrame == 0) {
|
if (bBurnRunAheadFrame == 0) {
|
||||||
// put final sample in the samplebuffer
|
// put final sample in the samplebuffer
|
||||||
dsp->sampleBuffer[(dsp->sampleOffset & 0x7ff) * 2] = dsp->sampleOutL;
|
dsp->sampleBuffer[(dsp->sampleOffset & 0x7ff) * 2 + 0] = dsp->sampleOutL;
|
||||||
dsp->sampleBuffer[(dsp->sampleOffset++ & 0x7ff) * 2 + 1] = dsp->sampleOutR;
|
dsp->sampleBuffer[(dsp->sampleOffset++ & 0x7ff) * 2 + 1] = dsp->sampleOutR;
|
||||||
|
dsp->sampleCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static int clamp16(int val) {
|
static int clamp16(int val) {
|
||||||
@ -590,11 +593,12 @@ void dsp_write(Dsp* dsp, uint8_t adr, uint8_t val) {
|
|||||||
|
|
||||||
void dsp_getSamples(Dsp* dsp, int16_t* sampleData, int samplesPerFrame) {
|
void dsp_getSamples(Dsp* dsp, int16_t* sampleData, int samplesPerFrame) {
|
||||||
// resample from 534 / 641 samples per frame to wanted value
|
// resample from 534 / 641 samples per frame to wanted value
|
||||||
float wantedSamples = (dsp->apu->snes->palTiming ? 641.0 : 534.0);
|
float wantedSamples = dsp->sampleCount; // (dsp->apu->snes->palTiming ? 641.0 : 534.0);
|
||||||
|
dsp->sampleCount = 0;
|
||||||
double adder = wantedSamples / samplesPerFrame;
|
double adder = wantedSamples / samplesPerFrame;
|
||||||
double location = dsp->lastFrameBoundary - wantedSamples;
|
double location = dsp->lastFrameBoundary - wantedSamples;
|
||||||
for(int i = 0; i < samplesPerFrame; i++) {
|
for(int i = 0; i < samplesPerFrame; i++) {
|
||||||
sampleData[i * 2] = dsp->sampleBuffer[(((int) location) & 0x7ff) * 2];
|
sampleData[i * 2 + 0] = dsp->sampleBuffer[(((int) location) & 0x7ff) * 2 + 0];
|
||||||
sampleData[i * 2 + 1] = dsp->sampleBuffer[(((int) location) & 0x7ff) * 2 + 1];
|
sampleData[i * 2 + 1] = dsp->sampleBuffer[(((int) location) & 0x7ff) * 2 + 1];
|
||||||
location += adder;
|
location += adder;
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,7 @@ struct Dsp {
|
|||||||
// sample ring buffer (2048 samples, *2 for stereo)
|
// sample ring buffer (2048 samples, *2 for stereo)
|
||||||
int16_t sampleBuffer[0x800 * 2];
|
int16_t sampleBuffer[0x800 * 2];
|
||||||
uint16_t sampleOffset; // current offset in samplebuffer
|
uint16_t sampleOffset; // current offset in samplebuffer
|
||||||
|
uint32_t sampleCount; // samples generated since last render
|
||||||
uint16_t lastFrameBoundary;
|
uint16_t lastFrameBoundary;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user