首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python从twilio媒体流中解析音频

使用Python从twilio媒体流中解析音频
EN

Stack Overflow用户
提问于 2022-08-19 15:45:47
回答 1查看 118关注 0票数 0

我使用Twilio流向本地服务器传送呼叫音频。作为参考,我借鉴了来自Twilio团队的官方指南

解码音频并将其保存到.wav文件中是有效的,尽管当播放音频时有些不舒服(使用压缩技巧的“慢动作”)。你可以在这里的声音云上听它。与来自twilio控制台的twilio提供的音频记录进行相同的调用相比,存在着明显的差异。现在,我想让流中的音频听起来像理想的一样好,因为我需要将它输入自定义的ML模型。

当使用以下代码比较上述音频文件时:

代码语言:javascript
复制
import pywav
wave_read = pywav.WavRead("filename.wav")
print(wave_read.getparams())

我们得到:

Twilio音频: {'numchannels':1,'samplerate':8000个,'byterate':16000,'bytespersample':2,'bitspersample':16,'samplelength':82998,'audioformat':'PCM (无压缩)‘}}

流音频: {'numchannels':1,'samplerate':8000个,'byterate':16000,'bytespersample':2,'bitspersample':16,'samplelength':69120,'audioformat':'PCMU (带mu-law压缩)‘}}

我相当肯定,问题在于如何将解码的字节从流保存到文件中。

代码语言:javascript
复制
  if data['event'] == "media":
        if not has_seen_media:
            recorded.append(base64.b64decode(data['media']['payload']))
            app.logger.info("Media message: {}".format(message))
            payload = data['media']['payload']
            app.logger.info("Payload is: {}".format(payload))
            chunk = base64.b64decode(payload)
            recorded.append(chunk)
            app.logger.info("That's {} bytes".format(len(chunk)))
            app.logger.info("Additional media messages from WebSocket are being suppressed....")
            has_seen_media = False
    if data['event'] == "closed":
        app.logger.info("Closed Message received: {}".format(message))
        break
    message_count += 1


app.logger.info("Connection closed. Received a total of {} messages".format(message_count))
data_bytes = b''.join(recorded)
wave_write = pywav.WavWrite("Recording.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()

注意:我已经将WavWrite函数中的位从8位更改为16位,音频质量没有差别。

我看过从这个以前在StackOverflow上的文章实现代码片段的方法。虽然没有成功。

如何提高保存的音频文件的质量?(最好在python中)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-20 01:58:08

我想我知道问题出在哪里。在循环中,将解码后的音频添加到有效负载数组中两次:

代码语言:javascript
复制
recorded.append(base64.b64decode(data['media']['payload'])) # <<< Adding the payload for the first time
app.logger.info("Media message: {}".format(message))
payload = data['media']['payload']
app.logger.info("Payload is: {}".format(payload))
chunk = base64.b64decode(payload)
recorded.append(chunk) # <<< Adding the payload for the second time

如果你听音频,它是缓慢的,因为它似乎是重复每个块。如果你剪掉上面的一条线,我想你会有正确的声音。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73419246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档