QtApplets-QTextToSpeechDemo

news/2024/5/20 3:25:35 标签: qt, 语音, 文字, QTextToSpeech
头图

QTextToSpeechDemo_2">QtApplets-QTextToSpeechDemo

哎呀妈呀,这个系列应该有好长一段时间没有更细了,因为啥呢,主要是因为这一段时间都在折腾Debian 10 下的软件开发,都是在调试代码,实在是没有啥新功能需要试验的,有的也是在Linux下的设置,脚本啥的,与Qt相关,没有啥新的功能。所以就耽搁了。

今天要研究的类其实很简单,QTextToSpeech


文章目录

  • QtApplets-QTextToSpeechDemo
    • QTextToSpeech
      • 文本朗读-say。
      • 音量设置-setVolume
      • 音高设置-setPitch
      • 朗读速率设置-setRate
      • 朗读声音选择-setVoice
    • 核心代码
      • pro文件
      • 头文件
      • 源文件
    • 程序截图
    • ☞ 源码

关键字: QTextToSpeechQt语音文字关键字5

QTextToSpeech_14">QTextToSpeech

官方文档里面对这个类的描述很简单,如下

he QTextToSpeech class provides a convenient access to text-to-speech engines

我理解就是官方分装了结果系统文字语音接口给我们简单的使用一下。今天我们主要研究一下几个问题

  1. 文本朗读
  2. 音量设置
  3. 音高设置
  4. 朗读速率设置
  5. 朗读声音选择

文本朗读-say。

void say(const QString &text)

参数就是我们传入我们要转成语音的字符串

它是异步的开始合成文章。这个函数将开始异步读取文本。使用state属性可以使用当前状态。一旦合成完成,就会发出stateChanged()信号,该信号处于就绪状态。

    enum State {
        Ready,
        Speaking,
        Paused,
        BackendError
    };

音量设置-setVolume

void setVolume(double volume)

范围从0.0到1.0。默认值是平台的默认音量

音高设置-setPitch

void setPitch(double pitch)

范围从-1.0到1.0。默认的0.0是正常的语音音高

朗读速率设置-setRate

void setRate(double rate)

范围从-1.0到1.0。默认值0.0是正常的语音

朗读声音选择-setVoice

void setVoice(const QVoice &voice)

设置 声音是谁的 我看window下 有个男声音和女声音

核心代码

以上就是今天要搞得内容,下面直接上源码,很简单

pro文件

需要在pro文件中加入以下代码

QT += texttospeech

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTextToSpeech>
#include <QTextEdit>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_clear_clicked();

    void on_pushButton_read_clicked();

    void on_doubleSpinBoxPitch_valueChanged(double arg1);

    void on_doubleSpinBox_Rate_valueChanged(double arg1);

    void on_doubleSpinBox_Volume_valueChanged(double arg1);

    void on_comboBox_currentIndexChanged(int index);

private:
    Ui::Widget *ui;

    QTextToSpeech* mQTextToSpeech = nullptr;

};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->resize(QSize(1366,768));
    this->setWindowTitle("Qt文字语音Demo");
    mQTextToSpeech = new QTextToSpeech;
    mQTextToSpeech->say("Hello World");
    mQTextToSpeech->setPitch(0.0);

}

Widget::~Widget()
{
    delete ui;
}

/**
 * @brief Widget::on_pushButton_clear_clicked
 * 清除输入框
 */
void Widget::on_pushButton_clear_clicked()
{
    ui->textEdit->clear();
}

/**
 * @brief Widget::on_pushButton_read_clicked
 * 朗读输入文字
 */
void Widget::on_pushButton_read_clicked()
{

    if(ui->textEdit->document()->isEmpty())
        QMessageBox::warning(this,"警告","文本内容为空",QMessageBox::Ok);
    else
        if(mQTextToSpeech)
            mQTextToSpeech->say(ui->textEdit->document()->toRawText());
}

/**
 * @brief Widget::on_doubleSpinBoxPitch_valueChanged
 * @param arg1
 * 设置音高
 */
void Widget::on_doubleSpinBoxPitch_valueChanged(double arg1)
{
    mQTextToSpeech->setPitch(arg1);
}

