我正在使用 AWS Lex 生成对我的声音的响应 ( http://boto3.readthedocs.io/en/latest/reference/services/lex-runtime.html )。
响应audioStream是来自boto3的StreamingBody对象(https://botocore.readthedocs.io/en/latest/reference/response.html#botocore.response.StreamingBody)。
问题是如何将返回的字节数组转换为可以用 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()
关于Python3 boto3 对 wav 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48204861/