t6721a/t6w28/tc8830f/tia/tms36xx/tms5110/upd1771/upd7752/upd934g/vlm5030/vrc6/vrender0/wave/x1_010: update to new stream callbacks

This commit is contained in:
Aaron Giles 2020-09-21 18:59:41 -07:00
parent 71565b91dd
commit ecd3333757
39 changed files with 154 additions and 186 deletions

View File

@ -862,7 +862,7 @@ discrete_device::~discrete_device(void)
void discrete_device::device_start() void discrete_device::device_start()
{ {
// create the stream // create the stream
//m_stream = stream_alloc_legacy(0, 2, 22257); //m_stream = stream_alloc(0, 2, 22257);
const discrete_block *intf_start = m_intf; const discrete_block *intf_start = m_intf;

View File

@ -95,6 +95,7 @@ void dspv_device::snd_w(offs_t offset, u16 data)
void dspv_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) void dspv_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
outputs[0].fill(0);
} }
void dspv_device::device_start() void dspv_device::device_start()

View File

@ -92,6 +92,7 @@ void iop_spu_device::dma_done(int bank)
void iop_spu_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) void iop_spu_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
// TODO // TODO
outputs[0].fill(0);
} }
TIMER_CALLBACK_MEMBER(iop_spu_device::autodma_done_timer_hack) TIMER_CALLBACK_MEMBER(iop_spu_device::autodma_done_timer_hack)

View File

@ -177,6 +177,7 @@ void lmc1992_device::device_start()
void lmc1992_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) void lmc1992_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
outputs[0].fill(0);
} }

View File

@ -46,7 +46,7 @@ namco_63701x_device::namco_63701x_device(const machine_config &mconfig, const ch
void namco_63701x_device::device_start() void namco_63701x_device::device_start()
{ {
m_stream = stream_alloc_legacy(0, 2, clock()/1000); m_stream = stream_alloc(0, 2, clock()/1000);
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
{ {
@ -61,16 +61,16 @@ void namco_63701x_device::device_start()
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle a stream update // sound_stream_update - handle a stream update
//------------------------------------------------- //-------------------------------------------------
void namco_63701x_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void namco_63701x_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
int ch; int ch;
for (ch = 0;ch < 2;ch++) for (ch = 0;ch < 2;ch++)
{ {
stream_sample_t *buf = outputs[ch]; auto &buf = outputs[ch];
voice_63701x *v = &m_voices[ch]; voice_63701x *v = &m_voices[ch];
if (v->playing) if (v->playing)
@ -80,12 +80,12 @@ void namco_63701x_device::sound_stream_update_legacy(sound_stream &stream, strea
int vol = vol_table[v->volume]; int vol = vol_table[v->volume];
int p; int p;
for (p = 0;p < samples;p++) for (p = 0;p < buf.samples();p++)
{ {
if (v->silence_counter) if (v->silence_counter)
{ {
v->silence_counter--; v->silence_counter--;
*(buf++) = 0; buf.put(p, 0);
} }
else else
{ {
@ -94,17 +94,18 @@ void namco_63701x_device::sound_stream_update_legacy(sound_stream &stream, strea
if (data == 0xff) /* end of sample */ if (data == 0xff) /* end of sample */
{ {
v->playing = 0; v->playing = 0;
buf.fill(0, p);
break; break;
} }
else if (data == 0x00) /* silence compression */ else if (data == 0x00) /* silence compression */
{ {
data = base[(pos++) & 0xffff]; data = base[(pos++) & 0xffff];
v->silence_counter = data; v->silence_counter = data;
*(buf++) = 0; buf.put(p, 0);
} }
else else
{ {
*(buf++) = vol * (data - 0x80); buf.put_int(p, vol * (data - 0x80), 32768);
} }
} }
} }
@ -112,7 +113,7 @@ void namco_63701x_device::sound_stream_update_legacy(sound_stream &stream, strea
v->position = pos; v->position = pos;
} }
else else
memset(buf, 0, samples * sizeof(*buf)); buf.fill(0);
} }
} }

View File

@ -25,7 +25,7 @@ protected:
virtual void device_start() override; virtual void device_start() override;
// sound stream update overrides // 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: private:
struct voice_63701x struct voice_63701x

View File

@ -54,4 +54,5 @@ void pcd3311_device::device_start()
void pcd3311_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) void pcd3311_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
outputs[0].fill(0);
} }

View File

@ -71,5 +71,6 @@ void swp20_device::snd_w(offs_t offset, u8 data)
void swp20_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) void swp20_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
outputs[0].fill(0);
} }

View File

@ -56,17 +56,18 @@ void t6721a_device::device_start()
m_write_apd.resolve_safe(); m_write_apd.resolve_safe();
// create sound stream // create sound stream
m_stream = stream_alloc_legacy(0, 1, machine().sample_rate()); m_stream = stream_alloc(0, 1, machine().sample_rate());
} }
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle update requests for // sound_stream_update - handle update requests for
// our sound stream // our sound stream
//------------------------------------------------- //-------------------------------------------------
void t6721a_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void t6721a_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
outputs[0].fill(0);
} }

View File

@ -65,7 +65,7 @@ protected:
virtual void device_start() override; virtual void device_start() override;
// device_sound_interface overrides // 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;
private: private:
enum enum

View File

