本帖最后由 lmy8812 于 2019-3-22 21:42 编辑
如题,应人需求,用NodeRed搞了个白天直接调用百度TTS输出到Pi上的音响的流程。
前置条件,需要ssh到pi上安装alsa库
sudo apt-get install libasound2-dev
然后在NR的节点管理里安装 “node-red-contrib-speakerpi”
这个是pi的音响输出节点,必须先安装alsa库之后,才能成功安装
放个图先
- 第一个node输入想要语音合成的文本;
- 第二个node设置TTS工作时间(朝9晚9);
- 第三个node把第一个node的msg.payload转成msg.text使信息可以一直传递下去,如果一开始的文本输入方式做修改的话,这个node可以省去;
- 第四个node填自己百度TTS的API 和 secret;
- 然后第五个POST 相关access_token,返回成JSON对象;
- 第六个根据百度API文档上传文本内容、token以及参数:有POST和GET两个方法,用的是POST;GET方法被注释了,想用的话直接把注释的地址在下一个node里替换就好。这里有个问题,API文档里建议对文本进行2次urlencode编码。但发现只有GET法可以2次编码,POST只适用1次urlencode编码。
- 第七个node就是POST或者GET百度生成的WAV音频,需设置返回成二进制数据,查看了WAV头,采样率是16000;
- 因此,在第八个node里增加一条msg.samplerate为16000,同时把payload转成speech给最后的speaker node;
- 最后一个node设置为stream based模式,单声道,16bit精度,采样率因为没有16000所以在上个node里设置,会自动覆盖。这个node有个问题,精度一设成8bit,小红就会崩溃,不清楚具体原因。
目前只基于Pi做了测试,欢迎各位吃个螃蟹,不知道白群晖搞不搞得定。
好了,基本没啥需要补充了,惯例上马
|