This commit is contained in:
arbee 2020-09-20 22:43:15 -04:00
commit f6652e9dfb
39 changed files with 132 additions and 191 deletions

View File

@ -929,11 +929,10 @@ void tms57002_device::sound_stream_update(sound_stream &stream, std::vector<read
si[2] = s32(inputs[2].get(0) * in_scale) & 0xffffff;
si[3] = s32(inputs[3].get(0) * in_scale) & 0xffffff;
stream_buffer::sample_t out_scale = 1.0 / (32768.0 * 65536.0);
outputs[0].put(0, stream_buffer::sample_t(s32(so[0] << 8)) * out_scale);
outputs[1].put(0, stream_buffer::sample_t(s32(so[1] << 8)) * out_scale);
outputs[2].put(0, stream_buffer::sample_t(s32(so[2] << 8)) * out_scale);
outputs[3].put(0, stream_buffer::sample_t(s32(so[3] << 8)) * out_scale);
outputs[0].put_int(0, s32(so[0] << 8) >> 1, 32768 * 32768);
outputs[1].put_int(0, s32(so[1] << 8) >> 1, 32768 * 32768);
outputs[2].put_int(0, s32(so[2] << 8) >> 1, 32768 * 32768);
outputs[3].put_int(0, s32(so[3] << 8) >> 1, 32768 * 32768);
sync_w(1);
}

View File

