< >
Home » ROS与语音交互教程 » ROS与语音交互教程-ROS下科大讯飞语音合成

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: '你好,我是机器人'"

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros与语音交互教程, ros 语音, 科大讯飞