我正在尝试将 javascript 前端、flask 服务器和微软的认知服务结合起来进行音频识别。
微软的服务器要求音频数据具有特定的参数,特别是要求 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
成功了。