transports: some local audio and tk updates

This commit is contained in:
Aleix Conchillo Flaqué
2025-02-14 13:11:35 -08:00
parent 9115692c72
commit 426d7ac213
5 changed files with 28 additions and 15 deletions

View File

@@ -16,7 +16,7 @@ from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.runner import PipelineRunner from pipecat.pipeline.runner import PipelineRunner
from pipecat.pipeline.task import PipelineTask from pipecat.pipeline.task import PipelineTask
from pipecat.services.cartesia import CartesiaTTSService 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) load_dotenv(override=True)
@@ -25,7 +25,7 @@ logger.add(sys.stderr, level="DEBUG")
async def main(): async def main():
transport = LocalAudioTransport(LocalTransportParams(audio_out_enabled=True)) transport = LocalAudioTransport(LocalAudioTransportParams(audio_out_enabled=True))
tts = CartesiaTTSService( tts = CartesiaTTSService(
api_key=os.getenv("CARTESIA_API_KEY"), api_key=os.getenv("CARTESIA_API_KEY"),

View File

@@ -16,7 +16,7 @@ from pipecat.pipeline.runner import PipelineRunner
from pipecat.pipeline.task import PipelineTask from pipecat.pipeline.task import PipelineTask
from pipecat.processors.frame_processor import FrameDirection, FrameProcessor from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
from pipecat.services.whisper import WhisperSTTService 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) load_dotenv(override=True)
@@ -33,7 +33,7 @@ class TranscriptionLogger(FrameProcessor):
async def main(): async def main():
transport = LocalAudioTransport(LocalTransportParams(audio_in_enabled=True)) transport = LocalAudioTransport(LocalAudioTransportParams(audio_in_enabled=True))
stt = WhisperSTTService() stt = WhisperSTTService()

View File

@@ -18,7 +18,7 @@ from pipecat.pipeline.runner import PipelineRunner
from pipecat.pipeline.task import PipelineTask from pipecat.pipeline.task import PipelineTask
from pipecat.processors.frame_processor import FrameDirection, FrameProcessor from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
from pipecat.services.whisper import Model, WhisperSTTService 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) load_dotenv(override=True)
@@ -36,7 +36,7 @@ class TranscriptionLogger(FrameProcessor):
async def main(input_device: int, output_device: int): async def main(input_device: int, output_device: int):
transport = LocalAudioTransport( transport = LocalAudioTransport(
LocalTransportParams( LocalAudioTransportParams(
audio_in_enabled=True, audio_in_enabled=True,
audio_out_enabled=False, audio_out_enabled=False,
input_device_index=input_device, input_device_index=input_device,

View File

@@ -26,17 +26,18 @@ except ModuleNotFoundError as e:
raise Exception(f"Missing module: {e}") raise Exception(f"Missing module: {e}")
class LocalTransportParams(TransportParams): class LocalAudioTransportParams(TransportParams):
input_device_index: int = 0 input_device_index: Optional[int] = None
output_device_index: int = 0 output_device_index: Optional[int] = None
class LocalAudioInputTransport(BaseInputTransport): 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) super().__init__(params)
self._py_audio = py_audio self._py_audio = py_audio
self._in_stream = None self._in_stream = None
self._sample_rate = 0 self._sample_rate = 0
@@ -77,11 +78,12 @@ class LocalAudioInputTransport(BaseInputTransport):
class LocalAudioOutputTransport(BaseOutputTransport): 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) super().__init__(params)
self._py_audio = py_audio self._py_audio = py_audio
self._out_stream = None self._out_stream = None
self._sample_rate = 0 self._sample_rate = 0
@@ -117,7 +119,7 @@ class LocalAudioOutputTransport(BaseOutputTransport):
class LocalAudioTransport(BaseTransport): class LocalAudioTransport(BaseTransport):
def __init__(self, params: LocalTransportParams): def __init__(self, params: LocalAudioTransportParams):
super().__init__() super().__init__()
self._params = params self._params = params
self._pyaudio = pyaudio.PyAudio() self._pyaudio = pyaudio.PyAudio()

View File

@@ -34,8 +34,15 @@ except ModuleNotFoundError as e:
raise Exception(f"Missing module: {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): 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) super().__init__(params)
self._py_audio = py_audio self._py_audio = py_audio
self._in_stream = None self._in_stream = None
@@ -54,6 +61,7 @@ class TkInputTransport(BaseInputTransport):
frames_per_buffer=num_frames, frames_per_buffer=num_frames,
stream_callback=self._audio_in_callback, stream_callback=self._audio_in_callback,
input=True, input=True,
input_device_index=self._params.audio_input_device_index,
) )
self._in_stream.start_stream() self._in_stream.start_stream()
@@ -76,6 +84,8 @@ class TkInputTransport(BaseInputTransport):
class TkOutputTransport(BaseOutputTransport): class TkOutputTransport(BaseOutputTransport):
_params: TkTransportParams
def __init__(self, tk_root: tk.Tk, py_audio: pyaudio.PyAudio, params: TransportParams): def __init__(self, tk_root: tk.Tk, py_audio: pyaudio.PyAudio, params: TransportParams):
super().__init__(params) super().__init__(params)
self._py_audio = py_audio self._py_audio = py_audio
@@ -103,6 +113,7 @@ class TkOutputTransport(BaseOutputTransport):
channels=self._params.audio_out_channels, channels=self._params.audio_out_channels,
rate=self._sample_rate, rate=self._sample_rate,
output=True, output=True,
output_device_index=self._params.audio_output_device_index,
) )
self._out_stream.start_stream() self._out_stream.start_stream()