update CHANGELOG and fix formatting

This commit is contained in:
Aleix Conchillo Flaqué
2025-01-30 08:55:29 -08:00
parent f90c17ab30
commit e69c065a86
6 changed files with 38 additions and 17 deletions

View File

@@ -81,7 +81,7 @@ def ulaw_to_pcm(ulaw_bytes: bytes, in_sample_rate: int, out_sample_rate: int):
# Resample
out_pcm_bytes = resample_audio(in_pcm_bytes, in_sample_rate, out_sample_rate)
return out_pcm_bytes
@@ -95,13 +95,13 @@ def pcm_to_ulaw(pcm_bytes: bytes, in_sample_rate: int, out_sample_rate: int):
return ulaw_bytes
def alaw_to_pcm(alaw_bytes: bytes, in_sample_rate: int, out_sample_rate: int) -> bytes:
def alaw_to_pcm(alaw_bytes: bytes, in_sample_rate: int, out_sample_rate: int) -> bytes:
# Convert a-law to PCM
in_pcm_bytes = audioop.alaw2lin(alaw_bytes, 2)
# Resample
out_pcm_bytes = resample_audio(in_pcm_bytes, in_sample_rate, out_sample_rate)
return out_pcm_bytes

View File

@@ -9,7 +9,7 @@ import json
from pydantic import BaseModel
from pipecat.audio.utils import pcm_to_ulaw, ulaw_to_pcm, pcm_to_alaw, alaw_to_pcm
from pipecat.audio.utils import alaw_to_pcm, pcm_to_alaw, pcm_to_ulaw, ulaw_to_pcm
from pipecat.frames.frames import (
AudioRawFrame,
Frame,
@@ -28,10 +28,16 @@ class TelnyxFrameSerializer(FrameSerializer):
inbound_encoding: str = "PCMU"
outbound_encoding: str = "PCMU"
def __init__(self, stream_id: str, outbound_encoding: str, inbound_encoding: str, params: InputParams = InputParams()):
def __init__(
self,
stream_id: str,
outbound_encoding: str,
inbound_encoding: str,
params: InputParams = InputParams(),
):
self._stream_id = stream_id
params.outbound_encoding = outbound_encoding
params.inbound_encoding = inbound_encoding
params.inbound_encoding = inbound_encoding
self._params = params
@property
@@ -41,18 +47,18 @@ class TelnyxFrameSerializer(FrameSerializer):
def serialize(self, frame: Frame) -> str | bytes | None:
if isinstance(frame, AudioRawFrame):
data = frame.audio
if self._params.inbound_encoding == "PCMU":
serialized_data = pcm_to_ulaw(
data, frame.sample_rate, self._params.telnyx_sample_rate
)
)
elif self._params.inbound_encoding == "PCMA":
serialized_data = pcm_to_alaw(
data, frame.sample_rate, self._params.telnyx_sample_rate
)
)
else:
raise ValueError(f"Unsupported encoding: {self._params.encoding}")
raise ValueError(f"Unsupported encoding: {self._params.inbound_encoding}")
payload = base64.b64encode(serialized_data).decode("utf-8")
answer = {
"event": "media",
@@ -67,7 +73,7 @@ class TelnyxFrameSerializer(FrameSerializer):
def deserialize(self, data: str | bytes) -> Frame | None:
message = json.loads(data)
if message["event"] == "media":
payload_base64 = message["media"]["payload"]
payload = base64.b64decode(payload_base64)
@@ -81,7 +87,7 @@ class TelnyxFrameSerializer(FrameSerializer):
payload, self._params.telnyx_sample_rate, self._params.sample_rate
)
else:
raise ValueError(f"Unsupported encoding: {self._params.encoding}")
raise ValueError(f"Unsupported encoding: {self._params.outbound_encoding}")
audio_frame = InputAudioRawFrame(
audio=deserialized_data, num_channels=1, sample_rate=self._params.sample_rate