diff --git a/isr.py b/isr.py index cc1d903..22fc974 100644 --- a/isr.py +++ b/isr.py @@ -714,11 +714,12 @@ class SoundcardRecorder(BaseRecorder): if self.current_file is None: return + # Swap the buffer under the lock, write outside it — disk writes (and + # FLAC encoding) must not block the capture callback. with self.buffer_lock: - if self.audio_buffer: - for data in self.audio_buffer: - self.current_file.write(data) - self.audio_buffer.clear() + buffered, self.audio_buffer = self.audio_buffer, [] + for data in buffered: + self.current_file.write(data) def close_current_file(self): """Flush any buffered audio, then close the current recording file."""