serializers: don't update twilio/telnyx sample rates
This commit is contained in:
@@ -13,9 +13,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
resampled to the desired output sample rate.
|
resampled to the desired output sample rate.
|
||||||
|
|
||||||
- Fixed an issue with the `TwilioFrameSerializer` and `TelnyxFrameSerializer`
|
- Fixed an issue with the `TwilioFrameSerializer` and `TelnyxFrameSerializer`
|
||||||
where `frame.audio_out_sample_rate` was incorrectly used in place of
|
where `twilio_sample_rate` and `telnyx_sample_rate` were incorrectly
|
||||||
`frame.audio_in_sample_rate`, which caused audio input detection to fail when
|
initialized to `audio_in_sample_rate`. Those values currently default to 8000
|
||||||
using different input and output sample rates.
|
and should be set manually from the serializer constructor if a different
|
||||||
|
value is needed.
|
||||||
|
|
||||||
## [0.0.55] - 2025-02-05
|
## [0.0.55] - 2025-02-05
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ from pipecat.serializers.base_serializer import FrameSerializer, FrameSerializer
|
|||||||
|
|
||||||
class TelnyxFrameSerializer(FrameSerializer):
|
class TelnyxFrameSerializer(FrameSerializer):
|
||||||
class InputParams(BaseModel):
|
class InputParams(BaseModel):
|
||||||
telnyx_sample_rate: Optional[int] = None # Default Telnyx rate (8kHz)
|
telnyx_sample_rate: int = 8000 # Default Telnyx rate (8kHz)
|
||||||
sample_rate: Optional[int] = None # Pipeline input rate
|
sample_rate: Optional[int] = None # Pipeline input rate
|
||||||
inbound_encoding: str = "PCMU"
|
inbound_encoding: str = "PCMU"
|
||||||
outbound_encoding: str = "PCMU"
|
outbound_encoding: str = "PCMU"
|
||||||
@@ -48,7 +48,7 @@ class TelnyxFrameSerializer(FrameSerializer):
|
|||||||
params.inbound_encoding = inbound_encoding
|
params.inbound_encoding = inbound_encoding
|
||||||
self._params = params
|
self._params = params
|
||||||
|
|
||||||
self._telnyx_sample_rate = 0 # Fixed rate for Telnyx (8kHz)
|
self._telnyx_sample_rate = self._params.telnyx_sample_rate
|
||||||
self._sample_rate = 0 # Pipeline input rate
|
self._sample_rate = 0 # Pipeline input rate
|
||||||
|
|
||||||
self._resampler = create_default_resampler()
|
self._resampler = create_default_resampler()
|
||||||
@@ -58,8 +58,6 @@ class TelnyxFrameSerializer(FrameSerializer):
|
|||||||
return FrameSerializerType.TEXT
|
return FrameSerializerType.TEXT
|
||||||
|
|
||||||
async def setup(self, frame: StartFrame):
|
async def setup(self, frame: StartFrame):
|
||||||
# Configure rates for input path: Telnyx (8kHz encoded) -> Pipeline (PCM)
|
|
||||||
self._telnyx_sample_rate = self._params.telnyx_sample_rate or frame.audio_in_sample_rate
|
|
||||||
self._sample_rate = self._params.sample_rate or frame.audio_in_sample_rate
|
self._sample_rate = self._params.sample_rate or frame.audio_in_sample_rate
|
||||||
|
|
||||||
async def serialize(self, frame: Frame) -> str | bytes | None:
|
async def serialize(self, frame: Frame) -> str | bytes | None:
|
||||||
|
|||||||
@@ -27,14 +27,14 @@ from pipecat.serializers.base_serializer import FrameSerializer, FrameSerializer
|
|||||||
|
|
||||||
class TwilioFrameSerializer(FrameSerializer):
|
class TwilioFrameSerializer(FrameSerializer):
|
||||||
class InputParams(BaseModel):
|
class InputParams(BaseModel):
|
||||||
twilio_sample_rate: Optional[int] = None # Default Twilio rate (8kHz)
|
twilio_sample_rate: int = 8000 # Default Twilio rate (8kHz)
|
||||||
sample_rate: Optional[int] = None # Pipeline input rate
|
sample_rate: Optional[int] = None # Pipeline input rate
|
||||||
|
|
||||||
def __init__(self, stream_sid: str, params: InputParams = InputParams()):
|
def __init__(self, stream_sid: str, params: InputParams = InputParams()):
|
||||||
self._stream_sid = stream_sid
|
self._stream_sid = stream_sid
|
||||||
self._params = params
|
self._params = params
|
||||||
|
|
||||||
self._twilio_sample_rate = 0 # Fixed rate for Twilio (8kHz)
|
self._twilio_sample_rate = self._params.twilio_sample_rate
|
||||||
self._sample_rate = 0 # Pipeline input rate
|
self._sample_rate = 0 # Pipeline input rate
|
||||||
|
|
||||||
self._resampler = create_default_resampler()
|
self._resampler = create_default_resampler()
|
||||||
@@ -44,8 +44,6 @@ class TwilioFrameSerializer(FrameSerializer):
|
|||||||
return FrameSerializerType.TEXT
|
return FrameSerializerType.TEXT
|
||||||
|
|
||||||
async def setup(self, frame: StartFrame):
|
async def setup(self, frame: StartFrame):
|
||||||
# Configure rates for input path: Twilio (8kHz μ-law) -> Pipeline (PCM)
|
|
||||||
self._twilio_sample_rate = self._params.twilio_sample_rate or frame.audio_in_sample_rate
|
|
||||||
self._sample_rate = self._params.sample_rate or frame.audio_in_sample_rate
|
self._sample_rate = self._params.sample_rate or frame.audio_in_sample_rate
|
||||||
|
|
||||||
async def serialize(self, frame: Frame) -> str | bytes | None:
|
async def serialize(self, frame: Frame) -> str | bytes | None:
|
||||||
|
|||||||
Reference in New Issue
Block a user