diff --git a/tests/test_audio_buffer_processor.py b/tests/test_audio_buffer_processor.py new file mode 100644 index 000000000..24ae42265 --- /dev/null +++ b/tests/test_audio_buffer_processor.py @@ -0,0 +1,111 @@ +# +# Copyright (c) 2024-2025 Daily +# +# SPDX-License-Identifier: BSD 2-Clause License +# + +import asyncio +import struct +import unittest + +from pipecat.frames.frames import InputAudioRawFrame, OutputAudioRawFrame, StartFrame +from pipecat.processors.audio.audio_buffer_processor import AudioBufferProcessor + + +class _PassthroughResampler: + async def resample(self, audio: bytes, in_rate: int, out_rate: int) -> bytes: # pragma: no cover - trivial + return audio + + +class TestAudioBufferProcessor(unittest.IsolatedAsyncioTestCase): + async def asyncSetUp(self): + self.processor = AudioBufferProcessor(sample_rate=16000, num_channels=2, buffer_size=4) + self.processor._input_resampler = _PassthroughResampler() + self.processor._output_resampler = _PassthroughResampler() + self.processor._update_sample_rate(StartFrame(audio_out_sample_rate=16000)) + await self.processor.start_recording() + + async def asyncTearDown(self): + if getattr(self.processor, "_recording", False): + await self.processor.stop_recording() + await self.processor.cleanup() + + async def test_flush_user_audio_pads_bot_track(self): + user_audio = struct.pack("