QT TTS朗读
做QT项目时,可能会遇上朗读中文或英文,这就是TTS朗读。
我用QtCreator做了一个TTS朗读的小例子。
首先,在pro文件里面需要加上
QT += axcontainer
头文件用:
#include
.h文件的主要代码:
#ifndef WIDGET_H#define WIDGET_H#include#include//需要的头文件namespace Ui {class Widget;}class Widget : public QWidget{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_enButton_clicked();void on_zhButton_clicked();private:void startSpeak(const QString& text);private:Ui::Widget *ui;mutable QAxObject m_voice;static const QString EnglishVoiceKey;static const QString ChineseVoiceKey;static const QString clsidSpObjectToken;static const QString clsidSpVoice;};#endif // WIDGET_H
.cpp里面的主要代码:
#include "widget.h"#include "ui_widget.h"#include#includeconst QString Widget::EnglishVoiceKey = QLatin1String("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\VW Julie");const QString Widget::ChineseVoiceKey = QLatin1String("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\ScanSoftMei-Ling_Full_22kHz");//TTS引擎ID,上面是英文的,下面是中文的。这个可以根据自己电脑上的找。 通过在运行里输入regedit查找到。const QString Widget::clsidSpObjectToken = QLatin1String("{EF411752-3736-4CB4-9C8C-8EF4CCB58EFE}");const QString Widget::clsidSpVoice = QLatin1String("{96749377-3391-11D2-9EE3-00C04F797396}");//在运行里面输入regedit 查找注册表,在 HKEY_LOCAL_MACHINE\\SOFTWARE\\CLasscs\\CLSID 下可以找到,它是一个类标识符,window下的每个应用,如网上邻居,//回收站,都有自己的类识别符。 上面是TTS语音的类识别符。Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);}Widget::~Widget(){delete ui;}void Widget::on_enButton_clicked(){// 这个函数用来测试朗读英文QAxObject obj(clsidSpObjectToken);if (obj.isNull()) {qWarning() << "Failed to create SpObjectToken";return;}obj.dynamicCall("SetId(const QString&)", EnglishVoiceKey);m_voice.setProperty("Voice", obj.asVariant());startSpeak(QLatin1String("this is a test!"));}void Widget::on_zhButton_clicked(){// 这个函数用来测试朗读中文QAxObject obj(clsidSpObjectToken);if (obj.isNull()) {qWarning() << "Failed to create SpObjectToken";return;}obj.dynamicCall("SetId(const QString&)", ChineseVoiceKey);m_voice.setProperty("Voice", obj.asVariant());startSpeak(tr("这是一个测试例子!"));}void Widget::startSpeak(const QString& text){m_voice.setControl(clsidSpVoice);m_voice.dynamicCall("Speak(QString, SpeechVoiceSpeakFlags)", text, 0x0013);}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