@ -101,14 +101,14 @@ void t6w28_device::write(offs_t offset, uint8_t data)
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle a stream update // sound_stream_update - handle a stream update
//------------------------------------------------- //-------------------------------------------------
void t6w28_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void t6w28_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
int i; int i;
stream_sample_t *buffer0 = outputs[0]; auto &buffer0 = outputs[0];
stream_sample_t *buffer1 = outputs[1]; auto &buffer1 = outputs[1];
/* If the volume is 0, increase the counter */ /* If the volume is 0, increase the counter */
@ -119,11 +119,11 @@ void t6w28_device::sound_stream_update_legacy(sound_stream &stream, stream_sampl
/* note that I do count += samples, NOT count = samples + 1. You might think */ /* note that I do count += samples, NOT count = samples + 1. You might think */
/* it's the same since the volume is 0, but doing the latter could cause */ /* it's the same since the volume is 0, but doing the latter could cause */
/* interferencies when the program is rapidly modulating the volume. */ /* interferencies when the program is rapidly modulating the volume. */
if (m_count[i] <= samples*STEP) m_count[i] += samples*STEP; if (m_count[i] <= buffer0.samples()*STEP) m_count[i] += buffer0.samples()*STEP;
} }
} }
while (samples > 0) for (int sampindex = 0; sampindex < buffer0.samples(); sampindex++)
{ {
int vol[8]; int vol[8];
unsigned int out0, out1; unsigned int out0, out1;
@ -252,10 +252,8 @@ void t6w28_device::sound_stream_update_legacy(sound_stream &stream, stream_sampl
if (out0 > MAX_OUTPUT * STEP) out0 = MAX_OUTPUT * STEP; if (out0 > MAX_OUTPUT * STEP) out0 = MAX_OUTPUT * STEP;
if (out1 > MAX_OUTPUT * STEP) out1 = MAX_OUTPUT * STEP; if (out1 > MAX_OUTPUT * STEP) out1 = MAX_OUTPUT * STEP;
*(buffer0++) = out0 / STEP; buffer0.put_int(sampindex, out0 / STEP, 32768);
*(buffer1++) = out1 / STEP; buffer1.put_int(sampindex, out1 / STEP, 32768);
samples--;
} }
} }
@ -296,7 +294,7 @@ void t6w28_device::device_start()
int i; int i;
m_sample_rate = clock() / 16; m_sample_rate = clock() / 16;
m_channel = stream_alloc_legacy(0, 2, m_sample_rate); m_channel = stream_alloc(0, 2, m_sample_rate);
for (i = 0;i < 8;i++) m_volume[i] = 0; for (i = 0;i < 8;i++) m_volume[i] = 0;

View File

@ -18,7 +18,7 @@ protected:
virtual void device_start() override; virtual void device_start() override;
// sound stream update overrides // 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;
void set_gain(int gain); void set_gain(int gain);

View File

@ -46,7 +46,7 @@ tc8830f_device::tc8830f_device(const machine_config &mconfig, const char *tag, d
void tc8830f_device::device_start() void tc8830f_device::device_start()
{ {
// create the stream // create the stream
m_stream = stream_alloc_legacy(0, 1, clock() / 0x10); m_stream = stream_alloc(0, 1, clock() / 0x10);
// register for savestates // register for savestates
save_item(NAME(m_playing)); save_item(NAME(m_playing));
@ -79,11 +79,11 @@ void tc8830f_device::device_clock_changed()
void tc8830f_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void tc8830f_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
int32_t mix = 0; int32_t mix = 0;
for (int i = 0; i < samples; i++) for (int i = 0; i < outputs[0].samples(); i++)
{ {
if (m_playing) if (m_playing)
{ {
@ -125,7 +125,7 @@ void tc8830f_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
mix = m_output; mix = m_output;
} }
outputs[0][i] = mix; outputs[0].put_int(i, mix, 32768);
} }
} }

View File

@ -32,7 +32,7 @@ protected:
virtual void device_post_load() override; virtual void device_post_load() override;
virtual void device_clock_changed() override; virtual void device_clock_changed() 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: private:
sound_stream *m_stream; sound_stream *m_stream;

View File

@ -31,7 +31,7 @@ tia_device::tia_device(const machine_config &mconfig, const char *tag, device_t
void tia_device::device_start() void tia_device::device_start()
{ {
m_channel = stream_alloc_legacy(0, 1, clock()); m_channel = stream_alloc(0, 1, clock());
m_chip = tia_sound_init(this, clock(), clock(), 16); m_chip = tia_sound_init(this, clock(), clock(), 16);
if (!m_chip) if (!m_chip)
throw emu_fatalerror("tia_device(%s): Error creating TIA chip", tag()); throw emu_fatalerror("tia_device(%s): Error creating TIA chip", tag());
@ -49,12 +49,12 @@ void tia_device::device_stop()
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle a stream update // sound_stream_update - handle a stream update
//------------------------------------------------- //-------------------------------------------------
void tia_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void tia_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
tia_process(m_chip, outputs[0], samples); tia_process(m_chip, outputs[0]);
} }

View File

@ -24,7 +24,7 @@ protected:
virtual void device_stop() override; virtual void device_stop() override;
// sound stream update overrides // 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: private:
sound_stream *m_channel; sound_stream *m_channel;

View File

@ -264,7 +264,7 @@ void tia_write(void *_chip, offs_t offset, uint8_t data)
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
void tia_process(void *_chip, stream_sample_t *buffer, int length) void tia_process(void *_chip, write_stream_view &buffer)
{ {
struct tia *chip = (struct tia *)_chip; struct tia *chip = (struct tia *)_chip;
uint8_t audc0, audc1; uint8_t audc0, audc1;
@ -286,7 +286,7 @@ void tia_process(void *_chip, stream_sample_t *buffer, int length)
div_n_cnt1 = chip->Div_n_cnt[1]; div_n_cnt1 = chip->Div_n_cnt[1];
/* loop until the buffer is filled */ /* loop until the buffer is filled */
while (length > 0) for (int sampindex = 0; sampindex < buffer.samples(); )
{ {
/* Process channel 0 */ /* Process channel 0 */
if (div_n_cnt0 > 1) if (div_n_cnt0 > 1)
@ -482,10 +482,7 @@ void tia_process(void *_chip, stream_sample_t *buffer, int length)
chip->Samp_n_cnt += chip->Samp_n_max; chip->Samp_n_cnt += chip->Samp_n_max;
/* calculate the latest output value and place in buffer */ /* calculate the latest output value and place in buffer */
*buffer++ = outvol_0 + outvol_1; buffer.put_int(sampindex++, outvol_0 + outvol_1, 32768);
/* and indicate one less byte to process */
length--;
} }
} }
else else
@ -496,10 +493,9 @@ void tia_process(void *_chip, stream_sample_t *buffer, int length)
* byte contains the fractional part */ * byte contains the fractional part */
chip->Samp_n_cnt -= 256; chip->Samp_n_cnt -= 256;
/* calculate the latest output value and place in buffer */ /* calculate the latest output value and place in buffer */
*buffer++ = outvol_0 + outvol_1; buffer.put_int(sampindex++, outvol_0 + outvol_1, 32768);
length--;
} }
while ((chip->Samp_n_cnt >= 256) && (length > 0)); while ((chip->Samp_n_cnt >= 256) && (sampindex < buffer.samples()));
/* adjust the sample counter if necessary */ /* adjust the sample counter if necessary */
if (chip->Samp_n_cnt < 256) if (chip->Samp_n_cnt < 256)

