transports: some local audio and tk updates
This commit is contained in:
@@ -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"),
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user