@ -1233,7 +1233,6 @@ void aica_device::DoMasterSamples(std::vector<read_stream_view> const &inputs, w
{
int i;
constexpr stream_buffer::sample_t sample_scale = 1.0 / stream_buffer::sample_t(32768 << SHIFT);
for (int s = 0; s < bufl.samples(); ++s)
{
s32 smpl = 0, smpr = 0;
@ -1293,8 +1292,8 @@ void aica_device::DoMasterSamples(std::vector<read_stream_view> const &inputs, w
smpr = clip16(smpr >> 3);
}
bufl.put(s, stream_buffer::sample_t(smpl * m_LPANTABLE[MVOL() << 0xd]) * sample_scale);
bufr.put(s, stream_buffer::sample_t(smpr * m_LPANTABLE[MVOL() << 0xd]) * sample_scale);
bufl.put_int(s, smpl * m_LPANTABLE[MVOL() << 0xd], 32768 << SHIFT);
bufr.put_int(s, smpr * m_LPANTABLE[MVOL() << 0xd], 32768 << SHIFT);
}
}

View File

@ -148,7 +148,6 @@ void asc_device::sound_stream_update(sound_stream &stream, std::vector<read_stre
case 1: // FIFO mode
{
constexpr stream_buffer::sample_t sample_scale = 64.0 / 32768.0;
for (i = 0; i < outL.samples(); i++)
{
int8_t smpll, smplr;
@ -234,15 +233,14 @@ void asc_device::sound_stream_update(sound_stream &stream, std::vector<read_stre
break;
}
outL.put(i, stream_buffer::sample_t(smpll) * sample_scale);
outR.put(i, stream_buffer::sample_t(smplr) * sample_scale);
outL.put_int(i, smpll, 32768 / 64);
outR.put_int(i, smplr, 32768 / 64);
}
break;
}
case 2: // wavetable mode
{
constexpr stream_buffer::sample_t sample_scale = 1.0 / (32768.0 * 4.0);
for (i = 0; i < outL.samples(); i++)
{
int32_t mixL, mixR;
@ -269,8 +267,8 @@ void asc_device::sound_stream_update(sound_stream &stream, std::vector<read_stre
mixR += smpl*256;
}
outL.put(i, stream_buffer::sample_t(mixL) * sample_scale);
outR.put(i, stream_buffer::sample_t(mixR) * sample_scale);
outL.put_int(i, mixL, 32768 * 4);
outR.put_int(i, mixR, 32768 * 4);
}
break;
}

View File

@ -93,13 +93,12 @@ void awacs_device::sound_stream_update(sound_stream &stream, std::vector<read_st
auto &outL = outputs[0];
auto &outR = outputs[1];
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
if (m_playback_enable)
{
for (int i = 0; i < outL.samples(); i++)
{
outL.put(i, stream_buffer::sample_t(s16(m_dma_space->read_word(offset + m_play_ptr))) * sample_scale);
outR.put(i, stream_buffer::sample_t(s16(m_dma_space->read_word(offset + m_play_ptr + 2))) * sample_scale);
outL.put_int(i, s16(m_dma_space->read_word(offset + m_play_ptr)), 32768);
outR.put_int(i, s16(m_dma_space->read_word(offset + m_play_ptr + 2)), 32768);
m_play_ptr += 4;
}

View File

@ -77,12 +77,6 @@ DEFINE_DEVICE_TYPE(C219, c219_device, "c219", "Namco C219")
// LIVE DEVICE
//**************************************************************************
static inline stream_buffer::sample_t limit(stream_buffer::sample_t in)
{
return std::max(-1.0f, std::min(1.0f, in));
}
//-------------------------------------------------
// c140_device - constructor
//-------------------------------------------------
@ -326,15 +320,10 @@ void c140_device::sound_stream_update(sound_stream &stream, std::vector<read_str
{
auto &dest1 = outputs[0];
auto &dest2 = outputs[1];
constexpr stream_buffer::sample_t sample_scale = 8.0 / 32768.0;
for (int i = 0; i < samples; i++)
{
stream_buffer::sample_t val;
val = stream_buffer::sample_t(*lmix++) * sample_scale;
dest1.put(i, limit(val));
val = stream_buffer::sample_t(*rmix++) * sample_scale;
dest2.put(i, limit(val));
dest1.put_int_clamp(i, *lmix++, 32768 / 8);
dest2.put_int_clamp(i, *rmix++, 32768 / 8);
}
}
}
@ -465,15 +454,10 @@ void c219_device::sound_stream_update(sound_stream &stream, std::vector<read_str
{
auto &dest1 = outputs[0];
auto &dest2 = outputs[1];
constexpr stream_buffer::sample_t sample_scale = 8.0 / 32768.0;
for (int i = 0; i < samples; i++)
{
stream_buffer::sample_t val;
val = stream_buffer::sample_t(*lmix++) * sample_scale;
dest1.put(i, limit(val));
val = stream_buffer::sample_t(*rmix++) * sample_scale;
dest2.put(i, limit(val));
dest1.put_int_clamp(i, *lmix++, 32768 / 8);
dest2.put_int_clamp(i, *rmix++, 32768 / 8);
}
}
}

View File

@ -129,7 +129,6 @@ void c352_device::sound_stream_update(sound_stream &stream, std::vector<read_str
auto &buffer_rl = outputs[2];
auto &buffer_rr = outputs[3];
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int i = 0; i < buffer_fl.samples(); i++)
{
int out[4] = { 0, 0, 0, 0 };
@ -174,10 +173,10 @@ void c352_device::sound_stream_update(sound_stream &stream, std::vector<read_str
out[3] += (((v.flags & C352_FLG_PHASEFR) ? -s : s) * v.curr_vol[3]) >> 8;
}
buffer_fl.put(i, stream_buffer::sample_t(s16(out[0] >> 3)) * sample_scale);
buffer_fr.put(i, stream_buffer::sample_t(s16(out[1] >> 3)) * sample_scale);
buffer_rl.put(i, stream_buffer::sample_t(s16(out[2] >> 3)) * sample_scale);
buffer_rr.put(i, stream_buffer::sample_t(s16(out[3] >> 3)) * sample_scale);
buffer_fl.put_int(i, s16(out[0] >> 3), 32768);
buffer_fr.put_int(i, s16(out[1] >> 3), 32768);
buffer_rl.put_int(i, s16(out[2] >> 3), 32768);
buffer_rr.put_int(i, s16(out[3] >> 3), 32768);
}
}

View File

@ -51,7 +51,6 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
outputs[0].fill(0);
outputs[1].fill(0);
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int ch = 0; ch < 6; ch++)
{
channel *chan = &m_channel[ch];
@ -88,8 +87,8 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
// based on Charles MacDonald's research
chan->noise_seed = (seed >> 1) | ((BIT(seed, 0) ^ BIT(seed, 1) ^ BIT(seed, 11) ^ BIT(seed, 12) ^ BIT(seed, 17)) << 17);
}
outputs[0].add(i, stream_buffer::sample_t(s16(vll * (data - 16))) * sample_scale);
outputs[1].add(i, stream_buffer::sample_t(s16(vlr * (data - 16))) * sample_scale);
outputs[0].add_int(i, s16(vll * (data - 16)), 32768);
outputs[1].add_int(i, s16(vlr * (data - 16)), 32768);
}
}
else
@ -98,8 +97,8 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
/* DDA mode */
for (int i = 0; i < outputs[0].samples(); i++)
{
outputs[0].add(i, stream_buffer::sample_t(s16(vll * (chan->dda - 16))) * sample_scale);
outputs[1].add(i, stream_buffer::sample_t(s16(vlr * (chan->dda - 16))) * sample_scale);
outputs[0].add_int(i, s16(vll * (chan->dda - 16)), 32768);
outputs[1].add_int(i, s16(vlr * (chan->dda - 16)), 32768);
}
}
else
@ -138,8 +137,8 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
lfo_dstchan->tick = step;
lfo_dstchan->index = (lfo_dstchan->index + 1) & 0x1f;
}
outputs[0].add(i, stream_buffer::sample_t(s16(vll * (data - 16))) * sample_scale);
outputs[1].add(i, stream_buffer::sample_t(s16(vlr * (data - 16))) * sample_scale);
outputs[0].add_int(i, s16(vll * (data - 16)), 32768);
outputs[1].add_int(i, s16(vlr * (data - 16)), 32768);
}
}
}
@ -156,8 +155,8 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
chan->tick = step;
chan->index = (chan->index + 1) & 0x1f;
}
outputs[0].add(i, stream_buffer::sample_t(s16(vll * (data - 16))) * sample_scale);
outputs[1].add(i, stream_buffer::sample_t(s16(vlr * (data - 16))) * sample_scale);
outputs[0].add_int(i, s16(vll * (data - 16)), 32768);
outputs[1].add_int(i, s16(vlr * (data - 16)), 32768);
}
}
}

