如何使用 boto3 从 Amazon Lex 响应中获取音频?
How to get audio from Amazon Lex response using boto3?
我在 AWS 中设置了 Amazon Lex 实例。
我可以使用 python 库与它通信 boto3
我可以使用 client.post_text()
命令以及 client.post_content()
成功获取和发送响应
我可以看到响应附加了一个类型为 StreamingBody
的 audioStream
对象,但我似乎无法播放该流。我试过:
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 在无头的东西上
我在 AWS 中设置了 Amazon Lex 实例。
我可以使用 python 库与它通信 boto3
我可以使用 client.post_text()
命令以及 client.post_content()
我可以看到响应附加了一个类型为 StreamingBody
的 audioStream
对象,但我似乎无法播放该流。我试过:
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 在无头的东西上