Python Wave音频采样率

尼克斯

我正在尝试将javascript前端,flask服务器和Microsoft的认知服务捆绑在一起以进行音频识别。

微软的服务器要求音频数据具有特定的参数,特别是它要求16000帧速率\频率。

但是从Windows上的浏览器只能得到41000。现在,我得到41000的音频,然后像这样保存它:

audioData = message['audio']     
af = wave.open('audioData.wav', 'w')
af.setnchannels(1)
af.setparams((1, 2, 16000, 0, 'NONE', 'Uncompressed'))
af.writeframes(audioData)
af.close()

通过socketio以dict \ json数据的形式接收音频。如果我直接保存它而不进行任何更改,那听起来不错。但是,如果我将采样率更改为16000,显然声音会失真并且非常缓慢,因此几秒钟的音频会延长到一分钟左右。

如何正确更改音频率,以影响Python 3.4中的声音?

谢谢。

编辑:这是工作代码:

with open("audioData_original.wav", 'wb') as of:
of.write(message['audio'])
audioFile = wave.open("audioData_original.wav", 'r')
n_frames = audioFile.getnframes()
audioData = audioFile.readframes(n_frames)
originalRate = audioFile.getframerate()
af = wave.open('audioData.wav', 'w')
af.setnchannels(1)
af.setparams((1, 2, 16000, 0, 'NONE', 'Uncompressed'))
converted = audioop.ratecv(audioData, 2, 1, originalRate, 16000, None)
af.writeframes(converted[0])
af.close()
audioFile.close()

这里的缺点是,即使我通过json从mediaRecorder Api获取音频数据,也将其存储在内存中...然后将其记录在磁盘上,然后再次打开它,以便能够使用wave的函数获得采样率。但是,如何不将其写入磁盘呢?谢谢。如果我要为此提出一个新的问题,可以的。

EDIT2:哦,好的,回答我自己的后续问题-io.BytesIO做到了。

尔门·德·钟

看一看audioop.ratecv(在标准库中),让它在样本的原始帧上运行(在您的情况下为audioData)。这是一种简单的算法,因此可能会导致音质损失,但是对于语音而言,我认为这是微不足道的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章