已经实现了的功能:
- 实时语音流控制机器狗的运动
预期实现的功能还有将机器狗的状态进行语音播报,先记录一下实现过程。我的设计思路是这样的,首先进行snowboy语音唤醒,然后唤醒后进入语音识别功能,之后运动控制部分订阅语音识别的消息进行相应的动作,并且发布消息给语音合成模块进行状态的播报。
移植语音合成SDK
首先要先移植语音合成SDK,所使用的还是科大讯飞SDK,移植方式和之前的语音识别部分类似,也是将给的源码修改成cpp文件即可,并编写订阅器接收话题消息。主要需要修改回调函数和主函数部分。
void xfcallback(const std_msgs::String::ConstPtr& msg)
{
char cmd[2000];
const char* text;
int ret = MSP_SUCCESS;
const char* session_begin_params = "voice_name = xiaoyan, text_encoding = utf8, sample_rate = 16000, speed = 50, volume = 50, pitch = 50, rdn = 2";
const char* filename = "tts_sample.wav";
char* ss="nothing"; //语音识别的结果不是关键词的情况,语音播报nothing
if (wakeupflag) //只有在snowboy语音唤醒的情况下才进行语音合成
{
if(voiceupflag) //如果机器狗开始执行相应的动作
{
std::cout<<"I heard :"<<msg->data.c_str()<<std::endl