View File

@ -164,7 +164,6 @@ void cdda_device::get_audio_data(write_stream_view &bufL, write_stream_view &buf
int i;
int16_t *audio_cache = (int16_t *) m_audio_cache.get();
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int sampindex = 0; sampindex < bufL.samples(); )
{
/* if no file, audio not playing, audio paused, or out of disc data,
@ -191,8 +190,8 @@ void cdda_device::get_audio_data(write_stream_view &bufL, write_stream_view &buf
for (i = 0; i < samples; i++)
{
/* CD-DA data on the disc is big-endian */
bufL.put(sampindex + i, stream_buffer::sample_t(s16(big_endianize_int16( audio_cache[ m_audio_bptr ] ))) * sample_scale); m_audio_bptr++;
bufR.put(sampindex + i, stream_buffer::sample_t(s16(big_endianize_int16( audio_cache[ m_audio_bptr ] ))) * sample_scale); m_audio_bptr++;
bufL.put_int(sampindex + i, s16(big_endianize_int16( audio_cache[ m_audio_bptr ] )), 32768); m_audio_bptr++;
bufR.put_int(sampindex + i, s16(big_endianize_int16( audio_cache[ m_audio_bptr ] )), 32768); m_audio_bptr++;
}
sampindex += samples;

View File

@ -205,7 +205,6 @@ void dave_device::sound_stream_update(sound_stream &stream, std::vector<read_str
auto &buffer1 = outputs[0];
auto &buffer2 = outputs[1];
constexpr stream_buffer::sample_t sample_scale = 1.0 / (4.0 * 32768.0);
for (int sampindex = 0; sampindex < buffer1.samples(); sampindex++)
{
int vol[4];
@ -264,8 +263,8 @@ void dave_device::sound_stream_update(sound_stream &stream, std::vector<read_str
left_volume = output_volumes[0] + output_volumes[2] + output_volumes[4] + output_volumes[6];
right_volume = output_volumes[1] + output_volumes[3] + output_volumes[5] + output_volumes[7];
buffer1.put(sampindex, stream_buffer::sample_t(left_volume) * sample_scale);
buffer2.put(sampindex, stream_buffer::sample_t(right_volume) * sample_scale);
buffer1.put_int(sampindex, left_volume, 32768 * 4);
buffer2.put_int(sampindex, right_volume, 32768 * 4);
}
}

View File

@ -548,7 +548,6 @@ void digitalker_device::sound_stream_update(sound_stream &stream, std::vector<re
{
auto &sout = outputs[0];
int cpos = 0;
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
while(cpos != sout.samples()) {
if(m_zero_count == 0 && m_dac_index == 128)
digitalker_step();
@ -563,10 +562,10 @@ void digitalker_device::sound_stream_update(sound_stream &stream, std::vector<re
} else if(m_dac_index != 128) {
while(cpos != sout.samples() && m_dac_index != 128) {
stream_buffer::sample_t v = stream_buffer::sample_t(m_dac[m_dac_index]) * sample_scale;
s32 v = m_dac[m_dac_index];
int pp = m_pitch_pos;
while(cpos != sout.samples() && pp != m_pitch) {
sout.put(cpos++, v);
sout.put_int(cpos++, v, 32768);
pp++;
}
if(pp == m_pitch) {

View File

@ -306,7 +306,6 @@ void es1373_device::send_audio_out(chan_info& chan, uint32_t intr_mask, write_st
//uint32_t sample_size = calc_size(chan.format);
// Send data to sound stream
bool buf_row_done;
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int i=0; i<outL.samples(); i++) {
buf_row_done = false;
int16_t lsamp = 0, rsamp = 0;
@ -374,8 +373,8 @@ void es1373_device::send_audio_out(chan_info& chan, uint32_t intr_mask, write_st
chan.buf_rptr -= 0x10;
}
}
outL.put(i, stream_buffer::sample_t(lsamp) * sample_scale);
outR.put(i, stream_buffer::sample_t(rsamp) * sample_scale);
outL.put_int(i, lsamp, 32768);
outR.put_int(i, rsamp, 32768);
}
}

View File

@ -199,9 +199,8 @@ void es5503_device::sound_stream_update(sound_stream &stream, std::vector<read_s
}
mixp = &m_mix_buffer[0];
constexpr stream_buffer::sample_t sample_scale = 1.0 / (32768.0 * 8.0);
for (i = 0; i < outputs[chan].samples(); i++)
outputs[chan].put(i, stream_buffer::sample_t(*mixp++) * sample_scale);
outputs[chan].put_int(i, *mixp++, 32768 * 8);
}
}

View File

@ -1042,9 +1042,8 @@ void es5506_device::generate_samples(std::vector<write_stream_view> &outputs)
generate_irq(voice, v);
}
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int c = 0; c < outputs.size(); c++)
outputs[c].put(sampindex, stream_buffer::sample_t(cursample[c]) * sample_scale);
outputs[c].put_int(sampindex, cursample[c], 32768);
}
}
@ -1081,9 +1080,8 @@ void es5505_device::generate_samples(std::vector<write_stream_view> &outputs)
generate_irq(voice, v);
}
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int c = 0; c < outputs.size(); c++)
outputs[c].put(sampindex, stream_buffer::sample_t(cursample[c]) * sample_scale);
outputs[c].put_int(sampindex, cursample[c], 32768);
}
}

