diff --git a/src/emu/disound.cpp b/src/emu/disound.cpp index 4d7d60265b6..2b0a396a1ac 100644 --- a/src/emu/disound.cpp +++ b/src/emu/disound.cpp @@ -394,6 +394,32 @@ device_mixer_interface::~device_mixer_interface() } +//------------------------------------------------- +// input_to_stream_input - convert a device's +// input index to a stream and the input index +// on that stream +//------------------------------------------------- + +sound_stream *device_mixer_interface::input_to_stream_input(int inputnum, int &stream_inputnum) const +{ + assert(inputnum >= 0); + + // scan the list looking for streams owned by this device + for (auto &stream : device().machine().sound().streams()) + if (&stream->device() == &device()) + { + if (inputnum < m_auto_allocated_inputs) + { + stream_inputnum = inputnum; + return stream.get(); + } + inputnum -= m_auto_allocated_inputs; + } + + // not found + return nullptr; +} + //------------------------------------------------- // interface_pre_start - perform startup prior // to the device startup diff --git a/src/emu/disound.h b/src/emu/disound.h index 37a7df462be..dca30207dd8 100644 --- a/src/emu/disound.h +++ b/src/emu/disound.h @@ -81,7 +81,7 @@ public: // helpers int inputs() const; int outputs() const; - sound_stream *input_to_stream_input(int inputnum, int &stream_inputnum) const; + virtual sound_stream *input_to_stream_input(int inputnum, int &stream_inputnum) const; sound_stream *output_to_stream_output(int outputnum, int &stream_outputnum) const; float input_gain(int inputnum) const; float output_gain(int outputnum) const; @@ -120,6 +120,9 @@ public: device_mixer_interface(const machine_config &mconfig, device_t &device, int outputs = 1); virtual ~device_mixer_interface(); + // helpers + virtual sound_stream *input_to_stream_input(int inputnum, int &stream_inputnum) const override; + protected: // optional operation overrides virtual void interface_pre_start() override;