From 84e11a52ba4584a58b8aacefc063a2002d09fc40 Mon Sep 17 00:00:00 2001 From: Maufeat Date: Sun, 18 Jan 2026 16:20:32 +0100 Subject: [PATCH] [audio] Fix release buffer for audio input (#3336) fixes microphone release buffer and data. Tested with Let's Sing 2025 Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3336 Reviewed-by: MaranBr Reviewed-by: CamilleLaVey Co-authored-by: Maufeat Co-committed-by: Maufeat --- src/audio_core/device/audio_buffers.h | 2 ++ src/audio_core/sink/sink_stream.cpp | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/audio_core/device/audio_buffers.h b/src/audio_core/device/audio_buffers.h index 0ee3225bf6..34a396e2dc 100644 --- a/src/audio_core/device/audio_buffers.h +++ b/src/audio_core/device/audio_buffers.h @@ -113,6 +113,8 @@ public: break; } + session.ReleaseBuffer(buffers[index]); + ReleaseBuffer(index, core_timing.GetGlobalTimeNs().count()); buffer_released = true; } diff --git a/src/audio_core/sink/sink_stream.cpp b/src/audio_core/sink/sink_stream.cpp index 3655ae8f69..2c41e7f2c8 100644 --- a/src/audio_core/sink/sink_stream.cpp +++ b/src/audio_core/sink/sink_stream.cpp @@ -151,7 +151,17 @@ void SinkStream::ProcessAudioIn(std::span input_buffer, std::size_t n playing_buffer.consumed = true; } - std::memcpy(&last_frame[0], &input_buffer[(frames_written - 1) * frame_size], frame_size_bytes); + if (frames_written > 0) { + std::memcpy(&last_frame[0], &input_buffer[(frames_written - 1) * frame_size], frame_size_bytes); + } + + // update sample counts für audio-ins + { + std::scoped_lock lk{sample_count_lock}; + last_sample_count_update_time = system.CoreTiming().GetGlobalTimeNs(); + min_played_sample_count = max_played_sample_count; + max_played_sample_count += frames_written; + } } void SinkStream::ProcessAudioOutAndRender(std::span output_buffer, std::size_t num_frames) {