Moved OPL2 and OPL3 to a new 49716 Hz source so resampling is no longer needed, also fixed SB OPL and PC Speaker filtering (OPL was being downsampled to the selected DSP sample rate, which is incorrect, and the PC Speaker filter was using the wrong filter index in some liens).

This commit is contained in:
OBattler
2024-03-01 06:52:48 +01:00
parent 71ecdc1b55
commit e0d80aefb4
18 changed files with 683 additions and 193 deletions

View File

@@ -55,7 +55,8 @@
#define WRBUF_DELAY 1
#define RSM_FRAC 10
#define OPL_FREQ FREQ_48000
// #define OPL_FREQ FREQ_48000
#define OPL_FREQ FREQ_49716
// Channel types
enum {
@@ -189,7 +190,7 @@ typedef struct {
pc_timer_t timers[2];
int pos;
int32_t buffer[SOUNDBUFLEN * 2];
int32_t buffer[MUSICBUFLEN * 2];
} nuked_drv_t;
enum {
@@ -1381,11 +1382,20 @@ nuked_generate_resampled(nuked_t *dev, int32_t *bufp)
dev->samplecnt += 1 << RSM_FRAC;
}
void
nuked_generate_raw(nuked_t *dev, int32_t *bufp)
{
nuked_generate(dev, dev->samples);
bufp[0] = (int32_t) dev->samples[0];
bufp[1] = (int32_t) dev->samples[1];
}
void
nuked_generate_stream(nuked_t *dev, int32_t *sndptr, uint32_t num)
{
for (uint32_t i = 0; i < num; i++) {
nuked_generate_resampled(dev, sndptr);
nuked_generate_raw(dev, sndptr);
sndptr += 2;
}
}
@@ -1533,14 +1543,14 @@ nuked_drv_update(void *priv)
{
nuked_drv_t *dev = (nuked_drv_t *) priv;
if (dev->pos >= sound_pos_global)
if (dev->pos >= music_pos_global)
return dev->buffer;
nuked_generate_stream(&dev->opl,
&dev->buffer[dev->pos * 2],
sound_pos_global - dev->pos);
music_pos_global - dev->pos);
for (; dev->pos < sound_pos_global; dev->pos++) {
for (; dev->pos < music_pos_global; dev->pos++) {
dev->buffer[dev->pos * 2] /= 2;
dev->buffer[(dev->pos * 2) + 1] /= 2;
}