我在 AWS 中设置了一个 Amazon Lex 实例。
我可以使用 python 库 boto3
与它通信
我可以使用 client.post_text()
命令以及 client.post_content()
我可以看到有一个类型为 StreamingBody
的 audioStream
对象附加到响应,但我似乎无法播放该流。我试过:
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/