微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Python 中将 Twilio 双向 <Stream> 媒体负载转换为 .wav 文件

如何解决在 Python 中将 Twilio 双向 <Stream> 媒体负载转换为 .wav 文件

我在 Python 中有非常简单的 websocket,它正在监听来自 Twilio 的实时双向流。我获得了包含以下信息的数据。

{'event': 'connected','protocol': 'Call','version': '1.0.0'}

{'event': 'start','sequenceNumber': '1','start': {'accountSid': 'accountSid_value','streamSid': 'streamSid_value','callSid': 'callSid_value ','tracks': ['inbound'],'mediaFormat': {'encoding': 'audio/x-mulaw','sampleRate': 8000,'channels': 1}},'streamSid': 'streamSid_value' }

{'event': 'media','sequenceNumber': '5','media': {'track': 'inbound','chunk': '4','timestamp': '262 ','有效载荷': '///////////////////////////////////////// ///////////////////////////////////////////////// ///////////////////////////////////////////////// ///////////////////////////////////////////////// //////////////////w=='},'streamSid': 'streamSid_value'}

........

{'event': 'stop','sequenceNumber': '332','stop': {'accountSid': 'accountSid_value','callSid': 'callSid_value '}}

媒体位于 media.payload 中。在示例中提供的媒体是沉。 媒体是以 base64 编码的原始音频。 如何将字符串从 media.payload 转换为 .wav(或任何其他)音频文件

解决方法

我找到了一个解决方案,这段代码对我有用:

https://github.com/saisyam/pywav

import pywav
import pickle
import base64

with open('stream','rb') as fp:
    stream = pickle.load(fp)

data = []
for d in stream:
    if d['event'] == 'media':
        data.append(base64.b64decode(d['media']['payload']))

data_bytes = b"".join(data)
wave_write = pywav.WavWrite("filename.wav",1,8000,8,7)  # 1 stands for mono channel,8000 sample rate,8 bit,7 stands for MULAW encoding
wave_write.write(data_bytes)
wave_write.close()

使用 base64 和 pydub 解码工作正常,但音频质量很差。 此方法返回出色的音频质量。

,

首先你需要解码它:

d

至于您主要关心的问题,我真的帮不上忙,但我建议您检查 pydyb (https://github.com/jiaaro/pydub)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。