Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python波音频采样率_Python_Audio_Sample Rate - Fatal编程技术网

Python波音频采样率

Python波音频采样率,python,audio,sample-rate,Python,Audio,Sample Rate,我正在尝试将javascript前端、flask服务器和microsoft的认知服务结合起来,以进行音频识别 Microsoft的服务器要求音频数据具有特定参数,特别是要求16000帧速率\频率 但是从windows上的浏览器我只能得到41000。 现在,我在41000处获得音频,然后按如下方式保存: audioData = message['audio'] af = wave.open('audioData.wav', 'w') af.setnchannels(1) af.setpa

我正在尝试将javascript前端、flask服务器和microsoft的认知服务结合起来,以进行音频识别

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
)。
这是一个简单的算法,所以预计会有一些音质损失,但我想对于语音来说,这是微不足道的。

看看
audioop.ratecv
(它在标准库中) 让它在样本的原始帧上运行(在您的示例中,
audioData
)。
这是一个简单的算法,所以预计会有一些音质损失,但我想对于语音来说这是无关紧要的。

使用open(“audioData_original.wav”,“wb”)作为: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()但还有一个后续问题,即如何从内存中将音频数据读入wave对象?因为我接收json格式的音频。在上面的代码中,我将数据写入光盘,从光盘中读取数据,并将其转换为新的下采样文件。如何在不将原始文件写入磁盘的情况下执行此操作?在内存中使用字节流io.BytesIO和wave.open打开该字节流(“audioData_original.wav”,“wb”)自: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()但还有一个后续问题,即如何从内存中将音频数据读入wave对象?因为我接收json格式的音频。在上面的代码中,我将数据写入光盘,从光盘中读取数据,并将其转换为新的下采样文件。如何在不将原始文件写入磁盘的情况下执行此操作?使用内存中的字节流io.BytesIO和wave。打开这一个哦,好的,回答我自己的后续问题-io.BytesIO完成了此操作。哦,好的,回答我自己的后续问题-io.BytesIO完成了此操作。