summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/sound.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/sound.cpp')
-rw-r--r--src/emu/sound.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp
index ecf675d48f4..3ad10c6208d 100644
--- a/src/emu/sound.cpp
+++ b/src/emu/sound.cpp
@@ -844,6 +844,7 @@ sound_manager::sound_manager(running_machine &machine)
m_finalmix(machine.sample_rate()),
m_leftmix(machine.sample_rate()),
m_rightmix(machine.sample_rate()),
+ m_samples_this_update(0),
m_muted(0),
m_attenuation(0),
m_nosound_mode(machine.osd().no_sound()),
@@ -1089,16 +1090,16 @@ void sound_manager::update(void *ptr, int param)
g_profiler.start(PROFILER_SOUND);
// force all the speaker streams to generate the proper number of samples
- int samples_this_update = 0;
+ m_samples_this_update = 0;
for (speaker_device &speaker : speaker_device_iterator(machine().root_device()))
- speaker.mix(&m_leftmix[0], &m_rightmix[0], samples_this_update, (m_muted & MUTE_REASON_SYSTEM));
+ speaker.mix(&m_leftmix[0], &m_rightmix[0], m_samples_this_update, (m_muted & MUTE_REASON_SYSTEM));
// now downmix the final result
u32 finalmix_step = machine().video().speed_factor();
u32 finalmix_offset = 0;
s16 *finalmix = &m_finalmix[0];
int sample;
- for (sample = m_finalmix_leftover; sample < samples_this_update * 1000; sample += finalmix_step)
+ for (sample = m_finalmix_leftover; sample < m_samples_this_update * 1000; sample += finalmix_step)
{
int sampindex = sample / 1000;
@@ -1118,7 +1119,7 @@ void sound_manager::update(void *ptr, int param)
samp = 32767;
finalmix[finalmix_offset++] = samp;
}
- m_finalmix_leftover = sample - samples_this_update * 1000;
+ m_finalmix_leftover = sample - m_samples_this_update * 1000;
// play the result
if (finalmix_offset > 0)
@@ -1153,3 +1154,18 @@ void sound_manager::update(void *ptr, int param)
g_profiler.stop();
}
+
+
+//-------------------------------------------------
+// samples - fills the specified buffer with
+// 16-bit stereo audio samples generated during
+// the current frame
+//-------------------------------------------------
+
+void sound_manager::samples(s16 *buffer)
+{
+ for (int sample = 0; sample < m_samples_this_update * 2; sample++)
+ {
+ *buffer++ = m_finalmix[sample];
+ }
+}