Python3 boto3 对 wav 的响应

标签 python amazon-web-services wav boto3 amazon-lex

我正在使用 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/

相关文章:

Python Pandas - 读取包含多个表的 csv 文件

amazon-web-services - 有没有办法添加延迟以从 S3 上传触发 lambda?

c# - wav 文件的数据 block 中实际包含什么?

Java:混合两个 WAV 文件而不引入噪音

python - Cython 和 PyCharm - 从终端在 Python 中不会发生的错误

python - Peewee 的 Where 子句中的 IN 条件

amazon-web-services - Cloudfront s3 分发中的有序缓存导致访问被拒绝 (403)

java - AWS DynamoDB 通过 Java SDK 删除

r - 使用 sox 统计数据批量测量 .wav 文件

python - 如何正确设置 OpenCV python 中的二进制掩码?