View File

@ -79,7 +79,6 @@ gaelco_gae1_device::gaelco_gae1_device(const machine_config &mconfig, device_typ
void gaelco_gae1_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
/* fill all data needed */
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int j = 0; j < outputs[0].samples(); j++)
{
int output_l = 0, output_r = 0;
@ -178,8 +177,8 @@ void gaelco_gae1_device::sound_stream_update(sound_stream &stream, std::vector<r
#endif
/* now that we have computed all channels, save current data to the output buffer */
outputs[0].put(j, stream_buffer::sample_t(output_l) * sample_scale);
outputs[1].put(j, stream_buffer::sample_t(output_r) * sample_scale);
outputs[0].put_int(j, output_l, 32768);
outputs[1].put_int(j, output_r, 32768);
}
// if (wavraw)

View File

@ -1218,7 +1218,6 @@ void gameboy_sound_device::sound_stream_update(sound_stream &stream, std::vector
{
auto &outputl = outputs[0];
auto &outputr = outputs[1];
constexpr stream_buffer::sample_t sample_scale = 1.0 / (32768.0 / 64.0);
for (int sampindex = 0; sampindex < outputl.samples(); sampindex++)
{
s32 sample;
@ -1271,7 +1270,7 @@ void gameboy_sound_device::sound_stream_update(sound_stream &stream, std::vector
right *= m_snd_control.vol_right;
/* Update the buffers */
outputl.put(sampindex, stream_buffer::sample_t(left) * sample_scale);
outputr.put(sampindex, stream_buffer::sample_t(right) * sample_scale);
outputl.put_int(sampindex, left, 32768 / 64);
outputr.put_int(sampindex, right, 32768 / 64);
}
}

View File

@ -23,7 +23,6 @@ constexpr int clamp(int val, int min, int max) { return std::min(max, std::max(m
void huc6230_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int i = 0; i < outputs[0].samples(); i++)
{
s32 samp0 = inputs[0].get(i) * 32768.0;
@ -40,8 +39,8 @@ void huc6230_device::sound_stream_update(sound_stream &stream, std::vector<read_
samp1 = clamp(samp1 + ((channel->m_output * channel->m_rvol) >> 3), -32768, 32767);
}
outputs[0].put(i, stream_buffer::sample_t(samp0) * sample_scale);
outputs[1].put(i, stream_buffer::sample_t(samp1) * sample_scale);
outputs[0].put_int(i, samp0, 32768);
outputs[1].put_int(i, samp1, 32768);
}
}

View File

@ -116,7 +116,6 @@ bool i5000snd_device::read_sample(int ch)
void i5000snd_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
constexpr stream_buffer::sample_t sample_scale = 1.0 / (32768.0 * 16.0);
for (int i = 0; i < outputs[0].samples(); i++)
{
int32_t mix_l = 0;
@ -158,8 +157,8 @@ void i5000snd_device::sound_stream_update(sound_stream &stream, std::vector<read
mix_l += m_channels[ch].output_l;
}
outputs[0].put(i, stream_buffer::sample_t(mix_r) * sample_scale);
outputs[1].put(i, stream_buffer::sample_t(mix_l) * sample_scale);
outputs[0].put_int(i, mix_r, 32768 * 16);
outputs[1].put_int(i, mix_l, 32768 * 16);
}
}

View File

@ -391,7 +391,6 @@ int ics2115_device::fill_output(ics2115_voice& voice, std::vector<write_stream_v
const u16 fine = 1 << (3*(voice.vol.incr >> 6));
voice.vol.add = (voice.vol.incr & 0x3f)<< (10 - fine);
constexpr stream_buffer::sample_t sample_scale = 1.0 / (32768.0 * (1 << (5 + volume_bits)));
for (int i = 0; i < outputs[0].samples(); i++)
{
const u32 volacc = (voice.vol.acc >> 10) & 0xffff;
@ -411,8 +410,8 @@ int ics2115_device::fill_output(ics2115_voice& voice, std::vector<write_stream_v
{
/*if (voice.playing())
{*/
outputs[0].add(i, stream_buffer::sample_t(sample * vleft) * sample_scale);
outputs[1].add(i, stream_buffer::sample_t(sample * vright) * sample_scale);
outputs[0].add_int(i, (sample * vleft) >> (5 + volume_bits), 32768);
outputs[1].add_int(i, (sample * vright) >> (5 + volume_bits), 32768);
}
voice.update_ramp();

View File

@ -134,7 +134,6 @@ void iremga20_device::sound_stream_update(sound_stream &stream, std::vector<read
auto &outL = outputs[0];
auto &outR = outputs[1];
stream_buffer::sample_t sample_scale = 1.0 / (32768.0 * 4.0);
for (int i = 0; i < outL.samples(); i++)
{
s32 sampleout = 0;
@ -159,9 +158,8 @@ void iremga20_device::sound_stream_update(sound_stream &stream, std::vector<read
}
}
stream_buffer::sample_t final = stream_buffer::sample_t(sampleout) * sample_scale;
outL.put(i, final);
outR.put(i, final);
outL.put_int(i, sampleout, 32768 * 4);
outR.put_int(i, sampleout, 32768 * 4);
}
}

View File

@ -236,7 +236,6 @@ void k007232_device::sound_stream_update(sound_stream &stream, std::vector<read_
}
}
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int j = 0; j < outputs[0].samples(); j++)
{
s32 lsum = 0, rsum = 0;
@ -282,7 +281,7 @@ void k007232_device::sound_stream_update(sound_stream &stream, std::vector<read_
rsum += out * vol_b;
}
}
outputs[0].put(j, stream_buffer::sample_t(lsum) * sample_scale);
outputs[1].put(j, stream_buffer::sample_t(rsum) * sample_scale);
outputs[0].put_int(j, lsum, 32768);
outputs[1].put_int(j, rsum, 32768);
}
}

View File

@ -301,14 +301,6 @@ void k053260_device::write(offs_t offset, u8 data)
}
}
static inline int limit(int val, int max, int min)
{
return std::max(min, std::min(max, val));
}
static constexpr s32 MAXOUT = 0x7fff;
static constexpr s32 MINOUT = -0x8000;
//-------------------------------------------------
// sound_stream_update - handle a stream update
//-------------------------------------------------
@ -317,7 +309,6 @@ void k053260_device::sound_stream_update(sound_stream &stream, std::vector<read_
{
if (m_mode & 2)
{
constexpr stream_buffer::sample_t sample_scale = 1.0f / stream_buffer::sample_t(MAXOUT);
for ( int j = 0; j < outputs[0].samples(); j++ )
{
stream_sample_t buffer[2] = {0, 0};
@ -328,8 +319,8 @@ void k053260_device::sound_stream_update(sound_stream &stream, std::vector<read_
voice.play(buffer);
}
outputs[0].put(j, stream_buffer::sample_t(limit( buffer[0], MAXOUT, MINOUT )) * sample_scale);
outputs[1].put(j, stream_buffer::sample_t(limit( buffer[1], MAXOUT, MINOUT )) * sample_scale);
outputs[0].put_int_clamp(j, buffer[0], 32768);
outputs[1].put_int_clamp(j, buffer[1], 32768);
}
}
else

View File

@ -124,7 +124,6 @@ void k054539_device::sound_stream_update(sound_stream &stream, std::vector<read_
return;
}
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for(int sample = 0; sample != outputs[0].samples(); sample++) {
double lval, rval;
if(!(flags & DISABLE_REVERB))
@ -303,8 +302,8 @@ void k054539_device::sound_stream_update(sound_stream &stream, std::vector<read_
}
}
reverb_pos = (reverb_pos + 1) & 0x1fff;
outputs[0].put(sample, stream_buffer::sample_t(lval) * sample_scale);
outputs[1].put(sample, stream_buffer::sample_t(rval) * sample_scale);
outputs[0].put_int(sample, lval, 32768);
outputs[1].put_int(sample, rval, 32768);
}
}

