ROS应用 —— Ubuntu16.04下 科大讯飞语音合成的修改&使用(3)

ROS应用 —— Ubuntu16.04下科大讯飞语音听写的修改&使用(2)

1. 将Linux_iat1218_5c6e7f8d/samples/tts_online_sample下的tts_online_sample.c放到catkin_ws/src/robot_voice/src下,并更改其代码,重命名为 tts_subscribe.cpp;

注:appid号更改为你自己的;

  • tts_subscribe.cpp的代码如下,主要更改了回调函数,即文本合成部分;此外,可能注意 #include 头文件中删除“robot_voice/”,这主要跟头文件的具体位置有关;
// 修改部分的代码

void voiceWordsCallback(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"; //合成的语音文件名称


    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[])
{
    int         ret                  = MSP_SUCCESS;
    const char* login_params         = "appid = 5c6e7f8d, work_dir = .";//登录参数,appid与msc库绑定,请勿随意改动
    /*
    * rdn:           合成音频数字发音方式
    * volume:        合成音频的音量
    * pitch:         合成音频的音调
    * speed:         合成音频对应的语速
    * voice_name:    合成发音人
    * sample_rate:   合成音频采样率
    * text_encoding: 合成文本编码格式
    *
    * 详细参数说明请参阅《讯飞语音云MSC--API文档》
    */

    /* 用户登录 */
    ret = MSPLogin(NULL, NULL, login_params);//第一个参数是用户名,第二个参数是密码,第三个参数是登录参数,用户名和密码可在http://open.voicecloud.cn注册获取
    if (MSP_SUCCESS != ret)
    {
        printf("MSPLogin failed, error code: %d.\n", ret);
        /*goto exit ;*///登录失败,退出登录
        toExit();
    }
    printf("\n###########################################################################\n");
    printf("## 语音合成(Text To Speech,TTS)技术能够自动将任意文字实时转换为连续的 ##\n");
    printf("## 自然语音,是一种能够在任何时间、任何地点,向任何人提供语音信息服务的  ##\n");
    printf("## 高效便捷手段,非常符合信息时代海量数据、动态更新和个性化查询的需求。  ##\n");
    printf("###########################################################################\n\n");


    ros::init(argc,argv,"TextToSpeech");
    ros::NodeHandle n;
    ros::Subscriber sub =n.subscribe("voiceWords", 1000,voiceWordsCallback);
    ros::spin();

exit:
    printf("按任意键退出 ...\n");
    getchar();
    MSPLogout(); //退出登录

    return 0;
}

2. 在 CMakeList.txt 中添加编译规则:

add_executable(tts_subscribe src/tts_subscribe.cpp)
target_link_libraries(tts_subscribe ${catkin_LIBRARIES} libmsc.so -ldl -lpthread)

3. 编译整个工作空间:

  • cd ~/catkin_ws
  • catkin_make

4. 运行测试:

// 终端1:启动管理器节点
roscore
// 终端2:运行可执行文件(订阅voiceWords话题)
rosrun robot_voice tts_subscribe
// 终端3:在话题 voiceWords 上发布 std_msgs/String 类型的数据,内容为:你好,我是机器人
rostopic pub /voiceWords std_msgs/String "你好,我是机器人"

注:rostopic pub [话题名称] [消息类型] [参数]:使用指定的话题名称发布消息参数详解;

这时机器人会用普通话说出:"你好,我是机器人";终端结果如下图所示:

此外,还会生成一个msc文件夹和.wav语音文件,生成的位置由自己执行命令的终端位置决定:

可能出现的问题

问题1

报错:sh: 1: mplayer: not found

原因:没有安装mplayer;

解决:sudo apt-get install mplayer

问题2

报错:

mplayer: could not connect to socket

mplayer: No such file or directory

Failed to open LIRC support. You will not be able to use your remote control.

原因:mplayer的配置问题;

解决:

// 打开~/.mplayer/config 文件
sudo gedit ~/.mplayer/config 
// 添加如下配置:
lirc=no
// 重新执行刚修改的初始化文件
source  ~/.mplayer/config 

问题3

报错:

QTTSAudioGet failed, error code: 10407.

text_to_speech failed, error code: 10407.

原因:appid号没有更改;

解决:更改为自己的appid号;

猜你喜欢

转载自blog.csdn.net/kongli524/article/details/87883309