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

How to get audio from Amazon Lex response using boto3?

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

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

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

成功获取和发送响应

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

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

但这好像没有效果。很少有文档描述如何使用这个对象。

我该如何完成?

我相信 audioStream 对象是一个 mpeg / 音频编码的 blob,所以你需要一个 python 可以播放 mp3 的库。

我找到的最佳解决方案如下,使用 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

注意:我将视频驱动程序设置为 "dummy",因此我可以 运行 在我的设备上 ssh。否则 pygame 需要一个 Xserver 实例(毕竟它的主要用途是 运行 一个游戏)。它也不会 运行 在后台(例如 screen 实例)如果你 运行ning Lex 在无头的东西上