/**
 * @brief Widget::on_doubleSpinBox_Rate_valueChanged
 * @param arg1
 * 设置速率
 *
 */
void Widget::on_doubleSpinBox_Rate_valueChanged(double arg1)
{
    mQTextToSpeech->setRate(arg1);
}

/**
 * @brief Widget::on_doubleSpinBox_Volume_valueChanged
 * @param arg1
 * 设置音量
 */
void Widget::on_doubleSpinBox_Volume_valueChanged(double arg1)
{
    mQTextToSpeech->setVolume(arg1);
}

/**
 * @brief Widget::on_comboBox_currentIndexChanged
 * @param index
 * 设置音色
 */
void Widget::on_comboBox_currentIndexChanged(int index)
{
    //mQTextToSpeech->setVoice();
}


程序截图

image-20221026143940935

☞ 源码

源码链接:GitHub仓库自取

使用方法:☟☟☟


博客签名2021

http://www.niftyadmin.cn/n/1082.html

相关文章

举个栗子~Tableau 技巧(242):学做 条形图 和 桑基图 的组合图表

在应用模板&#xff1a;超市数据分析模型 中&#xff0c;产品分析仪表板&#xff08;如下图&#xff09;的右侧视图呈现出&#xff1a;各类别及其子类别产品的销售总额排列——各类别产品的销售总额、子类别的销售额占比。 许多数据粉希望学习这个图表的实现方法。其实&#…

java基础10题

1.abstract和final可以同时作为一个类的修饰符。&#xff08; &#xff09; A.正确 B,错误 2.有以下类定义&#xff1a; abstract class Animal{abstract void say(); } public class Cat extends Animal{public Cat(){System.out.printf("I am a cat");}public sta…

VUE |“ 登录页面”的权限以及接口问题

目录 一、功能需求 二、前提准备 三、具体实现 一、功能需求 今天写到项目的登录页面&#xff0c;我这边是没有后台数据接口的&#xff0c;所以我们用了Mock模拟了一个假的数据&#xff0c;那么我们应该怎么实现呢&#xff1f;我们先来看一下功能需要。 当我们退出登录…

CSS继承:inherited和initial

任何样式都有两种值&#xff0c;一种加inherited&#xff0c;一种叫initial 每个标签都有浏览器默认样式 首先看颜色属性 color有3种值 颜色有3种表示方式&#xff0c;最后一种是rgb(),用十进制来表示&#xff0c;但很少用&#xff0c;常用的是中间那个 来看实例 这里前面是红…

职言 | 校招面试有感,一个面试官的几点建议

职言&#xff1a; 最近一直在校招&#xff0c;我&#xff08;作者&#xff09;和同事说等这段时间结束&#xff0c;我不想再参与面试了&#xff0c;快面吐了。从校招开始&#xff0c;我团队前前后后陆续进了500多封学生简历&#xff0c;我经常一整天排满了面试&#xff0c;聊到…

vue中路由传参

路由传参一&#xff1a;params传参二&#xff1a;params传参三&#xff1a;query传参概念&#xff1a; vue 路由传参的使用场景一般都是应用在父路由跳转到子路由时&#xff0c;携带参数跳转。传参方式可划分为 params 传参和 query 传参&#xff0c;而 params 传参又可分为…

2022高频经典前端面试题(html+css+js上篇,含答案)

博主经历过多轮面试&#xff0c;因此想将自己的面试经验以及答题技巧&#xff0c;分享给即将面试找前端工作的同学。 2022高频经典前端面试题分为上中下三篇&#xff0c;分别会有html,css,js,es6,vue,ts,nodejs,以及hr面和反问面试官几个维度去进行&#xff0c;完整的还原面试场…

python基于PHP+MySQL的高校公选课管理信息系统

随着我国教育质量提高,在校大学生的数量也在不断的增长。相对应的如何让学生根据自己的兴趣爱好进行在线选课,从而有目的的对学生进行培养,也是当前很多高校教务人员所关心的问题。能够让更多的大学生进行在线自主选课,选择自己所喜欢的课程和教师,我们开发了高校公选课管理系统…