Formatting adjusted and the encoding selection moved from TelnyFrameSerilaizer to websocket_endpoint function in server.py

This commit is contained in:
Rafal Skorski
2025-01-30 12:52:30 +01:00
parent 9c22bd8df1
commit b93e4ab9cb
5 changed files with 24 additions and 22 deletions

View File

@@ -84,6 +84,7 @@ def ulaw_to_pcm(ulaw_bytes: bytes, in_sample_rate: int, out_sample_rate: int):
return out_pcm_bytes
def pcm_to_ulaw(pcm_bytes: bytes, in_sample_rate: int, out_sample_rate: int):
# Resample
in_pcm_bytes = resample_audio(pcm_bytes, in_sample_rate, out_sample_rate)
@@ -93,8 +94,8 @@ 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)
@@ -103,6 +104,7 @@ def alaw_to_pcm(alaw_bytes: bytes, in_sample_rate: int, out_sample_rate: int) ->
return out_pcm_bytes
def pcm_to_alaw(pcm_bytes: bytes, in_sample_rate: int, out_sample_rate: int):
# Resample
in_pcm_bytes = resample_audio(pcm_bytes, in_sample_rate, out_sample_rate)
@@ -110,4 +112,4 @@ def pcm_to_alaw(pcm_bytes: bytes, in_sample_rate: int, out_sample_rate: int):
# Convert PCM to μ-law
alaw_bytes = audioop.lin2alaw(in_pcm_bytes, 2)
return alaw_bytes
return alaw_bytes

View File

@@ -28,9 +28,10 @@ class TelnyxFrameSerializer(FrameSerializer):
inbound_encoding: str = "PCMU"
outbound_encoding: str = "PCMU"
def __init__(self, stream_id: str, 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.inbound_encoding = encoding
params.outbound_encoding = outbound_encoding
params.inbound_encoding = inbound_encoding
self._params = params
@property
@@ -41,10 +42,14 @@ class TelnyxFrameSerializer(FrameSerializer):
if isinstance(frame, AudioRawFrame):
data = frame.audio
if self._params.outbound_encoding == "PCMU":
serialized_data = pcm_to_ulaw(data, frame.sample_rate, self._params.telnyx_sample_rate)
elif self._params.outbound_encoding == "PCMA":
serialized_data = pcm_to_alaw(data, frame.sample_rate, self._params.telnyx_sample_rate)
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}")
@@ -67,11 +72,11 @@ class TelnyxFrameSerializer(FrameSerializer):
payload_base64 = message["media"]["payload"]
payload = base64.b64decode(payload_base64)
if self._params.inbound_encoding == "PCMU":
if self._params.outbound_encoding == "PCMU":
deserialized_data = ulaw_to_pcm(
payload, self._params.telnyx_sample_rate, self._params.sample_rate
)
elif self._params.inbound_encoding == "PCMA":
elif self._params.outbound_encoding == "PCMA":
deserialized_data = alaw_to_pcm(
payload, self._params.telnyx_sample_rate, self._params.sample_rate
)