diff --git a/src/pipecat/transports/local/audio.py b/src/pipecat/transports/local/audio.py index e8c8beaf4..d02704e58 100644 --- a/src/pipecat/transports/local/audio.py +++ b/src/pipecat/transports/local/audio.py @@ -6,7 +6,8 @@ import asyncio from concurrent.futures import ThreadPoolExecutor -from typing import Optional +from typing import Annotated, Optional +from typing_extensions import Doc from loguru import logger @@ -26,8 +27,13 @@ except ModuleNotFoundError as e: raise Exception(f"Missing module: {e}") +class LocalTransportParams(TransportParams): + input_device_index: Annotated[int, Doc("Index of the input device for local audio")] = 0 + output_device_index: Annotated[int, Doc("Index of the output device for local audio")] = 0 + class LocalAudioInputTransport(BaseInputTransport): - def __init__(self, py_audio: pyaudio.PyAudio, params: TransportParams): + _params: LocalTransportParams + def __init__(self, py_audio: pyaudio.PyAudio, params: LocalTransportParams): super().__init__(params) self._py_audio = py_audio self._in_stream = None @@ -46,6 +52,7 @@ class LocalAudioInputTransport(BaseInputTransport): frames_per_buffer=num_frames, stream_callback=self._audio_in_callback, input=True, + input_device_index=self._params.input_device_index, ) self._in_stream.start_stream() @@ -69,6 +76,7 @@ class LocalAudioInputTransport(BaseInputTransport): class LocalAudioOutputTransport(BaseOutputTransport): + _params: LocalTransportParams def __init__(self, py_audio: pyaudio.PyAudio, params: TransportParams): super().__init__(params) self._py_audio = py_audio @@ -89,6 +97,7 @@ class LocalAudioOutputTransport(BaseOutputTransport): channels=self._params.audio_out_channels, rate=self._sample_rate, output=True, + output_device_index=self._params.output_device_index, ) self._out_stream.start_stream()