Как получить аудио от Amazon Lex response с помощью boto3?


У меня есть настройка экземпляра Amazon Lex в AWS.

Я могу общаться с ним, используя библиотеку python boto3

Я могу успешно получать и отправлять ответы, используя команду client.post_text(), а также client.post_content()

Я вижу, что есть объект audioStream, который имеет тип StreamingBody, присоединенный к ответу, но у меня, кажется, нет способа воспроизвести этот поток. Я пытался:

audio = response['audioStream']
audio.read()
Но это, кажется, не имеет никакого эффекта. Существует очень мало документации, описывающей, как это использовать объект.

Как мне это сделать?

2 2

2 ответа:

Я считаю, что объект audioStream-это большой двоичный объект в формате mpeg / audio, поэтому вам понадобится библиотека python, которая может воспроизводить mp3.

Лучшее решение, которое я нашел, это следующее, используя pygame для разбора аудио:

Я получаю ответ от Лекса и анализирую его, чтобы найти аудиопоток, а затем воспроизвести его.

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 (его основное назначение-все-таки запустить игру). Он также не будет работать в фоновом режиме (например, экземпляр screen), Если вы запускаете Lex на чем-то безголовом