View File

@ -41,7 +41,7 @@
void *tia_sound_init(device_t *device, int clock, int sample_rate, int gain); void *tia_sound_init(device_t *device, int clock, int sample_rate, int gain);
void tia_sound_free(void *chip); void tia_sound_free(void *chip);
void tia_process(void *chip, stream_sample_t *buffer, int length); void tia_process(void *chip, write_stream_view &buffer);
void tia_write(void *chip, offs_t offset, uint8_t data); void tia_write(void *chip, offs_t offset, uint8_t data);
#endif // MAME_SOUND_TIASOUND_H #endif // MAME_SOUND_TIASOUND_H

View File

@ -46,7 +46,7 @@ void tms3615_device::device_start()
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle a stream update // sound_stream_update - handle a stream update
//------------------------------------------------- //-------------------------------------------------
void tms3615_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) void tms3615_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)

View File

@ -355,7 +355,7 @@ void tms36xx_device::device_start()
{ {
int enable = 0; int enable = 0;
m_channel = stream_alloc_legacy(0, 1, clock() * 64); m_channel = stream_alloc(0, 1, clock() * 64);
m_samplerate = clock() * 64; m_samplerate = clock() * 64;
m_basefreq = clock(); m_basefreq = clock();
@ -394,23 +394,22 @@ void tms36xx_device::device_start()
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle a stream update // sound_stream_update - handle a stream update
//------------------------------------------------- //-------------------------------------------------
void tms36xx_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void tms36xx_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
int samplerate = m_samplerate; int samplerate = m_samplerate;
stream_sample_t *buffer = outputs[0]; auto &buffer = outputs[0];
/* no tune played? */ /* no tune played? */
if( !tunes[m_tune_num] || m_voices == 0 ) if( !tunes[m_tune_num] || m_voices == 0 )
{ {
while (--samples >= 0) buffer.fill(0);
buffer[samples] = 0;
return; return;
} }
while( samples-- > 0 ) for (int sampindex = 0; sampindex < buffer.samples(); sampindex++)
{ {
int sum = 0; int sum = 0;
@ -444,7 +443,7 @@ void tms36xx_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
TONE( 0) TONE( 1) TONE( 2) TONE( 3) TONE( 4) TONE( 5) TONE( 0) TONE( 1) TONE( 2) TONE( 3) TONE( 4) TONE( 5)
TONE( 6) TONE( 7) TONE( 8) TONE( 9) TONE(10) TONE(11) TONE( 6) TONE( 7) TONE( 8) TONE( 9) TONE(10) TONE(11)
*buffer++ = sum / m_voices; buffer.put_int(sampindex, sum, 32768 * m_voices);
} }
} }

View File

@ -63,7 +63,7 @@ protected:
virtual void device_start() override; virtual void device_start() override;
// sound stream update overrides // 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;
public: public:
// MM6221AA interface functions // MM6221AA interface functions

View File

