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

2024-05-16 20:10:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常简单的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'}

声波声波航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海航海//////////////////////////////////////////////////////////////w=='},'streamSid':'streamSid_value'}

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

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


Tags: eventvaluemediastart媒体websocketpayloadstop
2条回答

我找到了一个解决方案,这段代码适合我:

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进行解码工作正常,但音频质量很差。 此方法返回极好的音频质量

首先,您需要对其进行解码:

import base64
decoded_payload = base64.b64decode(media.payload)

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

相关问题 更多 >