• 使用Qt的文本转语音模块


    前言

    最近参与一个项目,已经处于收尾阶段,谁知突然又冒出一个提示音的需求,而产品经理又异想天开,直接读语音(老天,早说啊)。还好Qt有文本转语音模块,使用方法也不复杂。本次记录,笔者在win10下的测试

    一、封装一个最简单的文本转语音类

    笔者需要说明下,若是使用中文系统,QTextToSpeech默认会设置成支持中文的,而笔者是英文系统,所以需要增加一些设置

    1. class Tool_Speech : public QObject
    2. {
    3. Q_OBJECT
    4. public:
    5. explicit Tool_Speech(QObject *parent = nullptr);
    6. //可以从Qml中调用
    7. Q_INVOKABLE void speak(const QString text);
    8. signals:
    9. private:
    10. QTextToSpeech *m_speech = nullptr;
    11. };

     类的头文件很简单,只是留了一个函数,以便在qml中调用

    1. Tool_Speech::Tool_Speech(QObject *parent)
    2. : QObject{parent}
    3. {
    4. m_speech = new QTextToSpeech(this);
    5. //需要选择中国
    6. const QVector locales = m_speech->availableLocales();
    7. // qDebug()<<"locale"<
    8. for (const QLocale &locale : locales) {
    9. if(locale.country() == QLocale::China)
    10. {
    11. m_speech->setLocale(locale);
    12. break;
    13. }
    14. }
    15. //先选择女声吧
    16. const QVector voices = m_speech->availableVoices();
    17. // qDebug()<<"voices" <
    18. for (QVoice voice : qAsConst(voices)) {
    19. // qDebug()<<"voice" <
    20. // <
    21. // <
    22. if(voice.gender() == QVoice::Female)
    23. {
    24. m_speech->setVoice(voice);
    25. break;
    26. }
    27. }
    28. qDebug()<locale();
    29. //以下是测试用的,乱敲的
    30. m_speech->say("高耸,高峻。女(汝)死必于崤之岩崟之下。");
    31. }
    32. void Tool_Speech::speak(const QString text)
    33. {
    34. m_speech->say(text);
    35. }

     因为笔者是英文系统,且安装了中文包,首先需要选中国,若没安装中文包,可能不会出现中国选择;

    笔者测试发现,选择中文包后,只有成年女声,好吧没得先。笔者没有找到修改性别和年龄段的地方,应该是系统中没有吧

    以上修改完成后,就可以使用QTextToSpeech::say()来读文本了

    注:若遇到不支持的语言,是不会读的,直接跳到下一句

    二、其他可供调节的参数

    1.QTextToSpeech::pause()

    在指定的边界位置暂停,这个位置可以是如下值:

    • QTextToSpeech::BoundaryHint::Default0Uses 引擎的默认值
    • QTextToSpeech::BoundaryHint::Immediate 立即停下
    • QTextToSpeech::BoundaryHint::Word 读完当前的词组再停下
    • QTextToSpeech::BoundaryHint::Sentence 读完当前这句话再停下 

    2.QTextToSpeech::resume()

    暂停后,可恢复阅读

    3.QTextToSpeech::stop()

    在指定的边界位置停止阅读,参数同暂停

    4.setPitch(double pitch)

    调节音高,取值范围为-1.0到1.0

    越小声音越低沉,越大声音再尖锐

    5.setRate(double rate)

    调节阅读速度,取值范围为-1.0到1.0

    6.setVolume(double volume)

    调节阅读声音大小,取值范围为0.0到1.0

    后记

    Qt6.4版本还未发布,但文本转语音模块已经回归,笔者在win10下测试了Qt6.4的beta3版本。 引擎又增加了一个(不支持中文),还出现了Qml导入(当前无法使用),期待正式版的发布

    PS.Qt6.4版本,示例加载已默认使用CMake了

  • 相关阅读:
    nginx 配置防盗链(了解)
    安全狗再次入选中国数字安全百强报告
    【SLAM论文阅读笔记】Multi-modal Semantic SLAM for Complex Dynamic Environments
    牛客多校 1 (字典序 模拟 几何 斜率 启发式合并+缩边 期望dp )
    未来可期!我国保健食品将迎来黄金时期
    【UE虚幻引擎】UE源码版编译、Andorid配置、打包
    重磅发布 OpenAI 推出用户自定义版 ChatGPT
    Tekton 设计简介 及 实践
    Flask框架学习:蓝图的使用
    代码随想录算法训练营第四十九天 | 139.单词拆分、关于多重背包,你该了解这些!
  • 原文地址:https://blog.csdn.net/aggs1990/article/details/126610755