@ -1048,7 +1048,7 @@ void tms5110_device::device_start()
m_data_cb.resolve(); m_data_cb.resolve();
/* initialize a stream */ /* initialize a stream */
m_stream = stream_alloc_legacy(0, 1, clock() / 80); m_stream = stream_alloc(0, 1, clock() / 80);
m_state = CTL_STATE_INPUT; /* most probably not defined */ m_state = CTL_STATE_INPUT; /* most probably not defined */
m_romclk_hack_timer = timer_alloc(0); m_romclk_hack_timer = timer_alloc(0);
@ -1220,27 +1220,25 @@ int tms5110_device::romclk_hack_r()
******************************************************************************/ ******************************************************************************/
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle a stream update // sound_stream_update - handle a stream update
//------------------------------------------------- //-------------------------------------------------
void tms5110_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void tms5110_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
int16_t sample_data[MAX_SAMPLE_CHUNK]; int16_t sample_data[MAX_SAMPLE_CHUNK];
stream_sample_t *buffer = outputs[0]; auto &buffer = outputs[0];
/* loop while we still have samples to generate */ /* loop while we still have samples to generate */
while (samples) for (int sampindex = 0; sampindex < buffer.samples(); )
{ {
int length = (samples > MAX_SAMPLE_CHUNK) ? MAX_SAMPLE_CHUNK : samples; int length = buffer.samples() - sampindex;
int index; if (length > MAX_SAMPLE_CHUNK)
length = MAX_SAMPLE_CHUNK;
/* generate the samples and copy to the target buffer */ /* generate the samples and copy to the target buffer */
process(sample_data, length); process(sample_data, length);
for (index = 0; index < length; index++) for (int index = 0; index < length; index++)
*buffer++ = sample_data[index]; buffer.put_int(sampindex++, sample_data[index], 32768);
/* account for the samples */
samples -= length;
} }
} }

View File

@ -60,7 +60,7 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// sound stream update overrides // 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;
uint8_t TALK_STATUS() const { return m_SPEN | m_TALKD; } uint8_t TALK_STATUS() const { return m_SPEN | m_TALKD; }

View File

@ -255,7 +255,7 @@ void upd1771c_device::device_start()
m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(upd1771c_device::ack_callback),this)); m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(upd1771c_device::ack_callback),this));
m_channel = stream_alloc_legacy(0, 1, clock() / 4); m_channel = stream_alloc(0, 1, clock() / 4);
save_item(NAME(m_packet)); save_item(NAME(m_packet));
save_item(NAME(m_index)); save_item(NAME(m_index));
@ -476,12 +476,12 @@ TIMER_CALLBACK_MEMBER( upd1771c_device::ack_callback )
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle a stream update // sound_stream_update - handle a stream update
//------------------------------------------------- //-------------------------------------------------
void upd1771c_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void upd1771c_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
stream_sample_t *buffer = outputs[0]; auto &buffer = outputs[0];
switch (m_state) switch (m_state)
{ {
@ -489,9 +489,9 @@ void upd1771c_device::sound_stream_update_legacy(sound_stream &stream, stream_sa
//logerror( "upd1771_STATE_TONE samps:%d %d %d %d %d %d\n",(int)samples, //logerror( "upd1771_STATE_TONE samps:%d %d %d %d %d %d\n",(int)samples,
// (int)m_t_timbre,(int)m_t_offset,(int)m_t_volume,(int)m_t_period,(int)m_t_tpos); // (int)m_t_timbre,(int)m_t_offset,(int)m_t_volume,(int)m_t_period,(int)m_t_tpos);
while (--samples >= 0) for (int sampindex = 0; sampindex < buffer.samples(); sampindex++)
{ {
*buffer++ = (WAVEFORMS[m_t_timbre][m_t_tpos]) * m_t_volume * 2; buffer.put_int(sampindex, (WAVEFORMS[m_t_timbre][m_t_tpos]) * m_t_volume, 32768 / 2);
m_t_ppos++; m_t_ppos++;
if (m_t_ppos >= m_t_period) if (m_t_ppos >= m_t_period)
@ -506,10 +506,8 @@ void upd1771c_device::sound_stream_update_legacy(sound_stream &stream, stream_sa
break; break;
case STATE_NOISE: case STATE_NOISE:
while (--samples >= 0) for (int sampindex = 0; sampindex < buffer.samples(); sampindex++)
{ {
*buffer = 0;
//"wavetable-LFSR" component //"wavetable-LFSR" component
int wlfsr_val = ((int)noise_tbl[m_nw_tpos]) - 127;//data too wide int wlfsr_val = ((int)noise_tbl[m_nw_tpos]) - 127;//data too wide
@ -535,23 +533,18 @@ void upd1771c_device::sound_stream_update_legacy(sound_stream &stream, stream_sa
} }
} }
//not quite, but close. //not quite, but close.
*buffer+= ( buffer.put_int(sampindex,
(wlfsr_val * m_nw_volume) | (wlfsr_val * m_nw_volume) |
(res[0] * m_n_volume[0]) | (res[0] * m_n_volume[0]) |
(res[1] * m_n_volume[1]) | (res[1] * m_n_volume[1]) |
(res[2] * m_n_volume[2]) (res[2] * m_n_volume[2]),
) ; 32768) ;
buffer++;
} }
break; break;
default: default:
//fill buffer with silence //fill buffer with silence
while (--samples >= 0) buffer.fill(0);
{
*buffer++ = 0;
}
break; break;
} }
} }

View File

@ -32,7 +32,7 @@ protected:
virtual void device_reset() override; virtual void device_reset() override;
// sound stream update overrides // 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: private:
static constexpr unsigned MAX_PACKET_SIZE = 0x8000; static constexpr unsigned MAX_PACKET_SIZE = 0x8000;

View File

