Как получить аудио от Amazon Lex response с помощью boto3?
У меня есть настройка экземпляра Amazon Lex в AWS.
Я могу общаться с ним, используя библиотеку python boto3
Я могу успешно получать и отправлять ответы, используя команду client.post_text()
, а также client.post_content()
Я вижу, что есть объект audioStream
, который имеет тип StreamingBody
, присоединенный к ответу, но у меня, кажется, нет способа воспроизвести этот поток. Я пытался:
audio = response['audioStream']
audio.read()
Но это, кажется, не имеет никакого эффекта. Существует очень мало документации, описывающей, как это использовать объект.
Как мне это сделать?
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 на чем-то безголовом