Skip to content

Commit 0027a65

Browse files
committed
Volume scaling for bufferless_ng sbplay
1 parent 0b92610 commit 0027a65

File tree

3 files changed

+9
-8
lines changed

3 files changed

+9
-8
lines changed

sw/cdrom/cdrom.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,6 @@ uint32_t cdrom_audio_callback_simple(cdrom_t *dev, int16_t *buffer, uint32_t len
401401
/* printf("%u\n", samples_to_transfer); */
402402
// Add samples from sector buffer to FIFO
403403
//memcpy(buffer + samples_produced, &dev->current_sector_samples[dev->audio_sector_consumed_samples], samples_to_transfer * sizeof(int16_t));
404-
405404
for (uint32_t i = 0; i < samples_to_transfer; i++)
406405
{
407406
int32_t sample = dev->current_sector_samples[dev->audio_sector_consumed_samples + i];

sw/sbdsp.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <stdio.h>
44
#include <string.h>
55
#include "pico_pic.h"
6+
#include "volctrl.h"
67

78
/*
89
Title : SoundBlaster DSP Emulation
@@ -211,7 +212,7 @@ static uint32_t DSP_DMA_EventHandler(Bitu val) {
211212
static void sbdsp_dma_isr(void) {
212213
const uint32_t dma_data = DMA_Complete_Write(&dma_config);
213214
#ifdef SB_BUFFERLESS
214-
sbdsp.cur_sample = (int16_t)((dma_data & 0xFF) ^ 0x80) << 8;
215+
sbdsp.cur_sample = (int16_t)scale_sample(((dma_data & 0xFF) ^ 0x80) << 8, sb_volume, 0);
215216
#else
216217
sbdsp_fifo_rx(dma_data & 0xFF);
217218
#endif

sw/sbplay.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,10 @@ static audio_fifo_t opl_out_fifo;
102102

103103
static int16_t get_opl_sample()
104104
{
105-
int16_t opl_current_sample;
105+
int16_t opl_current_sample;
106106
OPL_Pico_simple(&opl_current_sample, 1);
107-
return opl_current_sample;
107+
opl_current_sample = scale_sample(opl_current_sample << 2, opl_volume, 0);
108+
return opl_current_sample;
108109
}
109110

110111
static Resampler<get_opl_sample> resampler;
@@ -130,16 +131,17 @@ void audio_sample_handler(void) {
130131

131132
#ifdef SOUND_SB
132133
uint32_t sb_sample = sbdsp_sample();
133-
sb_sample = scale_sample((int32_t)sb_sample >> 1, sb_volume, 1);
134134
sample_l = sample_r = sb_sample;
135135
#endif
136136

137137
#ifdef CDROM
138138
static uint32_t cd_index = 0;
139139
const uint32_t has_cd_samples = fifo_take_samples_inline(cd_fifo, 2);
140140
if (has_cd_samples) {
141-
sample_l += cd_fifo->buffer[cd_index++];
142-
sample_r += cd_fifo->buffer[cd_index++];
141+
sample_l += scale_sample(cd_fifo->buffer[cd_index++], cd_audio_volume, 0);
142+
sample_r += scale_sample(cd_fifo->buffer[cd_index++], cd_audio_volume, 0);
143+
// sample_l += cd_fifo->buffer[cd_index++];
144+
// sample_r += cd_fifo->buffer[cd_index++];
143145
cd_index &= AUDIO_FIFO_BITS;
144146
}
145147
#endif
@@ -148,7 +150,6 @@ void audio_sample_handler(void) {
148150
const uint32_t has_opl_samples = fifo_take_samples_inline(&opl_out_fifo, 1);
149151
if (has_opl_samples) {
150152
int16_t opl_sample = opl_out_fifo.buffer[opl_out_index++];
151-
opl_sample = scale_sample(opl_sample << 2, opl_volume, 0);
152153
sample_l += opl_sample;
153154
sample_r += opl_sample;
154155
opl_out_index &= AUDIO_FIFO_BITS;

0 commit comments

Comments
 (0)