@ -72,7 +72,7 @@ device_memory_interface::space_config_vector upd7752_device::memory_space_config
void upd7752_device::device_start() void upd7752_device::device_start()
{ {
/* TODO: clock */ /* TODO: clock */
m_stream = stream_alloc_legacy(0, 1, clock() / 64); m_stream = stream_alloc(0, 1, clock() / 64);
m_status = 0; m_status = 0;
} }
@ -96,11 +96,12 @@ void upd7752_device::device_stop()
} }
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle a stream update // sound_stream_update - handle a stream update
//------------------------------------------------- //-------------------------------------------------
void upd7752_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void upd7752_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
outputs[0].fill(0);
} }
//************************************************************************** //**************************************************************************

View File

@ -30,7 +30,7 @@ protected:
virtual void device_stop() override; virtual void device_stop() override;
virtual void device_reset() 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;
virtual space_config_vector memory_space_config() const override; virtual space_config_vector memory_space_config() const override;
private: private:

View File

@ -49,7 +49,7 @@ upd934g_device::upd934g_device(const machine_config &mconfig, const char *tag, d
void upd934g_device::device_start() void upd934g_device::device_start()
{ {
// create sound stream // create sound stream
m_stream = stream_alloc_legacy(0, 4, 20000); m_stream = stream_alloc(0, 4, 20000);
// resolve callbacks // resolve callbacks
m_data_cb.resolve_safe(0); m_data_cb.resolve_safe(0);
@ -81,32 +81,33 @@ void upd934g_device::device_reset()
} }
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle update requests for // sound_stream_update - handle update requests for
// our sound stream // our sound stream
//------------------------------------------------- //-------------------------------------------------
void upd934g_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void upd934g_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
for (unsigned ch = 0; ch < 4; ch++) for (unsigned ch = 0; ch < 4; ch++)
{ {
std::fill(&outputs[ch][0], &outputs[ch][samples], 0);
if (m_ready && m_channel[ch].playing != -1) if (m_ready && m_channel[ch].playing != -1)
{ {
uint16_t end = m_addr[m_channel[ch].playing + 1] - 1; uint16_t end = m_addr[m_channel[ch].playing + 1] - 1;
for (unsigned i = 0; i < samples; i++) for (unsigned i = 0; i < outputs[ch].samples(); i++)
{ {
int8_t raw = static_cast<int8_t>(m_data_cb(m_channel[ch].pos)); int8_t raw = static_cast<int8_t>(m_data_cb(m_channel[ch].pos));
outputs[ch][i] = raw * (m_channel[ch].volume + 1) * 64; outputs[ch].put_int(i, raw * (m_channel[ch].volume + 1), 32768 / 64);
if (++m_channel[ch].pos >= end) if (++m_channel[ch].pos >= end)
{ {
m_channel[ch].playing = -1; m_channel[ch].playing = -1;
outputs[ch].fill(0, i + 1);
break; break;
} }
} }
} }
else
outputs[ch].fill(0);
} }
} }

View File

@ -36,7 +36,7 @@ protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() 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: private:
devcb_read8 m_data_cb; devcb_read8 m_data_cb;

View File

@ -214,7 +214,7 @@ void vlm5030_device::device_start()
device_reset(); device_reset();
m_phase = PH_IDLE; m_phase = PH_IDLE;
m_channel = stream_alloc_legacy(0, 1, clock() / 440); m_channel = stream_alloc(0, 1, clock() / 440);
save_item(NAME(m_address)); save_item(NAME(m_address));
save_item(NAME(m_pin_BSY)); save_item(NAME(m_pin_BSY));
@ -491,22 +491,22 @@ if( m_interp_step != 1)
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle a stream update // sound_stream_update - handle a stream update
//------------------------------------------------- //-------------------------------------------------
void vlm5030_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void vlm5030_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
int buf_count=0;
int interp_effect; int interp_effect;
int i; int i;
int u[11]; int u[11];
stream_sample_t *buffer = outputs[0]; auto &buffer = outputs[0];
/* running */ /* running */
int sampindex = 0;
if( m_phase == PH_RUN || m_phase == PH_STOP ) if( m_phase == PH_RUN || m_phase == PH_STOP )
{ {
/* playing speech */ /* playing speech */
while (samples > 0) for ( ; sampindex < buffer.samples(); sampindex++)
{ {
int current_val; int current_val;
@ -592,13 +592,7 @@ void vlm5030_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
m_x[0] = u[0]; m_x[0] = u[0];
/* clipping, buffering */ /* clipping, buffering */
if (u[0] > 511) buffer.put_int_clamp(sampindex, u[0], 512);
buffer[buf_count] = 511<<6;
else if (u[0] < -511)
buffer[buf_count] = uint32_t(-511)<<6;
else
buffer[buf_count] = (u[0] << 6);
buf_count++;
/* sample count */ /* sample count */
m_sample_count--; m_sample_count--;
@ -607,7 +601,6 @@ void vlm5030_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
if (m_pitch_count >= m_current_pitch ) if (m_pitch_count >= m_current_pitch )
m_pitch_count = 0; m_pitch_count = 0;
/* size */ /* size */
samples--;
} }
/* return;*/ /* return;*/
} }
@ -616,7 +609,7 @@ phase_stop:
switch( m_phase ) switch( m_phase )
{ {
case PH_SETUP: case PH_SETUP:
if( m_sample_count <= samples) if( m_sample_count <= buffer.samples())
{ {
m_sample_count = 0; m_sample_count = 0;
/* logerror("VLM5030 BSY=H\n" ); */ /* logerror("VLM5030 BSY=H\n" ); */
@ -625,11 +618,11 @@ phase_stop:
} }
else else
{ {
m_sample_count -= samples; m_sample_count -= buffer.samples();
} }
break; break;
case PH_END: case PH_END:
if( m_sample_count <= samples) if( m_sample_count <= buffer.samples())
{ {
m_sample_count = 0; m_sample_count = 0;
/* logerror("VLM5030 BSY=L\n" ); */ /* logerror("VLM5030 BSY=L\n" ); */
@ -638,13 +631,9 @@ phase_stop:
} }
else else
{ {
m_sample_count -= samples; m_sample_count -= buffer.samples();
} }
} }
/* silent buffering */ /* silent buffering */
while (samples > 0) buffer.fill(0, sampindex);
{
buffer[buf_count++] = 0x00;
samples--;
}
} }

