目的:实现语音读文字功能

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTextToSpeech>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();public:void init();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;
};#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLoggingCategory>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow),m_speech(0)
{ui->setupUi(this);init();
}void MainWindow::init()
{QLoggingCategory::setFilterRules(QStringLiteral("qt.speech.tts=true \n qt.speech.tts.*=true"));// Populate engine selectionui->engine->addItem("Default", QString("default"));foreach (QString engine, QTextToSpeech::availableEngines())ui->engine->addItem(engine, engine);ui->engine->setCurrentIndex(0);engineSelected(0);// m_speech = new QTextToSpeech(this);connect(ui->pushButtonSpeak,SIGNAL(clicked(bool)),this,SLOT(speak()));connect(ui->SliderByPitch,SIGNAL(valueChanged(int)),this,SLOT(setPitch(int)));connect(ui->SliderByRate,SIGNAL(valueChanged(int)),this,SLOT(setRate(int)));connect(ui->SliderByVolume,SIGNAL(valueChanged(int)),this,SLOT(setVolume(int)));connect(ui->engine,SIGNAL(currentIndexChanged(int)),this,SLOT(engineSelected()));
}MainWindow::~MainWindow()
{delete ui;
}
void MainWindow::speak(){if(m_speech->state()==QTextToSpeech::Ready){m_speech->say("hello world");m_speech->say("zcf,i love you");m_speech->say("现在语音聊天机器人是一度火热,网上也有其他编程软件的语音聊天机器人");}}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) {statusBar()->showMessage("Speech started...");} else if (state == QTextToSpeech::Ready)statusBar()->showMessage("Speech stopped...", 2000);else if (state == QTextToSpeech::Paused)statusBar()->showMessage("Speech paused...");elsestatusBar()->showMessage("Speech error!");ui->pushButtonpause->setEnabled(state == QTextToSpeech::Speaking);ui->pushButtonresume->setEnabled(state == QTextToSpeech::Paused);ui->pushButtonStop->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,SIGNAL(currentIndexChanged(int)),this,SLOT(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->SliderByRate->value());setPitch(ui->SliderByPitch->value());setVolume(ui->SliderByVolume->value());connect(ui->pushButtonStop,SIGNAL(clicked(bool)),m_speech,SLOT(stop()));connect(ui->pushButtonpause,SIGNAL(clicked(bool)),m_speech,SLOT(pause()));connect(ui->pushButtonresume,SIGNAL(clicked(bool)),m_speech,SLOT(resume()));connect(m_speech,SIGNAL(stateChanged(QTextToSpeech::State)),this,SLOT(stateChanged(QTextToSpeech::State)));connect(m_speech,SIGNAL(localeChanged(QLocale)),this,SLOT(localeChanged(QLocale)));connect(ui->language,SIGNAL(currentIndexChanged(int)),this,SLOT(languageSelected(int)));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->engine,SIGNAL(currentIndexChanged(int)),this,SLOT(voiceSelected(int)));ui->engine->clear();m_voices = m_speech->availableVoices();QVoice currentVoice = m_speech->voice();foreach (const QVoice &voice, m_voices) {ui->engine->addItem(QString("%1 - %2 - %3").arg(voice.name()).arg(QVoice::genderName(voice.gender())).arg(QVoice::ageName(voice.age())));if (voice.name() == currentVoice.name())ui->engine->setCurrentIndex(ui->engine->count() - 1);}connect(ui->engine,SIGNAL(currentIndexChanged(int)),this,SLOT(voiceSelected(int)));}

实现:

