最近参与一个项目,已经处于收尾阶段,谁知突然又冒出一个提示音的需求,而产品经理又异想天开,直接读语音(老天,早说啊)。还好Qt有文本转语音模块,使用方法也不复杂。本次记录,笔者在win10下的测试
笔者需要说明下,若是使用中文系统,QTextToSpeech默认会设置成支持中文的,而笔者是英文系统,所以需要增加一些设置
- class Tool_Speech : public QObject
- {
- Q_OBJECT
- public:
- explicit Tool_Speech(QObject *parent = nullptr);
- //可以从Qml中调用
- Q_INVOKABLE void speak(const QString text);
- signals:
-
- private:
-
- QTextToSpeech *m_speech = nullptr;
- };
类的头文件很简单,只是留了一个函数,以便在qml中调用
- Tool_Speech::Tool_Speech(QObject *parent)
- : QObject{parent}
- {
- m_speech = new QTextToSpeech(this);
-
- //需要选择中国
- const QVector
locales = m_speech->availableLocales(); - // qDebug()<<"locale"<
- for (const QLocale &locale : locales) {
- if(locale.country() == QLocale::China)
- {
- m_speech->setLocale(locale);
- break;
- }
- }
- //先选择女声吧
- const QVector
voices = m_speech->availableVoices(); - // qDebug()<<"voices" <
- for (QVoice voice : qAsConst(voices)) {
- // qDebug()<<"voice" <
- // <
- // <
- if(voice.gender() == QVoice::Female)
- {
- m_speech->setVoice(voice);
- break;
- }
- }
- qDebug()<
locale(); - //以下是测试用的,乱敲的
- m_speech->say("高耸,高峻。女(汝)死必于崤之岩崟之下。");
- }
-
- void Tool_Speech::speak(const QString text)
- {
- m_speech->say(text);
- }
因为笔者是英文系统,且安装了中文包,首先需要选中国,若没安装中文包,可能不会出现中国选择;
笔者测试发现,选择中文包后,只有成年女声,好吧没得先。笔者没有找到修改性别和年龄段的地方,应该是系统中没有吧
以上修改完成后,就可以使用QTextToSpeech::say()来读文本了
注:若遇到不支持的语言,是不会读的,直接跳到下一句
在指定的边界位置暂停,这个位置可以是如下值:
暂停后,可恢复阅读
在指定的边界位置停止阅读,参数同暂停
调节音高,取值范围为-1.0到1.0
越小声音越低沉,越大声音再尖锐
调节阅读速度,取值范围为-1.0到1.0
调节阅读声音大小,取值范围为0.0到1.0
Qt6.4版本还未发布,但文本转语音模块已经回归,笔者在win10下测试了Qt6.4的beta3版本。 引擎又增加了一个(不支持中文),还出现了Qml导入(当前无法使用),期待正式版的发布
PS.Qt6.4版本,示例加载已默认使用CMake了