• 使用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了

  • 相关阅读:
    LC 200, 721,684 并查集解法
    通过git bash激活虚拟环境遇到的问题
    《Effective Objective-C 2.0》读书笔记——熟悉Objective-C
    超详细Docker部署SpringBoot+Vue项目(三更博客项目部署)
    MyBatis:核心配置文件
    核壳二氧化钛纳米颗粒修饰DNA|二氢杨梅素修饰DNA药物|相关介绍
    Ubutnu允许ssh连接使用root与密码登录
    如何借助this指向实现精确判断类型和将类数组对象转数组
    Pb从入坑到放弃(三)数据窗口
    WebSocket的入门秘籍?
  • 原文地址:https://blog.csdn.net/aggs1990/article/details/126610755