From 0e7c28261dd7aebc733ace435bbab606351ff642 Mon Sep 17 00:00:00 2001 From: SarahW Date: Sun, 11 Feb 2018 18:16:36 +0000 Subject: [PATCH] Sound Blaster ADPCM playback now counts the reference byte into the sample length. Fixes clicking/popping in Monster Bash. --- src/sound_sb_dsp.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/sound_sb_dsp.c b/src/sound_sb_dsp.c index fb1532a..5d1f30f 100644 --- a/src/sound_sb_dsp.c +++ b/src/sound_sb_dsp.c @@ -358,6 +358,8 @@ void sb_exec_command(sb_dsp_t *dsp) sb_start_dma(dsp, 1, 0, ADPCM_2, dsp->sb_data[0] + (dsp->sb_data[1] << 8)); dsp->sbdat2 = sb_8_read_dma(dsp); dsp->sb_8_length--; + if (dsp->sb_command == 0x17) + dsp->sb_8_length--; break; case 0x1C: /*8-bit autoinit DMA output*/ if (dsp->sb_type < SB15) break; @@ -420,6 +422,8 @@ void sb_exec_command(sb_dsp_t *dsp) sb_start_dma(dsp, 1, 0, ADPCM_4, dsp->sb_data[0] + (dsp->sb_data[1] << 8)); dsp->sbdat2 = sb_8_read_dma(dsp); dsp->sb_8_length--; + if (dsp->sb_command == 0x75) + dsp->sb_8_length--; break; case 0x77: /*2.6-bit ADPCM output with reference*/ dsp->sbref = sb_8_read_dma(dsp); @@ -429,6 +433,8 @@ void sb_exec_command(sb_dsp_t *dsp) sb_start_dma(dsp, 1, 0, ADPCM_26, dsp->sb_data[0] + (dsp->sb_data[1] << 8)); dsp->sbdat2 = sb_8_read_dma(dsp); dsp->sb_8_length--; + if (dsp->sb_command == 0x77) + dsp->sb_8_length--; break; case 0x7D: /*4-bit ADPCM autoinit output*/ if (dsp->sb_type < SB15) break;