python - 如何使用 boto3 从 Amazon Lex 响应中获取音频?

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

我在 AWS 中设置了一个 Amazon Lex 实例。

我可以使用 python 库 boto3 与它通信

我可以使用 client.post_text() 命令以及 client.post_content()

成功获取和发送响应

我可以看到有一个类型为 StreamingBodyaudioStream 对象附加到响应,但我似乎无法播放该流。我试过:

audio = response['audioStream']
audio.read()

但这似乎没有效果。很少有文档描述如何使用此对象。

我该如何实现?

最佳答案

我找到的最佳解决方案如下,使用 pygame 解析音频:

我从 Lex 获得响应并解析它以找到音频流,然后播放它。

Stream = response["audioStream"]

os.environ["SDL_VIDEODRIVER"] = "dummy"
pygame.init()
pygame.display.set_mode((1,1))
pygame.mixer.music.load(Stream)
pygame.mixer.music.play(0)

clock = pygame.time.Clock()
clock.tick(10)
while pygame.mixer.music.get_busy():
    pygame.event.poll()
    clock.tick(10)
pygame.display.quit()
pygame.quit()
return

注意:我将视频驱动程序设置为“虚拟”,这样我就可以通过 ssh 在我的设备上运行它。否则 pygame 需要一个 Xserver 实例(毕竟它的主要用途是运行游戏)。如果你在 headless 上运行 Lex,它也不会在后台运行(例如 screen 实例)

关于python - 如何使用 boto3 从 Amazon Lex 响应中获取音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49807460/

相关文章:

python - Python Logging HOWTO 中的 '--log=INFO' 是什么意思

python - Django 自动完成灯列表对象没有属性查询集

amazon-web-services - 从api获取aws上的默认区域

amazon-web-services - 如何在boto中使用系统环境变量

php - 在 Amazon 的 S3 上批量恢复以前的版本

python - 箭头按钮的 QSpinBox 信号

python - 使用 Python 构建 Windows Phone 8 应用程序?

amazon-web-services - Binderhub 是否有 AWS 支持?

amazon-web-services - Amazon AWS SQS 队列消息保留期

python - 如何使用 Python(和 boto)克隆 Amazon S3 中的 key ?