如何使用boto3从Amazon Lex响应中获取并播放音频流?
我之前也踩过这个Amazon Lex音频流的坑!官方文档确实讲得太简略了,折腾了好一阵才搞定。下面是我亲测有效的解决步骤,你可以照着试试:
第一步:请求时必须指定响应的音频格式
调用client.post_content()的时候,一定要加上responseContentType参数,明确告诉Lex你要返回的音频格式(比如MP3或者WAV)。如果没加这个参数,Lex默认返回的可能是原始PCM数据,这种格式大部分播放器都不支持,自然播放不了。
示例代码:
import boto3 # 初始化Lex客户端(V2版本,V1的话用'lex-runtime') client = boto3.client('lexv2-runtime') response = client.post_content( botId='你的Bot ID', # Lex V2必填,V1用botName botAliasId='你的Bot别名ID', # Lex V2必填,V1用botAlias localeId='zh_CN', # 对应你的Bot语言 locale sessionId='唯一的用户会话ID', inputStream=b'你的输入音频字节(语音输入时必填)', contentType='audio/l16; rate=16000; channels=1', # 输入音频格式,按实际情况调整 responseContentType='audio/mpeg' # 重点!指定返回MP3格式的音频 )
注:如果你用的是Lex V1,参数名替换为
botName、botAlias,去掉botId和botAliasId即可。
第二步:读取并处理StreamingBody
StreamingBody是boto3的流式对象,read()方法确实能获取到音频字节,但你需要把这些字节转换成可播放的格式——要么保存成文件,要么用音频库直接播放。
方法1:保存为文件后播放
这是最稳妥的方式,把字节写入MP3文件,然后用系统播放器打开:
# 获取音频流对象 audio_stream = response['audioStream'] # 读取所有字节数据 audio_bytes = audio_stream.read() # 写入本地MP3文件 with open('lex_response.mp3', 'wb') as audio_file: audio_file.write(audio_bytes) # 调用系统播放器播放 import os # 根据你的操作系统选择对应命令 os.startfile('lex_response.mp3') # Windows # os.system('open lex_response.mp3') # Mac # os.system('xdg-open lex_response.mp3') # Linux
方法2:直接用Python库播放(无需保存文件)
如果你不想生成本地文件,可以用pydub库直接播放字节流(需要先安装pydub和ffmpeg):
from pydub import AudioSegment from pydub.playback import play import io audio_stream = response['audioStream'] audio_bytes = audio_stream.read() # 将字节转换成AudioSegment对象,format要和responseContentType一致 audio = AudioSegment.from_file(io.BytesIO(audio_bytes), format='mp3') # 直接播放音频 play(audio)
几个容易踩的坑
- 格式不匹配:如果
responseContentType指定的是audio/wav,处理时就要用format='wav',否则会出现解码错误。 - 输入格式错误:语音输入时,Lex对音频格式有严格要求(比如16kHz采样率、单声道、L16编码),输入格式不对会导致Lex返回无效音频流。
- 空流判断:有时候Lex可能仅返回文本响应,没有音频流,建议先判断
'audioStream' in response再处理,避免报错。
示例判断逻辑:
if 'audioStream' in response: # 处理音频流逻辑 audio_stream = response['audioStream'] audio_bytes = audio_stream.read() else: print("Lex未返回音频流,仅返回文本响应:", response['messages'])
内容的提问来源于stack exchange,提问作者TestinginProd
相关产品推荐
相关产品推荐

