From 8da7a421379b62780be537ca9f9051459a2641a5 Mon Sep 17 00:00:00 2001 From: TheCodingLand Date: Fri, 7 Feb 2025 19:23:18 +0100 Subject: [PATCH 1/5] adds configurable input and output device ids for local audio --- src/pipecat/transports/local/audio.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) 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() From 856c8959c383a1f20825929ac973043335cb6bd8 Mon Sep 17 00:00:00 2001 From: TheCodingLand Date: Fri, 7 Feb 2025 19:38:26 +0100 Subject: [PATCH 2/5] enhance doc --- src/pipecat/transports/local/audio.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/pipecat/transports/local/audio.py b/src/pipecat/transports/local/audio.py index d02704e58..150ab9b55 100644 --- a/src/pipecat/transports/local/audio.py +++ b/src/pipecat/transports/local/audio.py @@ -26,10 +26,9 @@ 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 + input_device_index: int = 0 + output_device_index: int = 0 class LocalAudioInputTransport(BaseInputTransport): _params: LocalTransportParams From a3594343078d8e0fb044b7fbe93527a9eb29945b Mon Sep 17 00:00:00 2001 From: TheCodingLand Date: Fri, 7 Feb 2025 19:42:34 +0100 Subject: [PATCH 3/5] remove Doc and Annotated imports --- src/pipecat/transports/local/audio.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pipecat/transports/local/audio.py b/src/pipecat/transports/local/audio.py index 150ab9b55..45013927f 100644 --- a/src/pipecat/transports/local/audio.py +++ b/src/pipecat/transports/local/audio.py @@ -6,8 +6,7 @@ import asyncio from concurrent.futures import ThreadPoolExecutor -from typing import Annotated, Optional -from typing_extensions import Doc +from typing import Optional from loguru import logger From 6840c77684cd10a9052dfb76afb1accf43db66a1 Mon Sep 17 00:00:00 2001 From: TheCodingLand Date: Sat, 8 Feb 2025 12:03:23 +0100 Subject: [PATCH 4/5] apply ruff formatting --- src/pipecat/transports/local/audio.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pipecat/transports/local/audio.py b/src/pipecat/transports/local/audio.py index 45013927f..319b6a78f 100644 --- a/src/pipecat/transports/local/audio.py +++ b/src/pipecat/transports/local/audio.py @@ -6,7 +6,7 @@ import asyncio from concurrent.futures import ThreadPoolExecutor -from typing import Optional +from typing import Optional from loguru import logger @@ -25,12 +25,15 @@ except ModuleNotFoundError as e: ) raise Exception(f"Missing module: {e}") + class LocalTransportParams(TransportParams): input_device_index: int = 0 output_device_index: int = 0 + class LocalAudioInputTransport(BaseInputTransport): _params: LocalTransportParams + def __init__(self, py_audio: pyaudio.PyAudio, params: LocalTransportParams): super().__init__(params) self._py_audio = py_audio @@ -75,6 +78,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 From 57964cb929cfc72a71b3f64876c16b17ee923d63 Mon Sep 17 00:00:00 2001 From: TheCodingLand Date: Sat, 8 Feb 2025 12:32:20 +0100 Subject: [PATCH 5/5] fix LocalAudioTransport param type --- src/pipecat/transports/local/audio.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pipecat/transports/local/audio.py b/src/pipecat/transports/local/audio.py index 319b6a78f..9827283bc 100644 --- a/src/pipecat/transports/local/audio.py +++ b/src/pipecat/transports/local/audio.py @@ -116,8 +116,8 @@ class LocalAudioOutputTransport(BaseOutputTransport): ) -class LocalAudioTransport(BaseTransport): - def __init__(self, params: TransportParams): +class LocalAudioTransport(LocalTransportParams): + def __init__(self, params: LocalTransportParams): super().__init__() self._params = params self._pyaudio = pyaudio.PyAudio()