亚历山大之声服务的客户端

avs-client的Python项目详细描述


Alexa语音服务客户端

code-climate-imagecircle-ci-imagecodecov-image

python client for alexa语音服务(avs)

此包已重命名为alexa-client。只有alexa-client将接收更新。


安装

pip install avs_client

或者如果您想运行演示:

pip install avs_client[demo]

用法

文件音频

fromavs_clientimportAlexaVoiceServiceClientalexa_client=AlexaVoiceServiceClient(client_id='my-client-id',secret='my-secret',refresh_token='my-refresh-token',)alexa_client.connect()# authenticate and other handshaking stepswithopen('./tests/resources/alexa_what_time_is_it.wav','rb')asf:fori,directiveinenumerate(alexa_client.send_audio_file(f)):ifdirective.namein['Speak','Play']:withopen(f'./output_{i}.mp3','wb')asf:f.write(directive.audio_attachment)

现在听output_0.wav亚历克斯应该告诉你时间。

麦克风音频

importiofromavs_clientimportAlexaVoiceServiceClientimportpyaudiodefcallback(in_data,frame_count,time_info,status):buffer.write(in_data)return(in_data,pyaudio.paContinue)p=pyaudio.PyAudio()stream=p.open(format=pyaudio.paInt16,channels=1,rate=16000,input=True,stream_callback=callback,)alexa_client=AlexaVoiceServiceClient(client_id='my-client-id',secret='my-secret',refresh_token='my-refresh-token',)buffer=io.BytesIO()try:stream.start_stream()print('listening. Press CTRL + C to exit.')alexa_client.connect()fori,directiveinenumerate(alexa_client.send_audio_file(buffer)):ifdirective.namein['Speak','Play']:withopen(f'./output_{i}.mp3','wb')asf:f.write(directive.audio_attachment)finally:stream.stop_stream()stream.close()p.terminate()

语音请求生命周期

alexa命令可能与以前的命令有关,例如,

[你]“亚历克斯,回答20个问题” [亚历山大]“是动物、矿物还是蔬菜?” [你]“矿物” “有价值吗” [你]“不” [Alexa]“是吗……”

这可以通过将相同的对话框请求id传递给多个send_audio_file调用来实现:

fromavs_client.avs_clientimporthelpersdialog_request_id=helpers.generate_unique_id()directives_one=alexa_client.send_audio_file(audio_one,dialog_request_id=dialog_request_id)directives_two=alexa_client.send_audio_file(audio_two,dialog_request_id=dialog_request_id)directives_three=alexa_client.send_audio_file(audio_three,dialog_request_id=dialog_request_id)

运行流媒体麦克风音频演示以使用此功能:

pip install avs_client[demo]
python -m avs_client.demo.streaming_microphone \
    --client-id="{enter-client-id-here}"\
    --client-secret="{enter-client-secret-here"}\
    --refresh-token="{enter-refresh-token-here}"

身份验证

要使用avs,首先必须有一个developer account。然后注册产品here。在“您的产品是应用程序还是设备”下选择“应用程序”?

客户需要您的client_idsecretrefresh_token

client kwargNotes
^{}Retrieve by clicking on the your product listed here
^{}Retrieve by clicking on the your product listed here
^{}You must generate this. See below

刷新令牌

您需要通过网络浏览器登录到amazon以获取刷新令牌。

若要启用此功能,请转到here,然后单击产品在Security Profile下设置一些安全设置:

settingvalue
Allowed Originshttp://localhost:9000
Allowed Return URLshttp://localhost:9000/callback/

请注意在“产品信息”下为“产品ID”输入的内容,因为这将用作设备类型ID(区分大小写!)

然后运行:

python -m avs_client.refreshtoken.serve \
    --device-type-id="{enter-device-type-id-here}"\
    --client-id="{enter-client-id-here}"\
    --client-secret="{enter-client-secret-here}"

按照网页浏览器中http://localhost:9000所示的屏幕说明进行操作。 完成后,亚马逊将返回您的refresh_token-您需要send audiorecorded voice

将音频传送到AVS

alexa_client.send_audio_file流媒体将类似文件的对象上载到avs,延迟时间很长。类文件对象可以是文件系统中的实际文件、包含麦克风音频的内存bytesio缓冲区,甚至可以是来自your browser over a websocket in real-time的音频流。

avs要求音频数据为16位线性pcm(lpcm16)、16khz采样率、单通道和小尾数。

永久AVS连接

调用alexa_client.connect()将创建到avs的持久连接。在没有向avs发出请求4分钟后,运行一个ping avs的线程。这可以防止由于不活动而强制关闭连接。

单元测试

要运行单元测试,请调用以下命令:

git clone git@github.com:richtier/alexa-voice-service-client.git
pip install -e .[test]
make test_requirements
make test

其他项目

这个库由alexa-browser-client使用,它允许您从浏览器与alexa对话。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
当使用RequestDispatcher时,servlets Java最终没有被调用   java生成对具有可变参数数的方法的调用   java如何使用select子句中的参数化列映射iBATIS的查询?   java无法创建类型为org的插件。阿帕奇。登录中。log4j。果心阿佩德。元素RollingFile的RollingFileAppender   java当子实体和父实体之间存在OneTONE JPA关系时,是否可以将其与父实体一起持久化?   Android上的java Facebook集成fbconnect断开链接   获取方法调用方的java机制   从列表创建Oracle阵列时出现java问题   添加和检索元素的ArrayList的java ArrayList   在java中从字符串中删除无效的XML字符   java如何构建完整生成的maven模块   java如何准确地改变播放所有分辨率midi文件的速度?   shell javac:无效标志:/src/中位_度。ubuntu中的java   java使用从其他类的方法检索到的信息