summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/resampler.cpp4
-rw-r--r--src/emu/sound.cpp6
-rw-r--r--src/emu/sound.h6
3 files changed, 7 insertions, 9 deletions
diff --git a/src/emu/resampler.cpp b/src/emu/resampler.cpp
index b86e028ce04..18a5d9f4a21 100644
--- a/src/emu/resampler.cpp
+++ b/src/emu/resampler.cpp
@@ -231,7 +231,7 @@ u32 audio_resampler_hq::compute_gcd(u32 fs, u32 ft)
u32 audio_resampler_hq::history_size() const
{
- return m_order_per_lane;
+ return m_order_per_lane + m_skip + 1;
}
void audio_resampler_hq::apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const
@@ -382,7 +382,7 @@ audio_resampler_lofi::audio_resampler_lofi(u32 fs, u32 ft)
u32 audio_resampler_lofi::history_size() const
{
- return 5 * m_source_divide;
+ return 5 * m_source_divide + m_fs / m_ft + 1;
}
void audio_resampler_lofi::apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const
diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp
index 696742a87e2..becd54ea050 100644
--- a/src/emu/sound.cpp
+++ b/src/emu/sound.cpp
@@ -503,7 +503,7 @@ void sound_stream::update()
// Find out where we are and how much we have to do
u64 idx = get_current_sample_index();
- m_samples_to_update = idx - m_output_buffer.write_sample();
+ m_samples_to_update = idx - m_output_buffer.write_sample() + 1; // We want to include the current sample, hence the +1
if(m_samples_to_update > 0) {
m_in_update = true;
@@ -525,7 +525,7 @@ void sound_stream::update_nodeps()
// Find out where we are and how much we have to do
u64 idx = get_current_sample_index();
- m_samples_to_update = idx - m_output_buffer.write_sample();
+ m_samples_to_update = idx - m_output_buffer.write_sample() + 1; // We want to include the current sample, hence the +1
if(m_samples_to_update > 0) {
m_in_update = true;
@@ -859,7 +859,7 @@ void sound_manager::after_devices_init()
void sound_manager::input_get(int id, sound_stream &stream)
{
u32 samples = stream.samples();
- u64 end_pos = stream.sample_index();
+ u64 end_pos = stream.end_index();
u32 skip = stream.output_count();
for(const auto &step : m_microphones[id].m_input_mixing_steps) {
diff --git a/src/emu/sound.h b/src/emu/sound.h
index 6d699dbb8d9..57c96683f0a 100644
--- a/src/emu/sound.h
+++ b/src/emu/sound.h
@@ -35,7 +35,7 @@
For example, if you have a 10Hz clock, and call stream.update() at
t=0.91, it will compute 10 samples (for clock edges 0.0, 0.1, 0.2,
..., 0.7, 0.8, and 0.9). And then if you ask the stream what its
- current end time is (via stream.sample_time()), it will say t=1.0,
+ current end time is (via stream.end_time()), it will say t=1.0,
which is in the future, because it knows it will hold that last
sample until 1.0s.
@@ -210,11 +210,9 @@ public:
// sample id and timing of the first and last sample of the current update block, and first of the next sample block
u64 start_index() const { return m_output_buffer.write_sample(); }
- u64 end_index() const { return m_output_buffer.write_sample() + samples() - 1; }
- u64 sample_index() const { return m_output_buffer.write_sample() + samples(); }
+ u64 end_index() const { return m_output_buffer.write_sample() + samples(); }
attotime start_time() const { return sample_to_time(start_index()); }
attotime end_time() const { return sample_to_time(end_index()); }
- attotime sample_time() const { return sample_to_time(sample_index()); }
// convert from absolute sample index to time
attotime sample_to_time(u64 index) const;