diff --git a/examples/foundational/01a-local-audio.py b/examples/foundational/01a-local-audio.py index 633697684..20aaedfae 100644 --- a/examples/foundational/01a-local-audio.py +++ b/examples/foundational/01a-local-audio.py @@ -16,7 +16,7 @@ from pipecat.pipeline.pipeline import Pipeline from pipecat.pipeline.runner import PipelineRunner from pipecat.pipeline.task import PipelineTask from pipecat.services.cartesia import CartesiaTTSService -from pipecat.transports.local.audio import LocalAudioTransport, LocalTransportParams +from pipecat.transports.local.audio import LocalAudioTransport, LocalAudioTransportParams load_dotenv(override=True) @@ -25,7 +25,7 @@ logger.add(sys.stderr, level="DEBUG") async def main(): - transport = LocalAudioTransport(LocalTransportParams(audio_out_enabled=True)) + transport = LocalAudioTransport(LocalAudioTransportParams(audio_out_enabled=True)) tts = CartesiaTTSService( api_key=os.getenv("CARTESIA_API_KEY"), diff --git a/examples/foundational/13a-whisper-local.py b/examples/foundational/13a-whisper-local.py index 2d3cd5a57..c9bf16782 100644 --- a/examples/foundational/13a-whisper-local.py +++ b/examples/foundational/13a-whisper-local.py @@ -16,7 +16,7 @@ from pipecat.pipeline.runner import PipelineRunner from pipecat.pipeline.task import PipelineTask from pipecat.processors.frame_processor import FrameDirection, FrameProcessor from pipecat.services.whisper import WhisperSTTService -from pipecat.transports.local.audio import LocalAudioTransport, LocalTransportParams +from pipecat.transports.local.audio import LocalAudioTransport, LocalAudioTransportParams load_dotenv(override=True) @@ -33,7 +33,7 @@ class TranscriptionLogger(FrameProcessor): async def main(): - transport = LocalAudioTransport(LocalTransportParams(audio_in_enabled=True)) + transport = LocalAudioTransport(LocalAudioTransportParams(audio_in_enabled=True)) stt = WhisperSTTService() diff --git a/examples/local-input-select-stt/bot.py b/examples/local-input-select-stt/bot.py index 1cedbf96c..f472152b9 100644 --- a/examples/local-input-select-stt/bot.py +++ b/examples/local-input-select-stt/bot.py @@ -18,7 +18,7 @@ from pipecat.pipeline.runner import PipelineRunner from pipecat.pipeline.task import PipelineTask from pipecat.processors.frame_processor import FrameDirection, FrameProcessor from pipecat.services.whisper import Model, WhisperSTTService -from pipecat.transports.local.audio import LocalAudioTransport, LocalTransportParams +from pipecat.transports.local.audio import LocalAudioTransport, LocalAudioTransportParams load_dotenv(override=True) @@ -36,7 +36,7 @@ class TranscriptionLogger(FrameProcessor): async def main(input_device: int, output_device: int): transport = LocalAudioTransport( - LocalTransportParams( + LocalAudioTransportParams( audio_in_enabled=True, audio_out_enabled=False, input_device_index=input_device, diff --git a/src/pipecat/transports/local/audio.py b/src/pipecat/transports/local/audio.py index 30bdaaf79..e7b803f2b 100644 --- a/src/pipecat/transports/local/audio.py +++ b/src/pipecat/transports/local/audio.py @@ -26,17 +26,18 @@ except ModuleNotFoundError as e: raise Exception(f"Missing module: {e}") -class LocalTransportParams(TransportParams): - input_device_index: int = 0 - output_device_index: int = 0 +class LocalAudioTransportParams(TransportParams): + input_device_index: Optional[int] = None + output_device_index: Optional[int] = None class LocalAudioInputTransport(BaseInputTransport): - _params: LocalTransportParams + _params: LocalAudioTransportParams - def __init__(self, py_audio: pyaudio.PyAudio, params: LocalTransportParams): + def __init__(self, py_audio: pyaudio.PyAudio, params: LocalAudioTransportParams): super().__init__(params) self._py_audio = py_audio + self._in_stream = None self._sample_rate = 0 @@ -77,11 +78,12 @@ class LocalAudioInputTransport(BaseInputTransport): class LocalAudioOutputTransport(BaseOutputTransport): - _params: LocalTransportParams + _params: LocalAudioTransportParams - def __init__(self, py_audio: pyaudio.PyAudio, params: TransportParams): + def __init__(self, py_audio: pyaudio.PyAudio, params: LocalAudioTransportParams): super().__init__(params) self._py_audio = py_audio + self._out_stream = None self._sample_rate = 0 @@ -117,7 +119,7 @@ class LocalAudioOutputTransport(BaseOutputTransport): class LocalAudioTransport(BaseTransport): - def __init__(self, params: LocalTransportParams): + def __init__(self, params: LocalAudioTransportParams): super().__init__() self._params = params self._pyaudio = pyaudio.PyAudio() diff --git a/src/pipecat/transports/local/tk.py b/src/pipecat/transports/local/tk.py index 40147d39f..73777c573 100644 --- a/src/pipecat/transports/local/tk.py +++ b/src/pipecat/transports/local/tk.py @@ -34,8 +34,15 @@ except ModuleNotFoundError as e: raise Exception(f"Missing module: {e}") +class TkTransportParams(TransportParams): + audio_input_device_index: Optional[int] = None + audio_output_device_index: Optional[int] = None + + class TkInputTransport(BaseInputTransport): - def __init__(self, py_audio: pyaudio.PyAudio, params: TransportParams): + _params: TkTransportParams + + def __init__(self, py_audio: pyaudio.PyAudio, params: TkTransportParams): super().__init__(params) self._py_audio = py_audio self._in_stream = None @@ -54,6 +61,7 @@ class TkInputTransport(BaseInputTransport): frames_per_buffer=num_frames, stream_callback=self._audio_in_callback, input=True, + input_device_index=self._params.audio_input_device_index, ) self._in_stream.start_stream() @@ -76,6 +84,8 @@ class TkInputTransport(BaseInputTransport): class TkOutputTransport(BaseOutputTransport): + _params: TkTransportParams + def __init__(self, tk_root: tk.Tk, py_audio: pyaudio.PyAudio, params: TransportParams): super().__init__(params) self._py_audio = py_audio @@ -103,6 +113,7 @@ class TkOutputTransport(BaseOutputTransport): channels=self._params.audio_out_channels, rate=self._sample_rate, output=True, + output_device_index=self._params.audio_output_device_index, ) self._out_stream.start_stream()