summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/sound
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2020-09-19 13:40:05 -0700
committer Aaron Giles <aaron@aarongiles.com>2020-09-19 13:40:05 -0700
commitc9399d2377c6c21e123d76f538d131928dc71c9e (patch)
treefad510cbb1cc833f680164f07acc1356716e37b7 /src/devices/sound
parentfdf35fe86bf382fae1a5d4b9b3011d3085bdfa7b (diff)
la7a1045/lmc1992/mas3507d/mea8000/mos6560/mos6581/mos7360/msm5232/multipcm: update to new stream callbacks
Diffstat (limited to 'src/devices/sound')
-rw-r--r--src/devices/sound/esqpump.cpp3
-rw-r--r--src/devices/sound/l7a1045_l6028_dsp_a.cpp17
-rw-r--r--src/devices/sound/l7a1045_l6028_dsp_a.h2
-rw-r--r--src/devices/sound/lmc1992.cpp2
-rw-r--r--src/devices/sound/lmc1992.h2
-rw-r--r--src/devices/sound/mas3507d.cpp27
-rw-r--r--src/devices/sound/mas3507d.h4
-rw-r--r--src/devices/sound/mea8000.cpp9
-rw-r--r--src/devices/sound/mea8000.h4
-rw-r--r--src/devices/sound/mos6560.cpp36
-rw-r--r--src/devices/sound/mos6560.h6
-rw-r--r--src/devices/sound/mos6581.cpp6
-rw-r--r--src/devices/sound/mos6581.h2
-rw-r--r--src/devices/sound/mos7360.cpp13
-rw-r--r--src/devices/sound/mos7360.h2
-rw-r--r--src/devices/sound/msm5232.cpp53
-rw-r--r--src/devices/sound/msm5232.h2
-rw-r--r--src/devices/sound/multipcm.cpp31
-rw-r--r--src/devices/sound/multipcm.h4
-rw-r--r--src/devices/sound/sid.cpp42
-rw-r--r--src/devices/sound/sid.h2
21 files changed, 113 insertions, 156 deletions
diff --git a/src/devices/sound/esqpump.cpp b/src/devices/sound/esqpump.cpp
index 110508f87b7..bf34520869f 100644
--- a/src/devices/sound/esqpump.cpp
+++ b/src/devices/sound/esqpump.cpp
@@ -22,9 +22,6 @@ esq_5505_5510_pump_device::esq_5505_5510_pump_device(const machine_config &mconf
, ticks_spent_processing(0)
, samples_processed(0)
{
-#if !PUMP_FAKE_ESP_PROCESSING && PUMP_REPLACE_ESP_PROGRAM
- e = nullptr;
-#endif
}
void esq_5505_5510_pump_device::device_start()
diff --git a/src/devices/sound/l7a1045_l6028_dsp_a.cpp b/src/devices/sound/l7a1045_l6028_dsp_a.cpp
index 280d12a20d9..16c45121378 100644
--- a/src/devices/sound/l7a1045_l6028_dsp_a.cpp
+++ b/src/devices/sound/l7a1045_l6028_dsp_a.cpp
@@ -117,7 +117,7 @@ l7a1045_sound_device::l7a1045_sound_device(const machine_config &mconfig, const
void l7a1045_sound_device::device_start()
{
/* Allocate the stream */
- m_stream = stream_alloc_legacy(0, 2, 66150); //clock() / 384);
+ m_stream = stream_alloc(0, 2, 66150); //clock() / 384);
for (int voice = 0; voice < 32; voice++)
{
@@ -143,15 +143,16 @@ void l7a1045_sound_device::device_start()
//-------------------------------------------------
-// sound_stream_update_legacy - handle a stream update
+// sound_stream_update - handle a stream update
//-------------------------------------------------
-void l7a1045_sound_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
+void l7a1045_sound_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
/* Clear the buffers */
- memset(outputs[0], 0, samples*sizeof(*outputs[0]));
- memset(outputs[1], 0, samples*sizeof(*outputs[1]));
+ 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))
@@ -165,7 +166,7 @@ void l7a1045_sound_device::sound_stream_update_legacy(sound_stream &stream, stre
uint32_t pos = vptr->pos;
uint32_t frac = vptr->frac;
- for (int j = 0; j < samples; j++)
+ for (int j = 0; j < outputs[0].samples(); j++)
{
int32_t sample;
uint8_t data;
@@ -192,8 +193,8 @@ void l7a1045_sound_device::sound_stream_update_legacy(sound_stream &stream, stre
sample = ((int8_t)(data & 0xfc)) << (3 - (data & 3));
frac += step;
- outputs[0][j] += ((sample * vptr->l_volume) >> 9);
- outputs[1][j] += ((sample * vptr->r_volume) >> 9);
+ 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);
}
vptr->pos = pos;
diff --git a/src/devices/sound/l7a1045_l6028_dsp_a.h b/src/devices/sound/l7a1045_l6028_dsp_a.h
index bc9c3b5d500..542b6aad386 100644
--- a/src/devices/sound/l7a1045_l6028_dsp_a.h
+++ b/src/devices/sound/l7a1045_l6028_dsp_a.h
@@ -33,7 +33,7 @@ protected:
virtual void device_start() override;
// sound stream update overrides
- virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
+ virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
private:
struct l7a1045_voice
diff --git a/src/devices/sound/lmc1992.cpp b/src/devices/sound/lmc1992.cpp
index ad412395d9d..25da0ac327d 100644
--- a/src/devices/sound/lmc1992.cpp
+++ b/src/devices/sound/lmc1992.cpp
@@ -175,7 +175,7 @@ void lmc1992_device::device_start()
// our sound stream
//-------------------------------------------------
-void lmc1992_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
+void lmc1992_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
}
diff --git a/src/devices/sound/lmc1992.h b/src/devices/sound/lmc1992.h
index cfaffc1f13f..beb893d9983 100644
--- a/src/devices/sound/lmc1992.h
+++ b/src/devices/sound/lmc1992.h
@@ -71,7 +71,7 @@ protected:
virtual void device_start() override;
// internal callbacks
- virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
+ virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
private:
inline void execute_command(int addr, int data);
diff --git a/src/devices/sound/mas3507d.cpp b/src/devices/sound/mas3507d.cpp
index 641ec52a06e..b024b6408cd 100644
--- a/src/devices/sound/mas3507d.cpp
+++ b/src/devices/sound/mas3507d.cpp
@@ -29,7 +29,7 @@ mas3507d_device::mas3507d_device(const machine_config &mconfig, const char *tag,
void mas3507d_device::device_start()
{
current_rate = 44100;
- stream = stream_alloc_legacy(0, 2, current_rate);
+ stream = stream_alloc(0, 2, current_rate);
cb_sample.resolve();
}
@@ -359,27 +359,25 @@ void mas3507d_device::fill_buffer()
}
}
-void mas3507d_device::append_buffer(stream_sample_t * const *outputs, int &pos, int scount)
+void mas3507d_device::append_buffer(std::vector<write_stream_view> &outputs, int &pos, int scount)
{
- if(!sample_count)
- return;
-
buffered_frame_count = scount;
int s1 = scount - pos;
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_sample_t v = samples[i];
- outputs[0][i+pos] = v;
- outputs[1][i+pos] = v;
+ 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);
}
} else {
for(int i=0; i<s1; i++) {
- outputs[0][i+pos] = samples[i*2];
- outputs[1][i+pos] = samples[i*2+1];
+ 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);
}
}
@@ -400,8 +398,9 @@ void mas3507d_device::append_buffer(stream_sample_t * const *outputs, int &pos,
total_frame_count += s1;
}
-void mas3507d_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int csamples)
+void mas3507d_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
+ int csamples = outputs[0].samples();
int pos = 0;
append_buffer(outputs, pos, csamples);
@@ -419,10 +418,8 @@ void mas3507d_device::sound_stream_update_legacy(sound_stream &stream, stream_sa
total_frame_count = 0;
buffered_frame_count = 0;
- for(int i=pos; i != csamples; i++) {
- outputs[0][i] = 0;
- outputs[1][i] = 0;
- }
+ outputs[0].fill(0, pos);
+ outputs[1].fill(0, pos);
return;
}
append_buffer(outputs, pos, csamples);
diff --git a/src/devices/sound/mas3507d.h b/src/devices/sound/mas3507d.h
index 31410fa576e..b04e157e2f2 100644
--- a/src/devices/sound/mas3507d.h
+++ b/src/devices/sound/mas3507d.h
@@ -27,7 +27,7 @@ public:
protected:
virtual void device_start() override;
virtual void device_reset() override;
- virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
+ virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
private:
devcb_read16 cb_sample;
@@ -63,7 +63,7 @@ private:
void reg_write(uint32_t adr, uint32_t val);
void fill_buffer();
- void append_buffer(stream_sample_t * const *outputs, int &pos, int samples);
+ void append_buffer(std::vector<write_stream_view> &outputs, int &pos, int samples);
};
diff --git a/src/devices/sound/mea8000.cpp b/src/devices/sound/mea8000.cpp
index 4f7fbc453ac..3cf2ad51a6e 100644
--- a/src/devices/sound/mea8000.cpp
+++ b/src/devices/sound/mea8000.cpp
@@ -134,7 +134,7 @@ void mea8000_device::device_start()
init_tables();
- m_stream = stream_alloc_legacy(0, 1, clock() / 60);
+ m_stream = stream_alloc(0, 1, clock() / 60);
save_item(NAME(m_output));
m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mea8000_device::timer_expire),this));
@@ -422,12 +422,9 @@ void mea8000_device::stop_frame()
-void mea8000_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
+void mea8000_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
- for (int samp = 0; samp < samples; samp++)
- {
- outputs[0][samp] = m_output;
- }
+ outputs[0].fill(stream_buffer::sample_t(m_output) * (1.0 / 32768.0));
}
/* next sample in frame, sampling at 64 kHz */
diff --git a/src/devices/sound/mea8000.h b/src/devices/sound/mea8000.h
index 14cb0384d09..7538bffa62c 100644
--- a/src/devices/sound/mea8000.h
+++ b/src/devices/sound/mea8000.h
@@ -29,7 +29,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
+ virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
private:
/* filter coefficients from frequencies */
@@ -111,7 +111,7 @@ private:
emu_timer *m_timer = nullptr;
sound_stream * m_stream = nullptr;
- stream_sample_t m_output = 0;
+ int32_t m_output = 0;
int m_cos_table[TABLE_LEN]; /* fm => cos coefficient */
int m_exp_table[TABLE_LEN]; /* bw => exp coefficient */
diff --git a/src/devices/sound/mos6560.cpp b/src/devices/sound/mos6560.cpp
index 05ab0bcd08e..8522a9b8b6d 100644
--- a/src/devices/sound/mos6560.cpp
+++ b/src/devices/sound/mos6560.cpp
@@ -622,11 +622,11 @@ void mos6560_device::sound_start()
{
int i;
- m_channel = stream_alloc_legacy(0, 1, machine().sample_rate());
+ m_channel = stream_alloc(0, 1, machine().sample_rate());
/* buffer for fastest played sample for 5 second so we have enough data for min 5 second */
m_noisesize = NOISE_FREQUENCY_MAX * NOISE_BUFFER_SIZE_SEC;
- m_noise = std::make_unique<int8_t[]>(m_noisesize);
+ m_noise.resize(m_noisesize);
{
int noiseshift = 0x7ffff8;
char data;
@@ -661,17 +661,13 @@ void mos6560_device::sound_start()
if (m_tonesize > 0)
{
- m_tone = std::make_unique<int16_t[]>(m_tonesize);
+ m_tone.resize(m_tonesize);
for (i = 0; i < m_tonesize; i++)
{
m_tone[i] = (int16_t)(sin (2 * M_PI * i / m_tonesize) * 127 + 0.5);
}
}
- else
- {
- m_tone = nullptr;
- }
}
@@ -891,12 +887,13 @@ void mos6560_device::device_timer(emu_timer &timer, device_timer_id id, int para
// sound_stream_update_legacy - handle a stream update
//-------------------------------------------------
-void mos6560_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
+void mos6560_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
int i, v;
- stream_sample_t *buffer = outputs[0];
+ auto &buffer = outputs[0];
- for (i = 0; i < samples; i++)
+ constexpr stream_buffer::sample_t sample_scale = 1.0 / 8192.0;
+ for (i = 0; i < buffer.samples(); i++)
{
v = 0;
if (TONE1_ON /*||(m_tone1pos != 0) */ )
@@ -909,7 +906,7 @@ void mos6560_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
if (m_tone1pos >= m_tone1samples)
{
m_tone1pos = 0;
- m_tone1samples = machine().sample_rate() / TONE1_FREQUENCY;
+ m_tone1samples = buffer.sample_rate() / TONE1_FREQUENCY;
if (m_tone1samples == 0)
m_tone1samples = 1;
}
@@ -925,7 +922,7 @@ void mos6560_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
if (m_tone2pos >= m_tone2samples)
{
m_tone2pos = 0;
- m_tone2samples = machine().sample_rate() / TONE2_FREQUENCY;
+ m_tone2samples = buffer.sample_rate() / TONE2_FREQUENCY;
if (m_tone2samples == 0)
m_tone2samples = 1;
}
@@ -941,7 +938,7 @@ void mos6560_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
if (m_tone3pos >= m_tone3samples)
{
m_tone3pos = 0;
- m_tone3samples = machine().sample_rate() / TONE3_FREQUENCY;
+ m_tone3samples = buffer.sample_rate() / TONE3_FREQUENCY;
if (m_tone3samples == 0)
m_tone3samples = 1;
}
@@ -956,12 +953,11 @@ void mos6560_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
m_noisepos = 0;
}
}
- v = (v * VOLUME) << 2;
- if (v > 32767)
- buffer[i] = 32767;
- else if (v < -32767)
- buffer[i] = -32767;
- else
- buffer[i] = v;
+ v *= VOLUME;
+ if (v > 8191)
+ v = 8191;
+ else if (v < -8191)
+ v = -8191;
+ buffer.put(i, stream_buffer::sample_t(v) * sample_scale);
}
}
diff --git a/src/devices/sound/mos6560.h b/src/devices/sound/mos6560.h
index cf657255198..6937fdf4eac 100644
--- a/src/devices/sound/mos6560.h
+++ b/src/devices/sound/mos6560.h
@@ -124,7 +124,7 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// sound stream update overrides
- virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
+ virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
inline uint8_t read_videoram(offs_t offset);
inline uint8_t read_colorram(offs_t offset);
@@ -176,8 +176,8 @@ protected:
m_noisesamples; /* count of samples to give out per tone */
sound_stream *m_channel;
- std::unique_ptr<int16_t[]> m_tone;
- std::unique_ptr<int8_t[]> m_noise;
+ std::vector<int16_t> m_tone;
+ std::vector<int8_t> m_noise;
emu_timer *m_line_timer;
};
diff --git a/src/devices/sound/mos6581.cpp b/src/devices/sound/mos6581.cpp
index 2fe073a1347..0870631ad47 100644
--- a/src/devices/sound/mos6581.cpp
+++ b/src/devices/sound/mos6581.cpp
@@ -199,7 +199,7 @@ void mos6581_device::device_start()
m_read_poty.resolve_safe(0xff);
// create sound stream
- m_stream = stream_alloc_legacy(0, 1, machine().sample_rate());
+ m_stream = stream_alloc(0, 1, machine().sample_rate());
// initialize SID engine
m_token->device = this;
@@ -239,9 +239,9 @@ void mos6581_device::device_post_load()
// our sound stream
//-------------------------------------------------
-void mos6581_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
+void mos6581_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
- m_token->fill_buffer(outputs[0], samples);
+ m_token->fill_buffer(outputs[0]);
}
diff --git a/src/devices/sound/mos6581.h b/src/devices/sound/mos6581.h
index 47e5959ef41..de05db489d3 100644
--- a/src/devices/sound/mos6581.h
+++ b/src/devices/sound/mos6581.h
@@ -65,7 +65,7 @@ protected:
virtual void device_post_load() override;
// device_sound_interface overrides
- virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
+ virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
void save_state(SID6581_t *token);
private:
diff --git a/src/devices/sound/mos7360.cpp b/src/devices/sound/mos7360.cpp
index 9105fd656e3..3ca5e48ef8f 100644
--- a/src/devices/sound/mos7360.cpp
+++ b/src/devices/sound/mos7360.cpp
@@ -297,7 +297,7 @@ void mos7360_device::device_start()
screen().register_screen_bitmap(m_bitmap);
// create sound stream
- m_stream = stream_alloc_legacy(0, 1, machine().sample_rate());
+ m_stream = stream_alloc(0, 1, machine().sample_rate());
// buffer for fastest played sample for 5 second so we have enough data for min 5 second
m_noisesize = NOISE_FREQUENCY_MAX * NOISE_BUFFER_SIZE_SEC;
@@ -454,16 +454,17 @@ void mos7360_device::device_timer(emu_timer &timer, device_timer_id id, int para
//-------------------------------------------------
-// sound_stream_update_legacy - handle update requests for
+// sound_stream_update - handle update requests for
// our sound stream
//-------------------------------------------------
-void mos7360_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
+void mos7360_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
int i, v, a;
- stream_sample_t *buffer = outputs[0];
+ auto &buffer = outputs[0];
- for (i = 0; i < samples; i++)
+ constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
+ for (i = 0; i < buffer.samples(); i++)
{
v = 0;
@@ -506,7 +507,7 @@ void mos7360_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
v = v * a;
- buffer[i] = v;
+ buffer.put(i, stream_buffer::sample_t(v) * sample_scale);
}
}
diff --git a/src/devices/sound/mos7360.h b/src/devices/sound/mos7360.h
index 7e41bddb7c6..c8733dc3e46 100644
--- a/src/devices/sound/mos7360.h
+++ b/src/devices/sound/mos7360.h
@@ -110,7 +110,7 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_sound_interface callbacks
- virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
+ virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
inline void set_interrupt(int mask);
inline void clear_interrupt(int mask);
diff --git a/src/devices/sound/msm5232.cpp b/src/devices/sound/msm5232.cpp
index da8fc499dc7..43d02d542e7 100644
--- a/src/devices/sound/msm5232.cpp
+++ b/src/devices/sound/msm5232.cpp
@@ -34,7 +34,7 @@ void msm5232_device::device_start()
init(clock(), rate);
- m_stream = stream_alloc_legacy(0, 11, rate);
+ m_stream = stream_alloc(0, 11, rate);
/* register with the save state system */
save_item(NAME(m_EN_out16));
@@ -725,34 +725,35 @@ void msm5232_device::set_clock(int clock)
//-------------------------------------------------
-// sound_stream_update_legacy - handle a stream update
+// sound_stream_update - handle a stream update
//-------------------------------------------------
-void msm5232_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
+void msm5232_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
- stream_sample_t *buf1 = outputs[0];
- stream_sample_t *buf2 = outputs[1];
- stream_sample_t *buf3 = outputs[2];
- stream_sample_t *buf4 = outputs[3];
- stream_sample_t *buf5 = outputs[4];
- stream_sample_t *buf6 = outputs[5];
- stream_sample_t *buf7 = outputs[6];
- stream_sample_t *buf8 = outputs[7];
- stream_sample_t *bufsolo1 = outputs[8];
- stream_sample_t *bufsolo2 = outputs[9];
- stream_sample_t *bufnoise = outputs[10];
+ auto &buf1 = outputs[0];
+ auto &buf2 = outputs[1];
+ auto &buf3 = outputs[2];
+ auto &buf4 = outputs[3];
+ auto &buf5 = outputs[4];
+ auto &buf6 = outputs[5];
+ auto &buf7 = outputs[6];
+ auto &buf8 = outputs[7];
+ auto &bufsolo1 = outputs[8];
+ auto &bufsolo2 = outputs[9];
+ auto &bufnoise = outputs[10];
int i;
- for (i=0; i<samples; 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[i] = o2;
- buf2[i] = o4;
- buf3[i] = o8;
- buf4[i] = o16;
+ 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);
SAVE_SINGLE_CHANNEL(0,o2)
SAVE_SINGLE_CHANNEL(1,o4)
@@ -760,13 +761,13 @@ void msm5232_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
SAVE_SINGLE_CHANNEL(3,o16)
TG_group_advance(1); /* calculate tones group 2 */
- buf5[i] = o2;
- buf6[i] = o4;
- buf7[i] = o8;
- buf8[i] = o16;
+ 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);
- bufsolo1[i] = solo8;
- bufsolo2[i] = solo16;
+ bufsolo1.put(i, stream_buffer::sample_t(solo8) * sample_scale);
+ bufsolo2.put(i, stream_buffer::sample_t(solo16) * sample_scale);
SAVE_SINGLE_CHANNEL(4,o2)
SAVE_SINGLE_CHANNEL(5,o4)
@@ -794,6 +795,6 @@ void msm5232_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
}
}
- bufnoise[i] = (m_noise_rng & (1<<16)) ? 32767 : 0;
+ bufnoise.put(i, (m_noise_rng & (1<<16)) ? 1.0 : 0.0);
}
}
diff --git a/src/devices/sound/msm5232.h b/src/devices/sound/msm5232.h
index 364f944353b..552cd7669e3 100644
--- a/src/devices/sound/msm5232.h
+++ b/src/devices/sound/msm5232.h
@@ -26,7 +26,7 @@ protected:
virtual void device_post_load() override;
// sound stream update overrides
- virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
+ virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
private:
struct VOICE {
diff --git a/src/devices/sound/multipcm.cpp b/src/devices/sound/multipcm.cpp
index c4a5892990f..150cbd73301 100644
--- a/src/devices/sound/multipcm.cpp
+++ b/src/devices/sound/multipcm.cpp
@@ -479,7 +479,7 @@ void multipcm_device::device_start()
const float clock_divider = 180.0f;
m_rate = (float)clock() / clock_divider;
- m_stream = stream_alloc_legacy(0, 2, m_rate);
+ m_stream = stream_alloc(0, 2, m_rate);
// Volume + pan table
m_left_pan_table = make_unique_clear<int32_t[]>(0x800);
@@ -628,20 +628,21 @@ void multipcm_device::device_clock_changed()
}
//-----------------------------------------------------
-// clamp_to_int16 - clamp a 32-bit value to 16 bits
+// convert_to_stream_sample - clamp a 32-bit value to
+// 16 bits and convert to a stream_buffer::sample_t
//-----------------------------------------------------
-int16_t multipcm_device::clamp_to_int16(int32_t value)
+stream_buffer::sample_t multipcm_device::convert_to_stream_sample(int32_t value)
{
if (value < -32768)
{
- return -32768;
+ return -1.0;
}
else if (value > 32767)
{
- return 32767;
+ return 1.0;
}
- return (int16_t)value;
+ return stream_buffer::sample_t(value) * (1.0 / 32768.0);
}
#if MULTIPCM_LOG_SAMPLES
@@ -677,20 +678,12 @@ void multipcm_device::dump_sample(slot_t &slot)
#endif
//-------------------------------------------------
-// sound_stream_update_legacy - handle a stream update
+// sound_stream_update - handle a stream update
//-------------------------------------------------
-void multipcm_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int32_t samples)
+void multipcm_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
- stream_sample_t *datap[2];
-
- datap[0] = outputs[0];
- datap[1] = outputs[1];
-
- memset(datap[0], 0, sizeof(*datap[0]) * samples);
- memset(datap[1], 0, sizeof(*datap[1]) * samples);
-
- for (int32_t i = 0; i < samples; ++i)
+ for (int32_t i = 0; i < outputs[0].samples(); ++i)
{
int32_t smpl = 0;
int32_t smpr = 0;
@@ -741,8 +734,8 @@ void multipcm_device::sound_stream_update_legacy(sound_stream &stream, stream_sa
}
}
- datap[0][i] = clamp_to_int16(smpl);
- datap[1][i] = clamp_to_int16(smpr);
+ outputs[0].put(i, convert_to_stream_sample(smpl));
+ outputs[1].put(i, convert_to_stream_sample(smpr));
}
}
diff --git a/src/devices/sound/multipcm.h b/src/devices/sound/multipcm.h
index 4308703b9dc..0298adbdae4 100644
--- a/src/devices/sound/multipcm.h
+++ b/src/devices/sound/multipcm.h
@@ -29,7 +29,7 @@ protected:
virtual void device_clock_changed() override;
// sound stream update overrides
- virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
+ virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
// device_rom_interface overrides
virtual void rom_bank_updated() override;
@@ -135,7 +135,7 @@ private:
void write_slot(slot_t &slot, int32_t reg, uint8_t data);
- int16_t clamp_to_int16(int32_t value);
+ stream_buffer::sample_t convert_to_stream_sample(int32_t value);
#if MULTIPCM_LOG_SAMPLES
void dump_sample(slot_t &slot);
diff --git a/src/devices/sound/sid.cpp b/src/devices/sound/sid.cpp
index 26ba13a1f4b..86264810fda 100644
--- a/src/devices/sound/sid.cpp
+++ b/src/devices/sound/sid.cpp
@@ -29,34 +29,10 @@ float filterResTable[16];
#define maxLogicalVoices 4
-const int mix16monoMiddleIndex = 256*maxLogicalVoices/2;
-uint16_t mix16mono[256*maxLogicalVoices];
-
-uint16_t zero16bit = 0; /* either signed or unsigned */
-//uint32_t splitBufferLen;
-
-void MixerInit(int threeVoiceAmplify)
+inline stream_buffer::sample_t mix_mono(uint16_t usum)
{
- long si;
- uint16_t ui;
- long ampDiv = maxLogicalVoices;
-
- if (threeVoiceAmplify)
- {
- ampDiv = (maxLogicalVoices-1);
- }
-
- /* Mixing formulas are optimized by sample input value. */
-
- si = (-128*maxLogicalVoices) * 256;
- for (ui = 0; ui < sizeof(mix16mono)/sizeof(uint16_t); ui++)
- {
- mix16mono[ui] = (uint16_t)(si/ampDiv) + zero16bit;
- si+=256;
- }
-
+ return stream_buffer::sample_t(int16_t(usum - maxLogicalVoices*128)) * (1.0 / (256 * maxLogicalVoices));
}
-
} // anonymous namespace
@@ -85,22 +61,22 @@ inline void SID6581_t::syncEm()
}
-void SID6581_t::fill_buffer(stream_sample_t *buffer, uint32_t bufferLen)
+void SID6581_t::fill_buffer(write_stream_view &buffer)
{
//void* SID6581_t::fill16bitMono(void* buffer, uint32_t numberOfSamples)
- for (; bufferLen > 0; bufferLen--)
+ for (int sampindex = 0; sampindex < buffer.samples(); sampindex++)
{
- *buffer++ = (int16_t) mix16mono[unsigned(mix16monoMiddleIndex
- +(*optr[0].outProc)(&optr[0])
+ buffer.put(sampindex, mix_mono(
+ (*optr[0].outProc)(&optr[0])
+(*optr[1].outProc)(&optr[1])
- +(optr[2].outProc(&optr[2])&optr3_outputmask)
+ +((*optr[2].outProc)(&optr[2])&optr3_outputmask)
/* hack for digi sounds
does n't seam to come from a tone operator
ghostbusters and goldrunner everything except volume zeroed */
+(masterVolume<<2)
// +(*sampleEmuRout)()
- )];
+ ));
syncEm();
}
}
@@ -227,8 +203,6 @@ void SID6581_t::init()
enveEmuInit(PCMfreq, true);
- MixerInit(0);
-
reset();
}
diff --git a/src/devices/sound/sid.h b/src/devices/sound/sid.h
index 6e5ad1dfa3f..ecf27c2b300 100644
--- a/src/devices/sound/sid.h
+++ b/src/devices/sound/sid.h
@@ -63,7 +63,7 @@ struct SID6581_t
int port_r(running_machine &machine, int offset);
void port_w(int offset, int data);
- void fill_buffer(stream_sample_t *buffer, uint32_t bufferLen);
+ void fill_buffer(write_stream_view &buffer);
private:
void syncEm();