diff --git a/src/include/86box/snd_ad1848.h b/src/include/86box/snd_ad1848.h index 34693c675..0656e4d02 100644 --- a/src/include/86box/snd_ad1848.h +++ b/src/include/86box/snd_ad1848.h @@ -97,7 +97,7 @@ extern void ad1848_update(ad1848_t *ad1848); extern void ad1848_speed_changed(ad1848_t *ad1848); extern void ad1848_set_cd_audio_channel(void *priv, int channel); extern void ad1848_filter_cd_audio(int channel, double *buffer, void *priv); -extern void ad1848_filter_aux2(void* priv, double* out_l, double* out_r); +extern void ad1848_filter_channel(void* priv, int channel, double* out_l, double* out_r); extern void ad1848_init(ad1848_t *ad1848, uint8_t type); diff --git a/src/sound/snd_ad1848.c b/src/sound/snd_ad1848.c index 13baca4ab..d721691d5 100644 --- a/src/sound/snd_ad1848.c +++ b/src/sound/snd_ad1848.c @@ -770,20 +770,24 @@ ad1848_filter_cd_audio(int channel, double *buffer, void *priv) } void -ad1848_filter_aux2(void *priv, double *out_l, double *out_r) +ad1848_filter_channel(void *priv, int channel, double *out_l, double *out_r) { const ad1848_t *ad1848 = (ad1848_t *) priv; - if (ad1848->regs[4] & 0x80) { + const int max_channel = (ad1848->type >= AD1848_TYPE_CS4231) ? 31 : 15; + if (channel > max_channel) + channel = max_channel; + + if (ad1848->regs[channel] & 0x80) { *out_l = 0.0; } else { - *out_l = ((*out_l) * ad1848_vols_5bits_aux_gain[ad1848->regs[4] & 0x1f]) / 65536.0; + *out_l = ((*out_l) * ad1848_vols_5bits_aux_gain[ad1848->regs[channel] & 0x1f]) / 65536.0; } - if (ad1848->regs[5] & 0x80) { + if (ad1848->regs[channel + 1] & 0x80) { *out_r = 0.0; } else { - *out_r = ((*out_r) * ad1848_vols_5bits_aux_gain[ad1848->regs[5] & 0x1f]) / 65536.0; + *out_r = ((*out_r) * ad1848_vols_5bits_aux_gain[ad1848->regs[channel + 1] & 0x1f]) / 65536.0; } } diff --git a/src/sound/snd_optimc.c b/src/sound/snd_optimc.c index 7d1759cfe..274bbd568 100644 --- a/src/sound/snd_optimc.c +++ b/src/sound/snd_optimc.c @@ -85,7 +85,7 @@ optimc_filter_opl(void *priv, double *out_l, double *out_r) if (optimc->cur_wss_enabled) { *out_l /= optimc->sb->mixer_sbpro.fm_l; *out_r /= optimc->sb->mixer_sbpro.fm_r; - ad1848_filter_aux2((void *) &optimc->ad1848, out_l, out_r); + ad1848_filter_channel((void *) &optimc->ad1848, AD1848_AUX2, out_l, out_r); } }