Sound Blaster ADPCM playback now counts the reference byte into the sample length. Fixes clicking/popping in Monster Bash.

This commit is contained in:
SarahW 2018-02-11 18:16:36 +00:00
commit 0e7c28261d

View file

@ -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;