这篇博客简单介绍调用微软的文字转语音(tts)COM组件的使用,Qt中的COM组件使用是通过QAxObject类来实现的,使用SpVoice接口实现文字到语音的转换。
在.pro文件中添加模块:
QT += core gui axcontainer
生成 SpVoice 接口官方参考文档以供参考:
// 先添加两个头文件:#include <QAxObject> 和 #include <QFile>
// "SAPI.SpVoice" 是 Windows 平台上的一个语音识别和合成引擎的 COM 组件
QAxObject axObject("SAPI.SpVoice");
// 生成 SpVoice 接口官方接口文档
QString doc = axObject.generateDocumentation();
// 保存文档
QFile file("SpVoice.html");
file.open(QIODevice::WriteOnly);
file.write(doc.toLocal8Bit());
file.close();
“SAPI.SpVoice” 是 Windows 平台上的一个语音识别和合成引擎的 COM 组件,我们在使用这个COM组件前可以在注册表中找到这个组件,如下:
接口文档中提供了槽函数的使用方法,例如:
下面开始正式编写文字转语音的 Qt 程序:
参考界面:
参考代码:
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QAxObject>
#include <QFile>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
// "SAPI.SpVoice" 是 Windows 平台上的一个语音识别和合成引擎的 COM 组件
QAxObject axObject("SAPI.SpVoice");
// 设置朗读的速度
axObject.dynamicCall("SetRate(int)", 1);
// 设置朗读的文本
axObject.dynamicCall("Speak(QString, SpeechVoiceSpeakFlags)", ui->plainTextEdit->toPlainText());
}