View File

@ -34,7 +34,7 @@ protected:
virtual void device_post_load() override; virtual void device_post_load() override;
// sound stream update overrides // 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 // device_rom_interface overrides
virtual void rom_bank_updated() override; virtual void rom_bank_updated() override;

View File

@ -45,7 +45,7 @@ vrc6snd_device::vrc6snd_device(const machine_config &mconfig, const char *tag, d
void vrc6snd_device::device_start() void vrc6snd_device::device_start()
{ {
m_stream = stream_alloc_legacy(0, 1, clock()); m_stream = stream_alloc(0, 1, clock());
m_freqctrl = m_pulsectrl[0] = m_pulsectrl[1] = 0; m_freqctrl = m_pulsectrl[0] = m_pulsectrl[1] = 0;
m_pulsefrql[0] = m_pulsefrql[1] = m_pulsefrqh[0] = m_pulsefrqh[1] = 0; m_pulsefrql[0] = m_pulsefrql[1] = m_pulsefrqh[0] = m_pulsefrqh[1] = 0;
@ -89,19 +89,20 @@ void vrc6snd_device::device_reset()
} }
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle update requests for // sound_stream_update - handle update requests for
// our sound stream // our sound stream
//------------------------------------------------- //-------------------------------------------------
void vrc6snd_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void vrc6snd_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
std::fill_n(&outputs[0][0], samples, 0);
// check global halt bit // check global halt bit
if (m_freqctrl & 1) if (m_freqctrl & 1)
{
outputs[0].fill(0);
return; return;
}
for (int i = 0; i < samples; i++) for (int i = 0; i < outputs[0].samples(); i++)
{ {
// update pulse1 // update pulse1
if (m_pulsefrqh[0] & 0x80) if (m_pulsefrqh[0] & 0x80)
@ -198,9 +199,8 @@ void vrc6snd_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
// sum 2 4-bit pulses, 1 5-bit saw = unsigned 6 bit output // sum 2 4-bit pulses, 1 5-bit saw = unsigned 6 bit output
s16 tmp = (s16)(u8)(m_output[0] + m_output[1] + m_output[2]); s16 tmp = (s16)(u8)(m_output[0] + m_output[1] + m_output[2]);
tmp <<= 8;
outputs[0][i] = tmp; outputs[0].put_int(i, tmp, 128);
} }
} }

View File

@ -31,7 +31,7 @@ protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() 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: private:
u8 m_freqctrl, m_pulsectrl[2], m_sawrate, m_master_freq; u8 m_freqctrl, m_pulsectrl[2], m_sawrate, m_master_freq;

View File

@ -148,7 +148,7 @@ void vr0sound_device::device_start()
for (auto &elem : m_channel) for (auto &elem : m_channel)
elem.Cache = &m_fbcache; elem.Cache = &m_fbcache;
m_stream = stream_alloc_legacy(0, 2, clock() / 972); // TODO : Correct source / divider? m_stream = stream_alloc(0, 2, clock() / 972); // TODO : Correct source / divider?
save_item(STRUCT_MEMBER(m_channel, CurSAddr)); save_item(STRUCT_MEMBER(m_channel, CurSAddr));
save_item(STRUCT_MEMBER(m_channel, EnvVol)); save_item(STRUCT_MEMBER(m_channel, EnvVol));
@ -208,13 +208,13 @@ device_memory_interface::space_config_vector vr0sound_device::memory_space_confi
} }
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle update requests // sound_stream_update - handle update requests
// for our sound stream // for our sound stream
//------------------------------------------------- //-------------------------------------------------
void vr0sound_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void vr0sound_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
VR0_RenderAudio(samples, outputs[0], outputs[1]); VR0_RenderAudio(outputs[0], outputs[1]);
} }
u16 vr0sound_device::channel_r(offs_t offset) u16 vr0sound_device::channel_r(offs_t offset)
@ -500,7 +500,7 @@ void vr0sound_device::channel_t::write(offs_t offset, u16 data, u16 mem_mask)
} }
} }
void vr0sound_device::VR0_RenderAudio(int nsamples, stream_sample_t *l, stream_sample_t *r) void vr0sound_device::VR0_RenderAudio(write_stream_view &l, write_stream_view &r)
{ {
int div; int div;
if (m_ChnClkNum) if (m_ChnClkNum)
@ -508,7 +508,7 @@ void vr0sound_device::VR0_RenderAudio(int nsamples, stream_sample_t *l, stream_s
else else
div = 1 << 16; div = 1 << 16;
for (int s = 0; s < nsamples; s++) for (int s = 0; s < l.samples(); s++)
{ {
s32 lsample = 0, rsample = 0; s32 lsample = 0, rsample = 0;
for (int i = 0; i <= m_MaxChn; i++) for (int i = 0; i <= m_MaxChn; i++)
@ -590,7 +590,7 @@ void vr0sound_device::VR0_RenderAudio(int nsamples, stream_sample_t *l, stream_s
lsample += (sample * channel->LChnVol) >> 8; lsample += (sample * channel->LChnVol) >> 8;
rsample += (sample * channel->RChnVol) >> 8; rsample += (sample * channel->RChnVol) >> 8;
} }
l[s] = std::max(-32768, std::min(32767, lsample)); l.put_int_clamp(s, lsample, 32768);
r[s] = std::max(-32768, std::min(32767, rsample)); r.put_int_clamp(s, rsample, 32768);
} }
} }