Qt --实现语音读文字功能相关推荐

  1. 三大运营商回复 4G 降速;微信上线语音转文字功能;IntelliJ IDEA 2019.2.1 发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  2. Android studio调用科大讯飞的语音转文字功能

    Android studio调用科大讯飞的语音转文字功能 一.在科大讯飞的官网上注册并下载SDK 二.配置安卓项目 三.运行效果展示 一.在科大讯飞的官网上注册并下载SDK 1.首先去讯飞开放平台申请 ...

  3. 华为语音解锁设置_华为手机免费语音转文字功能如何开启?手把手教你如何设置,超赞...

    原标题:华为手机免费语音转文字功能如何开启?手把手教你如何设置,超赞 关于华为手机免费语音转文字功能,相信你也有所了解,但还有很大部份华为手机用户表示:我的手机为什么没有语音转文字的功能. 如果你是华 ...

  4. 知意字稿的语音转文字功能真的好用吗?

    知意字稿是知意配音的姐妹产品,我是刚好买了知意配音的永久会员送了一些时长,刚开始觉得没啥用,我一个做短视频的,很少会用到.直到最近开始写论文,让别人帮我录制了老师的指导内容,大概有半个小时,自己听觉得 ...

  5. Flutter学习第十三天,2021最新版超详细Flutter2.0实现百度语音转文字功能,Android和Flutter混合开发?

    Flutter实现百度语音转文字功能 1.新建一个flutter项目,来实现View端. 2.新建android端的module 1.打开flutter里面的Android文件 1.新建一个modul ...

  6. Qt学习:Qt将语音转换为文字

    qt本身没有提供将语音转换为文字的功能,但是可以通过调用一些第三方的语音识别API来实现.根据搜索结果,我找到了以下几种方法: 使用百度语音API,它可以提供在线和离线两种模式的语音识别服务,并且支持 ...

  7. Unity3D : 腾讯云语音(GCloudVoice)的语音转文字功能

    前言: 关于GCloudVoice的Unity3D接入,可以参考其他文章,不在本文的讨论 范围之内.这篇只针对在正常接入的前提下,如果实现语音转文字的相关功能: 正文: 1.初始化: 在最开始初始化的 ...

  8. iOS 语音读文字so easy

    #import <AVFoundation/AVFoundation.h> // 点击事件里读文字 -(void)touchesBegan:(NSSet<UITouch *> ...

  9. vue js 语音播报 语音读文字 window.speechSynthesis new SpeechSynthesisUtterance (补充无声音 问题解决办法)

    存在问题1 : 在google chrome 89版本之后 默认使用的线上服务来合成语音 所以在国内可能会没有声音 解决办法 : 通过getVoices 获取 localService为true 的字 ...

最新文章

  1. python ln2怎么写_Python2和3切换默认
  2. activiti实战系列 并行网关(parallelGateWay)
  3. OSPF特殊区域之STUB
  4. 名额有限 | 邀你奔赴一场与太极图形开发者的约会
  5. ABAP:向自建表写入数据时,需要注意的问题
  6. 2020年计算机视觉学习指南
  7. mysql数据类型详解系列
  8. MOSEK安装教程及安装过程遇到的问题
  9. gif一键抠图 在线_不用下载的在线抠图软件哪里找?
  10. 运动控制系统常用传感器介绍
  11. codeforces 909 f
  12. AI改写人类起源:黑猩猩并不是我们的祖先!
  13. python爬取百度百科获取中国高校信息
  14. spring boot 整合 ip2region(ip地址库)
  15. NYOJ 456 邮票分你一半
  16. react生命周期方法介绍
  17. LeetCode:剑指 Offer 58 - II. 左旋转字符串
  18. 三星android10手势,三星全面屏手势终于来了!看着有点熟悉
  19. 盘点几款还不错的企业网盘产品
  20. SQLPLUS ed无法调出编辑面板 SP2-0107:无须保存

热门文章

  1. Word文件交换的电脑打开字体、排版变化的原因和解决方法!
  2. 高电平输入好还是rca输入好_汽车音响改装常识
  3. html5多首背景音乐,给视频添加背景音乐|多个视频按顺序合并,添加背景音乐,或者更换背景音乐...
  4. 基于堆优化算法的函数寻优算法
  5. Ansible自动化运维的安装及常用模块详解
  6. Windows2003 sp2 R2 的序列号及15种版本
  7. Unix/Linux文件系统的目录结构
  8. 用代码控制网络断开与重连
  9. Android高手笔记-屏幕适配 UI优化
  10. 华为P50用鸿蒙系统吗,华为P50Pro+采用鸿蒙系统么-搭载鸿蒙OS么