From a84930dc3eadb28b408ef61db206f0e48b41fd88 Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Tue, 24 Feb 2026 23:21:52 -0500 Subject: [PATCH] Skip empty audio frames after filter buffering Audio filters like RNNoise, KrispViva, and AIC return empty bytes while buffering audio to accumulate their required frame size. These empty frames were flowing downstream, causing misleading "Empty audio frame received for STT service" warnings. Skip the frame in BaseInputTransport when audio is empty, preventing unnecessary processing in VAD and downstream processors. Fixes #3517 --- changelog/3828.fixed.md | 1 + src/pipecat/transports/base_input.py | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 changelog/3828.fixed.md diff --git a/changelog/3828.fixed.md b/changelog/3828.fixed.md new file mode 100644 index 000000000..dd2ee257d --- /dev/null +++ b/changelog/3828.fixed.md @@ -0,0 +1 @@ +- Fixed misleading "Empty audio frame received for STT service" warnings when using audio filters (e.g. `RNNoiseFilter`, `KrispVivaFilter`, `AICFilter`) that buffer audio internally. diff --git a/src/pipecat/transports/base_input.py b/src/pipecat/transports/base_input.py index 77ff61bba..49c28149a 100644 --- a/src/pipecat/transports/base_input.py +++ b/src/pipecat/transports/base_input.py @@ -424,6 +424,11 @@ class BaseInputTransport(FrameProcessor): if self._params.audio_in_filter: frame.audio = await self._params.audio_in_filter.filter(frame.audio) + # Skip frames with no audio data (e.g. filter is buffering). + if not frame.audio: + self._audio_in_queue.task_done() + continue + ################################################################### # DEPRECATED. #