View File

@ -78,7 +78,7 @@ protected:
virtual void device_clock_changed() override; virtual void device_clock_changed() override;
// sound stream update overrides // 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_memory_interface configuration // device_memory_interface configuration
virtual space_config_vector memory_space_config() const override; virtual space_config_vector memory_space_config() const override;
@ -151,7 +151,7 @@ private:
u8 m_MaxChn = 0x1f; // Max Channels - 1 u8 m_MaxChn = 0x1f; // Max Channels - 1
u8 m_ChnClkNum = 0; // Clock Number per Channel u8 m_ChnClkNum = 0; // Clock Number per Channel
u16 m_Ctrl = 0; // 0x602 Control Functions u16 m_Ctrl = 0; // 0x602 Control Functions
void VR0_RenderAudio(int nsamples, stream_sample_t *l, stream_sample_t *r); void VR0_RenderAudio(write_stream_view &l, write_stream_view &r);
}; };
DECLARE_DEVICE_TYPE(SOUND_VRENDER0, vr0sound_device) DECLARE_DEVICE_TYPE(SOUND_VRENDER0, vr0sound_device)

View File

@ -40,51 +40,36 @@ wave_device::wave_device(const machine_config &mconfig, const char *tag, device_
void wave_device::device_start() void wave_device::device_start()
{ {
speaker_device_iterator spkiter(*owner()); stream_alloc(0, 2, machine().sample_rate());
int speakers = spkiter.count();
if (speakers > 1)
stream_alloc_legacy(0, 2, machine().sample_rate());
else
stream_alloc_legacy(0, 1, machine().sample_rate());
} }
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle a stream update // sound_stream_update - handle a stream update
//------------------------------------------------- //-------------------------------------------------
void wave_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void wave_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
stream_sample_t *left_buffer = outputs[0];
stream_sample_t *right_buffer = nullptr;
speaker_device_iterator spkiter(*owner());
int speakers = spkiter.count();
if (speakers > 1)
right_buffer = outputs[1];
cassette_state state = m_cass->get_state() & (CASSETTE_MASK_UISTATE | CASSETTE_MASK_MOTOR | CASSETTE_MASK_SPEAKER); cassette_state state = m_cass->get_state() & (CASSETTE_MASK_UISTATE | CASSETTE_MASK_MOTOR | CASSETTE_MASK_SPEAKER);
if (m_cass->exists() && (ALWAYS_PLAY_SOUND || (state == (CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)))) if (m_cass->exists() && (ALWAYS_PLAY_SOUND || (state == (CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED))))
{ {
cassette_image *cassette = m_cass->get_image(); cassette_image *cassette = m_cass->get_image();
double time_index = m_cass->get_position(); double time_index = m_cass->get_position();
double duration = double(samples) / m_cass->machine().sample_rate(); double duration = double(outputs[0].samples()) / outputs[0].sample_rate();
cassette_get_samples(cassette, 0, time_index, duration, samples, 2, left_buffer, CASSETTE_WAVEFORM_16BIT); if (m_sample_buf.size() < outputs[0].samples())
if (speakers > 1) m_sample_buf.resize(outputs[0].samples());
cassette_get_samples(cassette, 1, time_index, duration, samples, 2, right_buffer, CASSETTE_WAVEFORM_16BIT);
for (int i = samples - 1; i >= 0; i--) for (int ch = 0; ch < 2; ch++)
{ {
left_buffer[i] = ((int16_t *) left_buffer)[i]; cassette_get_samples(cassette, ch, time_index, duration, outputs[ch].samples(), 2, &m_sample_buf[0], CASSETTE_WAVEFORM_16BIT);
if (speakers > 1) for (int sampindex = 0; sampindex < outputs[0].samples(); sampindex++)
right_buffer[i] = ((int16_t *) right_buffer)[i]; outputs[ch].put_int(sampindex, m_sample_buf[sampindex], 32768);
} }
} }
else else
{ {
memset(left_buffer, 0, sizeof(*left_buffer) * samples); outputs[0].fill(0);
if (speakers > 1) outputs[1].fill(0);
memset(right_buffer, 0, sizeof(*right_buffer) * samples);
} }
} }

View File

@ -30,10 +30,11 @@ protected:
virtual void device_start() override; virtual void device_start() override;
// sound stream update overrides // 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: private:
required_device<cassette_image_device> m_cass; required_device<cassette_image_device> m_cass;
std::vector<s16> m_sample_buf;
}; };
DECLARE_DEVICE_TYPE(WAVE, wave_device) DECLARE_DEVICE_TYPE(WAVE, wave_device)

View File

