如何在Qt项目中通过Speech Dispatcher调用RHVoice语音引擎?
在Qt C++项目中指定Speech-Dispatcher使用RHVoice的解决方案
方法1:修改Speech-Dispatcher全局配置
Speech-Dispatcher的默认引擎可通过配置文件强制设置为RHVoice,Qt调用TextToSpeech时会自动沿用该配置:
- 编辑全局配置文件(需sudo权限):
/etc/speech-dispatcher/speechd.conf,或用户级配置文件:~/.config/speech-dispatcher/speechd.conf - 找到
DefaultModule项,修改为:DefaultModule "rhvoice" - 如需指定语言或具体语音,可补充配置(比如
DefaultLanguage "zh"或DefaultVoice "your_voice_name",语音名称可通过rhvoice-test工具查看) - 重启Speech-Dispatcher服务:
sudo systemctl restart speech-dispatcher
方法2:直接调用Speech-Dispatcher原生API
绕过Qt TextToSpeech的封装限制,直接使用libspeechd的API指定RHVoice模块:
- 安装libspeechd开发包:
sudo apt install libspeechd-dev - 在Qt项目的
.pro文件中添加链接依赖:LIBS += -lspeechd - 调用代码示例:
#include <speech-dispatcher/libspeechd.h> void speakWithRHVoice(const QString& text) { SPDConnection* conn = spd_open("qt-rhvoice-app", "main", NULL, SPD_MODE_THREADED); if (conn) { // 指定使用RHVoice模块 spd_set_module(conn, "rhvoice"); // 可选:设置具体语音 spd_set_synthesis_voice(conn, "anna"); spd_say(conn, SPD_MESSAGE, text.toUtf8().constData()); // 按需等待播放完成 while (spd_get_state(conn) != SPD_STATE_READY) { usleep(100000); } spd_close(conn); } }
方法3:通过环境变量临时指定
无需修改配置文件,启动Qt程序前设置环境变量强制Speech-Dispatcher使用RHVoice:
- 终端启动程序时:
SPD_DEFAULT_MODULE=rhvoice ./your-qt-app - Qt Creator中运行时,在项目「运行环境」中添加环境变量:
SPD_DEFAULT_MODULE=rhvoice
内容的提问来源于stack exchange,提问作者CPPUIX
相关产品推荐
相关产品推荐

