mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-10 08:05:22 +02:00
41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
"""Shared helper for pushing pre-recorded audio frames into a pipeline."""
|
|
|
|
import uuid
|
|
from typing import Awaitable, Callable
|
|
|
|
from pipecat.frames.frames import (
|
|
Frame,
|
|
TTSAudioRawFrame,
|
|
TTSStartedFrame,
|
|
TTSStoppedFrame,
|
|
)
|
|
|
|
|
|
async def queue_recording_audio(
|
|
audio_data: bytes,
|
|
*,
|
|
sample_rate: int,
|
|
queue_frame: Callable[[Frame], Awaitable[None]],
|
|
) -> None:
|
|
"""Push TTSStarted → TTSAudioRaw → TTSStopped frames.
|
|
|
|
This is the canonical way to play pre-recorded PCM audio through the
|
|
pipeline outside of the RecordingRouterProcessor (which uses its own
|
|
``push_frame`` path).
|
|
|
|
Args:
|
|
audio_data: Raw 16-bit mono PCM bytes.
|
|
sample_rate: Pipeline sample rate (e.g. 16000).
|
|
queue_frame: Typically ``task.queue_frame``.
|
|
"""
|
|
context_id = str(uuid.uuid4())
|
|
await queue_frame(TTSStartedFrame(context_id=context_id))
|
|
await queue_frame(
|
|
TTSAudioRawFrame(
|
|
audio=audio_data,
|
|
sample_rate=sample_rate,
|
|
num_channels=1,
|
|
context_id=context_id,
|
|
)
|
|
)
|
|
await queue_frame(TTSStoppedFrame(context_id=context_id))
|