ROS与语音交互教程-ROS下科大讯飞语音合成
ROS与语音交互教程-ROS下科大讯飞语音合成
说明
让机器人具备说的功能,把要告诉用户的内容使用中文说出来
该功能模块基于科大讯飞SDK中的tts_sample例程
步骤
- 编辑tts_subscribe.cpp
void voiceWordsCallback(const std_msgs::String::ConstPtr& msg)
{
…… ……
std::cout<<"I heard :"<<msg->data.c_str()<<std::endl;
text = msg->data.c_str();
/* 文本合成 */
printf("开始合成 ...\n");
ret = text_to_speech(text, filename, session_begin_params);
if (MSP_SUCCESS != ret)
{
printf("text_to_speech failed, error code: %d.\n", ret);
}
printf("合成完毕\n");
…… ……
}
int main(int argc, char* argv[])
{
…… ……
ros::init(argc,argv,"TextToSpeech");
ros::NodeHandle n;
ros::Subscriber sub =n.subscribe("voiceWords", 1000,voiceWordsCallback);
ros::spin();
…… ……
return 0;
}
代码解释:
main()函数中声明了一个订阅voiceWords话题的Subscriber,接收输入的语音字符串。接收成功后,在回调函数voiceWordsCallback()中使用SDK接口将字符串转换成中文语音。
- 编辑CMakeLists.txt中添加编译规则
add_executable(tts_subscribe src/tts_subscribe.cpp)
target_link_libraries(
tts_subscribe
${catkin_LIBRARIES}
libmsc.so -ldl -pthread
)
- 编译
catkin_make
- 运行,测试
roscore
rosrun robot_voice tts_subscribe
rostopic pub /voiceWords std_msgs/String "data: '你好,我是机器人'"
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号