Python3 boto3 对 wav 的响应
Python3 boto3 response to wav
我正在使用 AWS Lex 生成对我的声音的响应 (http://boto3.readthedocs.io/en/latest/reference/services/lex-runtime.html)。
响应 audioStream 是来自 boto3 (https://botocore.readthedocs.io/en/latest/reference/response.html#botocore.response.StreamingBody) 的 StreamingBody object。
问题是如何将返回的字节数组转换为可以用sox播放的wav文件?
我试过以下方法:
audio_stream = response['audioStream'].read()
f = open('response.wav', 'wb')
f.write(audio_stream)
f.close()
但随后我收到 sox 和 aplay 的错误消息,指出格式无效(未找到 RIFF header)
我还尝试使用 wave 库和以下代码
audio_stream = response['audioStream'].read()
f = wave.open('response.wav', 'wb')
f.setnchannels(1)
f.setsampwidth(2)
f.setframerate(16000)
f.writeframesraw(audio_stream)
f.close()
但是后来我播放文件时只有白噪音,而且长度很短。
答案是在将流写入文件之前关闭流。工作代码如下所示:
audio_stream = response['audioStream'].read()
response['audioStream'].close()
f = wave.open(self.response_fname, 'wb')
f.setnchannels(2)
f.setsampwidth(2)
f.setframerate(16000)
f.setnframes(0)
f.writeframesraw(audio_stream)
f.close()
我正在使用 AWS Lex 生成对我的声音的响应 (http://boto3.readthedocs.io/en/latest/reference/services/lex-runtime.html)。
响应 audioStream 是来自 boto3 (https://botocore.readthedocs.io/en/latest/reference/response.html#botocore.response.StreamingBody) 的 StreamingBody object。
问题是如何将返回的字节数组转换为可以用sox播放的wav文件?
我试过以下方法:
audio_stream = response['audioStream'].read()
f = open('response.wav', 'wb')
f.write(audio_stream)
f.close()
但随后我收到 sox 和 aplay 的错误消息,指出格式无效(未找到 RIFF header)
我还尝试使用 wave 库和以下代码
audio_stream = response['audioStream'].read()
f = wave.open('response.wav', 'wb')
f.setnchannels(1)
f.setsampwidth(2)
f.setframerate(16000)
f.writeframesraw(audio_stream)
f.close()
但是后来我播放文件时只有白噪音,而且长度很短。
答案是在将流写入文件之前关闭流。工作代码如下所示:
audio_stream = response['audioStream'].read()
response['audioStream'].close()
f = wave.open(self.response_fname, 'wb')
f.setnchannels(2)
f.setsampwidth(2)
f.setframerate(16000)
f.setnframes(0)
f.writeframesraw(audio_stream)
f.close()