diff options
Diffstat (limited to 'src/emu/sound.c')
-rw-r--r-- | src/emu/sound.c | 26 |
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")); } |