当前位置: 首页 > news >正文

使用Qt的文本转语音模块

前言

最近参与一个项目,已经处于收尾阶段,谁知突然又冒出一个提示音的需求,而产品经理又异想天开,直接读语音(老天,早说啊)。还好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<QLocale> locales = m_speech->availableLocales();
//    qDebug()<<"locale"<<locales;
    for (const QLocale &locale : locales) {
        if(locale.country() == QLocale::China)
        {
            m_speech->setLocale(locale);
            break;
        }
    }
//先选择女声吧
    const QVector<QVoice> voices = m_speech->availableVoices();
//    qDebug()<<"voices" <<voices;
    for (QVoice voice : qAsConst(voices)) {
//        qDebug()<<"voice" <<voice.name()
//               <<QVoice::genderName(voice.gender())
//              <<QVoice::ageName(voice.age());
        if(voice.gender() == QVoice::Female)
        {
            m_speech->setVoice(voice);
            break;
        }
    }
    qDebug()<<m_speech<<m_speech->locale();
//以下是测试用的,乱敲的
    m_speech->say("高耸,高峻。女(汝)死必于崤之岩崟之下。");
}

void Tool_Speech::speak(const QString text)
{
    m_speech->say(text);
}

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

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

以上修改完成后,就可以使用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了

相关文章:

  • 码农必备生活常识:话费慢充到账慢怎么办?
  • 阿里开源-JVM-SandBox
  • 人工神经网络基本原理概述总结
  • Zemax操作38--POP(物理光学传播)的用法
  • (小白学Java)Java简介和基本配置
  • Cyanine5.5 tetrazine|Cy5.5-tetrazine|花青素Cy5.5四嗪
  • 阿里巴巴、阿里云Java面试题、笔试题(含答案)
  • git常用操作总结
  • 如何用小程序端进行测试?
  • CREO:CREO软件之工程图【布局】之一般视图、投影视图、详细视图、局部剖视图、向视图、局部放大视图、旋转剖视图的简介及其使用方法(图文教程)之详细攻略
  • 【网络通信】websocket如何断线重连
  • T Chat 第九期「 李泽磊 - 我在百度做阅读器 」9 月 1 日晚 8 点开播
  • Git从入门到项目实战,一篇文章吃透Git
  • 1.5-36:计算多项式的值
  • uniapp 学习笔记二十一 路由跳转及产品详情数据渲染
  • Akka系列(七):Actor持久化之Akka persistence
  • C++11: atomic 头文件
  • go append函数以及写入
  • JavaScript的使用你知道几种?(上)
  • java中的hashCode
  • Linux CTF 逆向入门
  • Linux各目录及每个目录的详细介绍
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 产品三维模型在线预览
  • 云大使推广中的常见热门问题
  • 带你开发类似Pokemon Go的AR游戏
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #pragma once与条件编译
  • $jQuery 重写Alert样式方法
  • (4.10~4.16)
  • (6)设计一个TimeMap
  • (9)目标检测_SSD的原理
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (状压dp)uva 10817 Headmaster's Headache
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Core 项目指定SDK版本
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET关于 跳过SSL中遇到的问题
  • .NET简谈设计模式之(单件模式)
  • /etc/skel 目录作用
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @基于大模型的旅游路线推荐方案
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [c++] 自写 MyString 类