summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/sound.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/sound.c')
-rw-r--r--src/emu/sound.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/emu/sound.c b/src/emu/sound.c
index 6c8f4b74da2..b4179336582 100644
--- a/src/emu/sound.c
+++ b/src/emu/sound.c
@@ -75,8 +75,8 @@ sound_stream::sound_stream(device_t &device, int inputs, int outputs, int sample
m_callback = stream_update_delegate(FUNC(device_sound_interface::sound_stream_update),(device_sound_interface *)sound);
// create a unique tag for saving
- astring state_tag;
- state_tag.printf("%d", m_device.machine().sound().m_stream_list.count());
+ std::string state_tag;
+ strprintf(state_tag, "%d", m_device.machine().sound().m_stream_list.count());
m_device.machine().save().save_item(&m_device, "stream", state_tag.c_str(), 0, NAME(m_sample_rate));
m_device.machine().save().register_postload(save_prepost_delegate(FUNC(sound_stream::postload), this));
@@ -163,17 +163,17 @@ float sound_stream::output_gain(int outputnum) const
// on a given stream's input
//-------------------------------------------------
-const char *sound_stream::input_name(int inputnum, astring &str) const
+const char *sound_stream::input_name(int inputnum, std::string &str) const
{
// start with our device name and tag
assert(inputnum >= 0 && inputnum < m_input.size());
- str.printf("%s '%s': ", m_device.name(), m_device.tag());
+ strprintf(str, "%s '%s': ", m_device.name(), m_device.tag());
// if we have a source, indicate where the sound comes from by device name and tag
if (m_input[inputnum].m_source != NULL && m_input[inputnum].m_source->m_stream != NULL)
{
device_t &source = m_input[inputnum].m_source->m_stream->device();
- str.catprintf("%s '%s'", source.name(), source.tag());
+ strcatprintf(str, "%s '%s'", source.name(), source.tag());
// get the sound interface; if there is more than 1 output we need to figure out which one
device_sound_interface *sound;
@@ -186,7 +186,7 @@ const char *sound_stream::input_name(int inputnum, astring &str) const
for (int outputnum = 0; (outstream = sound->output_to_stream_output(outputnum, streamoutputnum)) != NULL; outputnum++)
if (outstream == m_input[inputnum].m_source->m_stream && m_input[inputnum].m_source == &outstream->m_output[streamoutputnum])
{
- str.catprintf(" Ch.%d", outputnum);
+ strcatprintf(str, " Ch.%d", outputnum);
break;
}
}
@@ -598,6 +598,8 @@ void sound_stream::postload()
void sound_stream::generate_samples(int samples)
{
+ stream_sample_t **inputs = NULL;
+ stream_sample_t **outputs = NULL;
// if we're already there, skip it
if (samples <= 0)
return;
@@ -616,6 +618,11 @@ void sound_stream::generate_samples(int samples)
m_input_array[inputnum] = generate_resampled_data(input, samples);
}
+ if (!m_input.empty())
+ {
+ inputs = &m_input_array[0];
+ }
+
// loop over all outputs and compute the output pointer
for (unsigned int outputnum = 0; outputnum < m_output.size(); outputnum++)
{
@@ -623,9 +630,14 @@ void sound_stream::generate_samples(int samples)
m_output_array[outputnum] = &output.m_buffer[m_output_sampindex - m_output_base_sampindex];
}
+ if (!m_output.empty())
+ {
+ outputs = &m_output_array[0];
+ }
+
// run the callback
VPRINTF((" callback(%p, %d)\n", this, samples));
- m_callback(*this, &m_input_array[0], &m_output_array[0], samples);
+ m_callback(*this, inputs, outputs, samples);
VPRINTF((" callback done\n"));
}