繁体   English   中英

Python Wave音频采样率

[英]Python wave audio sample rate

我试图将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 )。 这是一种简单的算法,因此可能会导致音质损失,但我认为对于语音来说微不足道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM