我正在努力将javascript前端,烧瓶服务器和微软的认知服务结合在一起进行音频识别。
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()
这里的缺点是即使我从mediaRecorder Api通过json获取音频数据,所以我把它放在内存中...然后我把它写在磁盘上,然后再打开它以便能够获得采样率波的功能。但是如何在不将其写入磁盘的情况下执行此操作?谢谢。如果我必须为此提出一个新问题,当然可以这样做。
答案 0 :(得分:1)
看看audioop.ratecv
(它在标准库中)
让它对您的样本的原始帧进行操作(在您的情况下,audioData
)。
这是一个简单的算法,所以期待一些声音质量损失,但我想这是无关紧要的言论。