View File

@ -370,7 +370,6 @@ u16 ks0164_device::uncomp_8_16(u8 value)
void ks0164_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
constexpr stream_buffer::sample_t sample_scale = 1.0 / (32768.0 * 32.0);
for(int sample = 0; sample != outputs[0].samples(); sample++) {
s32 suml = 0, sumr = 0;
for(int voice = 0; voice < 0x20; voice++) {
@ -416,7 +415,7 @@ void ks0164_device::sound_stream_update(sound_stream &stream, std::vector<read_s
sumr += samp;
}
}
outputs[0].put(sample, stream_buffer::sample_t(suml) * sample_scale);
outputs[1].put(sample, stream_buffer::sample_t(sumr) * sample_scale);
outputs[0].put_int(sample, suml, 32768 * 32);
outputs[1].put_int(sample, sumr, 32768 * 32);
}
}

View File

@ -152,7 +152,6 @@ void l7a1045_sound_device::sound_stream_update(sound_stream &stream, std::vector
outputs[0].fill(0);
outputs[1].fill(0);
constexpr stream_buffer::sample_t sample_scale = 1.0 / (32768.0 * 512.0);
for (int i = 0; i < 32; i++)
{
if (m_key & (1 << i))
@ -193,8 +192,8 @@ void l7a1045_sound_device::sound_stream_update(sound_stream &stream, std::vector
sample = ((int8_t)(data & 0xfc)) << (3 - (data & 3));
frac += step;
outputs[0].add(j, stream_buffer::sample_t(sample * vptr->l_volume) * sample_scale);
outputs[1].add(j, stream_buffer::sample_t(sample * vptr->r_volume) * sample_scale);
outputs[0].add_int(j, sample * vptr->l_volume, 32768 * 512);
outputs[1].add_int(j, sample * vptr->r_volume, 32768 * 512);
}
vptr->pos = pos;

View File

@ -367,17 +367,15 @@ void mas3507d_device::append_buffer(std::vector<write_stream_view> &outputs, int
if(s1 > sample_count)
s1 = sample_count;
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
if(mp3_info.channels == 1) {
for(int i=0; i<s1; i++) {
stream_buffer::sample_t v = stream_buffer::sample_t(samples[i]) * sample_scale;
outputs[0].put(i+pos, v);
outputs[1].put(i+pos, v);
outputs[0].put_int(i+pos, samples[i], 32768);
outputs[1].put_int(i+pos, samples[i], 32768);
}
} else {
for(int i=0; i<s1; i++) {
outputs[0].put(i+pos, stream_buffer::sample_t(samples[i*2]) * sample_scale);
outputs[1].put(i+pos, stream_buffer::sample_t(samples[i*2+1]) * sample_scale);
outputs[0].put_int(i+pos, samples[i*2], 32768);
outputs[1].put_int(i+pos, samples[i*2+1], 32768);
}
}

View File

@ -892,7 +892,6 @@ void mos6560_device::sound_stream_update(sound_stream &stream, std::vector<read_
int i, v;
auto &buffer = outputs[0];
constexpr stream_buffer::sample_t sample_scale = 1.0 / 8192.0;
for (i = 0; i < buffer.samples(); i++)
{
v = 0;
@ -958,6 +957,6 @@ void mos6560_device::sound_stream_update(sound_stream &stream, std::vector<read_
v = 8191;
else if (v < -8191)
v = -8191;
buffer.put(i, stream_buffer::sample_t(v) * sample_scale);
buffer.put_int(i, v, 8192);
}
}

View File

@ -463,7 +463,6 @@ void mos7360_device::sound_stream_update(sound_stream &stream, std::vector<read_
int i, v, a;
auto &buffer = outputs[0];
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (i = 0; i < buffer.samples(); i++)
{
v = 0;
@ -507,7 +506,7 @@ void mos7360_device::sound_stream_update(sound_stream &stream, std::vector<read_
v = v * a;
buffer.put(i, stream_buffer::sample_t(v) * sample_scale);
buffer.put_int(i, v, 32768);
}
}

View File

@ -743,17 +743,16 @@ void msm5232_device::sound_stream_update(sound_stream &stream, std::vector<read_
auto &bufnoise = outputs[10];
int i;
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (i=0; i<buf1.samples(); i++)
{
/* calculate all voices' envelopes */
EG_voices_advance();
TG_group_advance(0); /* calculate tones group 1 */
buf1.put(i, stream_buffer::sample_t(o2) * sample_scale);
buf2.put(i, stream_buffer::sample_t(o4) * sample_scale);
buf3.put(i, stream_buffer::sample_t(o8) * sample_scale);
buf4.put(i, stream_buffer::sample_t(o16) * sample_scale);
buf1.put_int(i, o2, 32768);
buf2.put_int(i, o4, 32768);
buf3.put_int(i, o8, 32768);
buf4.put_int(i, o16, 32768);
SAVE_SINGLE_CHANNEL(0,o2)
SAVE_SINGLE_CHANNEL(1,o4)
@ -761,13 +760,13 @@ void msm5232_device::sound_stream_update(sound_stream &stream, std::vector<read_
SAVE_SINGLE_CHANNEL(3,o16)
TG_group_advance(1); /* calculate tones group 2 */
buf5.put(i, stream_buffer::sample_t(o2) * sample_scale);
buf6.put(i, stream_buffer::sample_t(o4) * sample_scale);
buf7.put(i, stream_buffer::sample_t(o8) * sample_scale);
buf8.put(i, stream_buffer::sample_t(o16) * sample_scale);
buf5.put_int(i, o2, 32768);
buf6.put_int(i, o4, 32768);
buf7.put_int(i, o8, 32768);
buf8.put_int(i, o16, 32768);
bufsolo1.put(i, stream_buffer::sample_t(solo8) * sample_scale);
bufsolo2.put(i, stream_buffer::sample_t(solo16) * sample_scale);
bufsolo1.put_int(i, solo8, 32768);
bufsolo2.put_int(i, solo16, 32768);
SAVE_SINGLE_CHANNEL(4,o2)
SAVE_SINGLE_CHANNEL(5,o4)

View File

@ -632,19 +632,6 @@ void multipcm_device::device_clock_changed()
// 16 bits and convert to a stream_buffer::sample_t
//-----------------------------------------------------
stream_buffer::sample_t multipcm_device::convert_to_stream_sample(int32_t value)
{
if (value < -32768)
{
return -1.0;
}
else if (value > 32767)
{
return 1.0;
}
return stream_buffer::sample_t(value) * (1.0 / 32768.0);
}
#if MULTIPCM_LOG_SAMPLES
void multipcm_device::dump_sample(slot_t &slot)
{
@ -734,8 +721,8 @@ void multipcm_device::sound_stream_update(sound_stream &stream, std::vector<read
}
}
outputs[0].put(i, convert_to_stream_sample(smpl));
outputs[1].put(i, convert_to_stream_sample(smpr));
outputs[0].put_int_clamp(i, smpl, 32768);
outputs[1].put_int_clamp(i, smpr, 32768);
}
}

View File

@ -43,8 +43,6 @@
/* a position of waveform sample */
#define WAVEFORM_POSITION(n) (((n) >> m_f_fracbits) & 0x1f)
static constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
DEFINE_DEVICE_TYPE(NAMCO, namco_device, "namco", "Namco")
DEFINE_DEVICE_TYPE(NAMCO_15XX, namco_15xx_device, "namco_15xx", "Namco 15xx")
DEFINE_DEVICE_TYPE(NAMCO_CUS30, namco_cus30_device, "namco_cus30", "Namco CUS30")
@ -239,7 +237,7 @@ uint32_t namco_audio_device::namco_update_one(write_stream_view &buffer, const i
{
for (int sampindex = 0; sampindex < buffer.samples(); sampindex++)
{
buffer.add(sampindex, stream_buffer::sample_t(wave[WAVEFORM_POSITION(counter)]) * sample_scale);
buffer.add_int(sampindex, wave[WAVEFORM_POSITION(counter)], 32768);
counter += freq;
}
@ -699,13 +697,13 @@ void namco_audio_device::sound_stream_update(sound_stream &stream, std::vector<r
if (voice->noise_state)
{
lmix.add(i, stream_buffer::sample_t(l_noise_data) * sample_scale);
rmix.add(i, stream_buffer::sample_t(r_noise_data) * sample_scale);
lmix.add_int(i, l_noise_data, 32768);
rmix.add_int(i, r_noise_data, 32768);
}
else
{
lmix.add(i, stream_buffer::sample_t(-l_noise_data) * sample_scale);
rmix.add(i, stream_buffer::sample_t(-r_noise_data) * sample_scale);
lmix.add_int(i, -l_noise_data, 32768);
rmix.add_int(i, -r_noise_data, 32768);
}
if (hold)
@ -799,9 +797,9 @@ void namco_audio_device::sound_stream_update(sound_stream &stream, std::vector<r
int cnt;
if (voice->noise_state)
buffer.add(i, stream_buffer::sample_t(noise_data) * sample_scale);
buffer.add_int(i, noise_data, 32768);
else
buffer.add(i, stream_buffer::sample_t(-noise_data) * sample_scale);
buffer.add_int(i, -noise_data, 32768);
if (hold)
{

View File

@ -151,7 +151,6 @@ void namco_163_sound_device::sound_stream_update(sound_stream &stream, std::vect
}
// Slightly noisy but closer to real hardware behavior
constexpr stream_buffer::sample_t sample_scale = 1.0 / 128.0;
for (int s = 0; s < outputs[0].samples(); s++)
{
u32 phase = (m_ram[m_reg_addr + 5] << 16) | (m_ram[m_reg_addr + 3] << 8) | m_ram[m_reg_addr + 1];
@ -172,6 +171,6 @@ void namco_163_sound_device::sound_stream_update(sound_stream &stream, std::vect
{
m_reg_addr = 0x78 - ((m_ram[0x7f] & 0x70) >> 1);
}
outputs[0].put(s, stream_buffer::sample_t(output) * sample_scale);
outputs[0].put_int(s, output, 128);
}
}

View File

@ -733,7 +733,6 @@ void nesapu_device::sound_stream_update(sound_stream &stream, std::vector<read_s
int accum;
auto &output = outputs[0];
constexpr stream_buffer::sample_t sample_scale = 1.0 / 128.0;
for (int sampindex = 0; sampindex < output.samples(); sampindex++)
{
accum = apu_square(&m_APU.squ[0]);
@ -742,12 +741,6 @@ void nesapu_device::sound_stream_update(sound_stream &stream, std::vector<read_s
accum += apu_noise(&m_APU.noi);
accum += apu_dpcm(&m_APU.dpcm);
/* 8-bit clamps */
if (accum > 127)
accum = 127;
else if (accum < -128)
accum = -128;
output.put(sampindex, stream_buffer::sample_t(accum) * sample_scale);
output.put_int_clamp(sampindex, accum, 128);
}
}

View File

@ -160,11 +160,10 @@ void nile_device::sound_stream_update(sound_stream &stream, std::vector<read_str
}
}
mixp = &mix[0];
constexpr stream_buffer::sample_t sample_scale = 1.0 / (32768.0 * 16.0);
for (i = 0; i < outputs[0].samples(); i++)
{
outputs[0].put(i, stream_buffer::sample_t(*mixp++) * sample_scale);
outputs[1].put(i, stream_buffer::sample_t(*mixp++) * sample_scale);
outputs[0].put_int(i, *mixp++, 32768 * 16);
outputs[1].put_int(i, *mixp++, 32768 * 16);
}
}

View File

@ -344,7 +344,6 @@ void okim6295_device::okim_voice::generate_adpcm(device_rom_interface &rom, writ
return;
// loop while we still have samples to generate
constexpr stream_buffer::sample_t sample_scale = 1.0 / 2048.0;
for (int sampindex = 0; sampindex < buffer.samples(); sampindex++)
{
// fetch the next sample byte
@ -352,7 +351,7 @@ void okim6295_device::okim_voice::generate_adpcm(device_rom_interface &rom, writ
// output to the buffer, scaling by the volume
// signal in range -2048..2047
buffer.add(sampindex, m_adpcm.clock(nibble) * sample_scale * m_volume);
buffer.add_int(sampindex, m_adpcm.clock(nibble) * m_volume, 2048);
// next!
if (++m_sample >= m_count)

View File

@ -378,7 +378,6 @@ void sn76496_base_device::sound_stream_update(sound_stream &stream, std::vector<
int16_t out;
int16_t out2 = 0;
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int sampindex = 0; sampindex < lbuffer->samples(); sampindex++)
{
// clock chip once
@ -445,9 +444,9 @@ void sn76496_base_device::sound_stream_update(sound_stream &stream, std::vector<
if (m_negate) { out = -out; out2 = -out2; }
lbuffer->put(sampindex, stream_buffer::sample_t(out) * sample_scale);
lbuffer->put_int(sampindex, out, 32768);
if (m_stereo)
rbuffer->put(sampindex, stream_buffer::sample_t(out2) * sample_scale);
rbuffer->put_int(sampindex, out2, 32768);
}
}

View File

@ -258,9 +258,8 @@ void sp0250_device::sound_stream_update(sound_stream &stream, std::vector<read_s
if (!m_pwm_mode)
{
constexpr stream_buffer::sample_t sample_scale = 1.0 / 128.0;
for (int sampindex = 0; sampindex < output.samples(); sampindex++)
output.put(sampindex, stream_buffer::sample_t(next()) * sample_scale);
output.put_int(sampindex, next(), 128);
}
else
{

View File

@ -2061,7 +2061,6 @@ void tms5220_device::sound_stream_update(sound_stream &stream, std::vector<read_
auto &output = outputs[0];
/* loop while we still have samples to generate */
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int sampindex = 0; sampindex < output.samples(); )
{
int length = (output.samples() > MAX_SAMPLE_CHUNK) ? MAX_SAMPLE_CHUNK : output.samples();
@ -2069,7 +2068,7 @@ void tms5220_device::sound_stream_update(sound_stream &stream, std::vector<read_
/* generate the samples and copy to the target buffer */
process(sample_data, length);
for (int index = 0; index < length; index++)
output.put(sampindex++, sample_data[index] * sample_scale);
output.put_int(sampindex++, sample_data[index], 32768);
}
}

View File

@ -1845,7 +1845,6 @@ void ym2151_device::sound_stream_update(sound_stream &stream, std::vector<read_s
return;
}
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
for (int sampindex=0; sampindex<outputs[0].samples(); sampindex++)
{
advance_eg();
@ -1864,16 +1863,8 @@ void ym2151_device::sound_stream_update(sound_stream &stream, std::vector<read_s
outr += chanout[ch] & pan[2*ch+1];
}
if (outl > 32767)
outl = 32767;
else if (outl < -32768)
outl = -32768;
if (outr > 32767)
outr = 32767;
else if (outr < -32768)
outr = -32768;
outputs[0].put(sampindex, stream_buffer::sample_t(outl) * sample_scale);
outputs[1].put(sampindex, stream_buffer::sample_t(outr) * sample_scale);
outputs[0].put_int_clamp(sampindex, outl, 32768);
outputs[1].put_int_clamp(sampindex, outr, 32768);
advance();
}

View File

@ -346,6 +346,7 @@ protected:
class write_stream_view : public read_stream_view
{
public:
// empty constructor so we can live in an array or vector
write_stream_view()
@ -364,7 +365,7 @@ public:
{
}
// safely write a gain-applied sample to the buffer
// safely write a sample to the buffer
void put(s32 index, sample_t sample)
{
sound_assert(u32(index) < samples());
@ -374,7 +375,33 @@ public:
m_buffer->put(index, sample);
}
// safely add a gain-applied sample to the buffer
// write a sample to the buffer, clamping to +/- the clamp value
void put_clamp(s32 index, sample_t sample, sample_t clamp = 1.0)
{
if (sample > clamp)
sample = clamp;
if (sample < -clamp)
sample = -clamp;
put(index, sample);
}
// write a sample to the buffer, converting from an integer with the given maximum
void put_int(s32 index, s32 sample, s32 max)
{
put(index, sample_t(sample) * (1.0f / sample_t(max)));
}
// write a sample to the buffer, converting from an integer with the given maximum
void put_int_clamp(s32 index, s32 sample, s32 maxclamp)
{
if (sample > maxclamp)
sample = maxclamp;
else if (sample < -maxclamp)
sample = -maxclamp;
put_int(index, sample, maxclamp);
}
// safely add a sample to the buffer
void add(s32 index, sample_t sample)
{
sound_assert(u32(index) < samples());
@ -384,6 +411,12 @@ public:
m_buffer->put(index, m_buffer->get(index) + sample);
}
// add a sample to the buffer, converting from an integer with the given maximum
void add_int(s32 index, s32 sample, s32 max)
{
add(index, sample_t(sample) * (1.0f / sample_t(max)));
}
// fill part of the view with the given value
void fill(sample_t value, s32 start, s32 count)
{