@ -119,7 +119,7 @@ void x1_010_device::device_start()
LOG_SOUND("masterclock = %d rate = %d\n", clock(), m_rate); LOG_SOUND("masterclock = %d rate = %d\n", clock(), m_rate);
/* get stream channels */ /* get stream channels */
m_stream = stream_alloc_legacy(0, 2, m_rate); m_stream = stream_alloc(0, 2, m_rate);
m_reg = make_unique_clear<u8[]>(0x2000); m_reg = make_unique_clear<u8[]>(0x2000);
m_HI_WORD_BUF = make_unique_clear<u8[]>(0x2000); m_HI_WORD_BUF = make_unique_clear<u8[]>(0x2000);
@ -204,14 +204,14 @@ void x1_010_device::word_w(offs_t offset, u16 data)
//------------------------------------------------- //-------------------------------------------------
// sound_stream_update_legacy - handle a stream update // sound_stream_update - handle a stream update
//------------------------------------------------- //-------------------------------------------------
void x1_010_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) void x1_010_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{ {
// mixer buffer zero clear // mixer buffer zero clear
memset(outputs[0], 0, samples*sizeof(*outputs[0])); outputs[0].fill(0);
memset(outputs[1], 0, samples*sizeof(*outputs[1])); outputs[1].fill(0);
// if (m_sound_enable == 0) return; // if (m_sound_enable == 0) return;
@ -220,8 +220,8 @@ void x1_010_device::sound_stream_update_legacy(sound_stream &stream, stream_samp
X1_010_CHANNEL *reg = (X1_010_CHANNEL *)&(m_reg[ch*sizeof(X1_010_CHANNEL)]); X1_010_CHANNEL *reg = (X1_010_CHANNEL *)&(m_reg[ch*sizeof(X1_010_CHANNEL)]);
if ((reg->status & 1) != 0) // Key On if ((reg->status & 1) != 0) // Key On
{ {
stream_sample_t *bufL = outputs[0]; auto &bufL = outputs[0];
stream_sample_t *bufR = outputs[1]; auto &bufR = outputs[1];
const int div = (reg->status & 0x80) ? 1 : 0; const int div = (reg->status & 0x80) ? 1 : 0;
if ((reg->status & 2) == 0) // PCM sampling if ((reg->status & 2) == 0) // PCM sampling
{ {
@ -240,7 +240,7 @@ void x1_010_device::sound_stream_update_legacy(sound_stream &stream, stream_samp
LOG_SOUND("Play sample %p - %p, channel %X volume %d:%d freq %X step %X offset %X\n", LOG_SOUND("Play sample %p - %p, channel %X volume %d:%d freq %X step %X offset %X\n",
start, end, ch, volL, volR, freq, smp_step, smp_offs); start, end, ch, volL, volR, freq, smp_step, smp_offs);
} }
for (int i = 0; i < samples; i++) for (int i = 0; i < bufL.samples(); i++)
{ {
const u32 delta = smp_offs >> 4; const u32 delta = smp_offs >> 4;
// sample ended? // sample ended?
@ -250,8 +250,8 @@ void x1_010_device::sound_stream_update_legacy(sound_stream &stream, stream_samp
break; break;
} }
const s8 data = (s8)(read_byte(start+delta)); const s8 data = (s8)(read_byte(start+delta));
*bufL++ += (data * volL / 256); bufL.add_int(i, data * volL, 32768 * 256);
*bufR++ += (data * volR / 256); bufR.add_int(i, data * volR, 32768 * 256);
smp_offs += smp_step; smp_offs += smp_step;
} }
m_smp_offset[ch] = smp_offs; m_smp_offset[ch] = smp_offs;
@ -272,7 +272,7 @@ void x1_010_device::sound_stream_update_legacy(sound_stream &stream, stream_samp
LOG_SOUND("Play waveform %X, channel %X volume %X freq %4X step %X offset %X\n", LOG_SOUND("Play waveform %X, channel %X volume %X freq %4X step %X offset %X\n",
reg->volume, ch, reg->end, freq, smp_step, smp_offs); reg->volume, ch, reg->end, freq, smp_step, smp_offs);
} }
for (int i = 0; i < samples; i++) for (int i = 0; i < bufL.samples(); i++)
{ {
const u32 delta = env_offs >> 10; const u32 delta = env_offs >> 10;
// Envelope one shot mode // Envelope one shot mode
@ -285,8 +285,8 @@ void x1_010_device::sound_stream_update_legacy(sound_stream &stream, stream_samp
const int volL = ((vol >> 4) & 0xf) * VOL_BASE; const int volL = ((vol >> 4) & 0xf) * VOL_BASE;
const int volR = ((vol >> 0) & 0xf) * VOL_BASE; const int volR = ((vol >> 0) & 0xf) * VOL_BASE;
const s8 data = (s8)(m_reg[start + ((smp_offs >> 10) & 0x7f)]); const s8 data = (s8)(m_reg[start + ((smp_offs >> 10) & 0x7f)]);
*bufL++ += (data * volL / 256); bufL.add_int(i, data * volL, 32768 * 256);
*bufR++ += (data * volR / 256); bufR.add_int(i, data * volR, 32768 * 256);
smp_offs += smp_step; smp_offs += smp_step;
env_offs += env_step; env_offs += env_step;
} }

View File

@ -26,7 +26,7 @@ protected:
virtual void device_clock_changed() override; virtual void device_clock_changed() override;
// sound stream update overrides // 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 // device_rom_interface overrides
virtual void rom_bank_updated() override; virtual void rom_bank_updated() override;