Qt 播放语音 QTextToSpeech
前言:
看 qt 的 demo 看到一个播放语音的 玩了玩 还可以
就是太"傻瓜"的操作了 我以为能学到一些东西
speech->say("你好");
这样就能说 你好
我这就不弄动图了 因为听不到声音
基本的功能
设置声音
设置速率
设置高低音
然后 有 播放引擎 是基于你系统的TTS 引擎
语言的话 可以选择 中文 英文 等 去系统里面可以设置
QTextToSpeech (Qt 5.8+ 才有 这个模块)
QTextToSpeech类提供了对文本到语音引擎的方便访问
使用say()开始合成文本。可以使用setLocale()指定语言。要在可用的声音之间进行选择,请使用setVoice()。语言和声音依赖于每个平台上可用的合成器。在Linux上,语音分配器是默认使用的。
在 pro 加入 QT+= qtexttospeech
#include < QTextToSpeech >
这个代码 我看了一下 感觉没啥好看的
这个类 给封装的 很简单
写一些接口的使用吧
获取可用的引擎 QTextToSpeech::availableEngines()
foreach (QString engine, QTextToSpeech::availableEngines())qDebug()<<engine;
类的实例化
如果不指定引擎 可以选择默认的
QTextToSpeech * m_speech = new QTextToSpeech();
可以用我们上面选择的可用的引擎的名字传入
QTextToSpeech * m_speech = new QTextToSpeech(engineName);
setRate(double)
可以设置 速率 高低音 音量
此属性保存当前语音速率,范围从-1.0到1.0。默认值0.0是正常的语音流。
setPitch(double)
此属性保存语音音高,范围从-1.0到1.0。默认的0.0是正常的语音音高。
setVolume(double)
此属性保存当前音量,范围从0.0到1.0。默认值是平台的默认音量。
void setVoice(const QVoice &voice);
设置 声音是谁的 我看window下 有个男声音和女声音
设置声音使用。
注意:在某些平台上,设置语音会更改其他语音属性,如地区、音高等。这些变化触发了信号的发射。
void setLocale(const QLocale &locale);
设置语言的语种 有中文 英文啥的
将语言环境设置为给定的语言环境。默认是系统语言环境。
注意:属性区域设置的Setter函数。
播放语音 void say(const QString &text);
传入 字符串
比如 say(“hello world”) 语音里就说 hello world
它是异步的
开始合成文章。这个函数将开始异步读取文本。使用state属性可以使用当前状态。一旦合成完成,就会发出stateChanged()信号,该信号处于就绪状态。
一些状态 (就绪 speaking 暂停中 等)
官方demo 用的一些 接口 我上面都说了
其他的都是一些 界面和逻辑的代码
看一下也可以
下面把 Qt demo 的整个 代码贴一下
.h
#include <QtWidgets/qmainwindow.h>#include "ui_mainwindow.h"#include <QTextToSpeech>class MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent = 0);public slots:void speak();void stop();void setRate(int);void setPitch(int);void setVolume(int volume);void stateChanged(QTextToSpeech::State state);void engineSelected(int index);void languageSelected(int language);void voiceSelected(int index);void localeChanged(const QLocale &locale);private:Ui::MainWindow ui;QTextToSpeech *m_speech;QVector<QVoice> m_voices;
};
.cpp
#include "mainwindow.h"
#include <QLoggingCategory>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent),m_speech(0)
{ui.setupUi(this);QLoggingCategory::setFilterRules(QStringLiteral("qt.speech.tts=true \n qt.speech.tts.*=true"));// Populate engine selection listui.engine->addItem("Default", QString("default"));foreach (QString engine, QTextToSpeech::availableEngines())qDebug()<<"engine:"<<engine;ui.engine->setCurrentIndex(0);engineSelected(0);connect(ui.speakButton, &QPushButton::clicked, this, &MainWindow::speak);connect(ui.pitch, &QSlider::valueChanged, this, &MainWindow::setPitch);connect(ui.rate, &QSlider::valueChanged, this, &MainWindow::setRate);connect(ui.volume, &QSlider::valueChanged, this, &MainWindow::setVolume);connect(ui.engine, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &MainWindow::engineSelected);
}void MainWindow::speak()
{m_speech->say(ui.plainTextEdit->toPlainText());
}
void MainWindow::stop()
{m_speech->stop();
}void MainWindow::setRate(int rate)
{m_speech->setRate(rate / 10.0);
}void MainWindow::setPitch(int pitch)
{m_speech->setPitch(pitch / 10.0);
}void MainWindow::setVolume(int volume)
{m_speech->setVolume(volume / 100.0);
}void MainWindow::stateChanged(QTextToSpeech::State state)
{if (state == QTextToSpeech::Speaking) {ui.statusbar->showMessage("Speech started...");} else if (state == QTextToSpeech::Ready)ui.statusbar->showMessage("Speech stopped...", 2000);else if (state == QTextToSpeech::Paused)ui.statusbar->showMessage("Speech paused...");elseui.statusbar->showMessage("Speech error!");ui.pauseButton->setEnabled(state == QTextToSpeech::Speaking);ui.resumeButton->setEnabled(state == QTextToSpeech::Paused);ui.stopButton->setEnabled(state == QTextToSpeech::Speaking || state == QTextToSpeech::Paused);
}void MainWindow::engineSelected(int index)
{QString engineName = ui.engine->itemData(index).toString();delete m_speech;if (engineName == "default")m_speech = new QTextToSpeech(this);elsem_speech = new QTextToSpeech(engineName, this);disconnect(ui.language, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &MainWindow::languageSelected);ui.language->clear();// Populate the languages combobox before connecting its signal.QVector<QLocale> locales = m_speech->availableLocales();QLocale current = m_speech->locale();foreach (const QLocale &locale, locales) {QString name(QString("%1 (%2)").arg(QLocale::languageToString(locale.language())).arg(QLocale::countryToString(locale.country())));QVariant localeVariant(locale);ui.language->addItem(name, localeVariant);if (locale.name() == current.name())current = locale;}setRate(ui.rate->value());setPitch(ui.pitch->value());setVolume(ui.volume->value());connect(ui.stopButton, &QPushButton::clicked, m_speech, &QTextToSpeech::stop);connect(ui.pauseButton, &QPushButton::clicked, m_speech, &QTextToSpeech::pause);connect(ui.resumeButton, &QPushButton::clicked, m_speech, &QTextToSpeech::resume);connect(m_speech, &QTextToSpeech::stateChanged, this, &MainWindow::stateChanged);connect(m_speech, &QTextToSpeech::localeChanged, this, &MainWindow::localeChanged);connect(ui.language, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &MainWindow::languageSelected);localeChanged(current);
}void MainWindow::languageSelected(int language)
{QLocale locale = ui.language->itemData(language).toLocale();m_speech->setLocale(locale);
}void MainWindow::voiceSelected(int index)
{m_speech->setVoice(m_voices.at(index));
}void MainWindow::localeChanged(const QLocale &locale)
{QVariant localeVariant(locale);ui.language->setCurrentIndex(ui.language->findData(localeVariant));disconnect(ui.voice, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &MainWindow::voiceSelected);ui.voice->clear();m_voices = m_speech->availableVoices();QVoice currentVoice = m_speech->voice();foreach (const QVoice &voice, m_voices) {ui.voice->addItem(QString("%1 - %2 - %3").arg(voice.name()).arg(QVoice::genderName(voice.gender())).arg(QVoice::ageName(voice.age())));if (voice.name() == currentVoice.name())ui.voice->setCurrentIndex(ui.voice->count() - 1);}connect(ui.voice, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &MainWindow::voiceSelected);
}
Qt 播放语音 QTextToSpeech相关推荐
- QT播放语音的一系列问题
1.播放QRC内的资源或者网站资源时,使用QUrl直接构造:播放本地文件时,使用QUrl的fromLocalFile():路径不能含有中文:大部分错误码的原因是这些问题. 2.Qt 中的多媒体播放,w ...
- FreeSWITCH在呼叫失败的情况下如何播放语音提示
看到好多网友问到这个问题.一般我们在打电话时会听到"您拨的电话正在通话中,请稍后再拨....",或"电话无应答..."之类的提示,我们在 freeswitch ...
- WPF使用Animation仿WeChat(微信)播放语音消息
WPF开发者QQ群: 340500857 前言 WPF使用Animation仿WeChat(微信)播放语音消息? 效果图: 创建MyAnimationForever.cs如下: public clas ...
- JS 播放语音,将文本转成语音播放
function sss(){var u = new SpeechSynthesisUtterance();u.text = "你好.我要播放语音了...";u.lang = 'z ...
- android播放语音,切换听筒模式遇到的问题
android播放语音,切换听筒模式遇到的问题 2016年09月18日 15:14:40 Jessehuyang 阅读数:4943 标签: android 在android5.0以上我们设置听筒模式a ...
- 逆战玩着玩着服务器未响应,逆战进不去一直加载,为什么玩逆战加载很久,逆战内置qt修复,逆战进入游戏加载慢,逆战卡加载:逆战没qt了【为什么我逆战进不去QT官方语音】-南开游戏网...
逆战没qt了[为什么我逆战进不去QT官方语音] 2020-11-30 15:17:54 广告 为什么win10逆战QT语音无法启动 电脑没有声音是经常遇到的故障,一般有软件和硬件原因. 工具:电脑.相 ...
- android中实现录音功能,Android实现录音功能及播放语音功能
Android中实现录音功能其实很简单,直接调用的系统的就ok了,这里就不写实现的原理了,直接部署代码:所谓的实现就是用的MediaRecorder.服务器 录音功能代码:ide //开始录制 pri ...
- Unbuntu搭建pjsua实现自动拨号与自动播放语音
Unbuntu搭建pjsua实现自动拨号与自动播放语音 最近在工作的时候碰到了这么一个需求,要求实现自动拨号播放语音的功能.刚开始我想的是使用opensips搭建,搭建出来了之后发现只有一条命令行来发 ...
- 在树莓派上定时播放语音
在树莓派上定时播放语音的原因是家里的小朋友早上起床和出门拖延严重,另外有的时候忘记看天气预报带雨伞. 树莓派的好处是耗电少,环保一些.也确实不会因为要做个提醒的功能一直开着电脑.实际上家里的电脑还真是 ...
最新文章
- 谭浩强《C++程序设计》书后习题 第十三章-第十四章
- select * 和 select 所有字段的区别
- 微信小店 API 手册
- 3位格雷码的顺序编码_FPGA 设计之 跨时钟域(四 - 格雷码)
- fsmc同步通信设置_微服务模式-同步与异步
- 原生JavaScript对CSS进行格式化和压缩
- UDID被禁用后的集中替代品
- #6281. 数列分块入门 5
- mysql数据词典生成markdown_老板让我把数据库字典导出到Markdown格式的文件
- Java 实现图书管理系统
- python3 集体智慧编程第九章advancedclassify.py代码
- 前端根据银行卡号或银行的简码动态显示logo图标
- Hexo博客向百度提交链接
- IEEE论文格式要求(翻译)
- 轻松与劳氏Lowe‘s 对接 EDI 要准备什么?
- 关于 Windows 不断报 脚本错误 当前页面的脚本发生错误 警告窗口的解决办法
- js怎么模拟点击网页元素
- 在Windows7 系统上部署DNS服务器
- 批量手机号归属地查询
- xinetd.d详解
热门文章
- 史上最全的I9000手机鉴定(汇总整理)
- 你见过实体店从开张到倒闭用时最短的时间有多短?
- EXCEL宏代码大全
- 分享6款优秀的 AR/VR 开源库
- SI24R2E:智能电子学生卡2.4GHz考勤方案芯片
- android打包apk进程序闪退,解决安卓打包apk安装后打开闪退的问题
- 小翼推荐-【最新qq空间软件,软件下载】
- 悟空问答 App 宣布下线 品牌启用双拼域名wukong.com
- RTP/RTCP详解
- toybox执行linux程序,OpenBox的配置教程(v0.6)