第一范文网 - 专业文章范例文档资料分享平台

qt 操作tts (2)

来源:用户分享 时间:2020-06-22 本文由妖艳的兔子 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

TtsRemover(Speaker *speaker); void stop();

protected:

virtual void run(); private:

Speaker *speaker; volatile bool stopped; };

/////////////////////////////////////////////////////////////////////////////////// // TTS发音线程,

class SpeakThread : public QThread {

public:

SpeakThread(Speaker *speaker); void stop();

void setSpeakingString(const QString &speakingString);

protected:

virtual void run(); private:

Speaker *speaker; volatile bool stopped; QString speakingString; };

#endif // SPEAKER_H

////////////////////////////////////////////////////////////////////////////////////////////////////// // Speaker.cpp: Qt

//////////////////////////////////////////////////////////////////////////////////////////////////////

#include \

#include

#include

std::auto_ptr Speaker::instance;

Speaker::Speaker() { ttsLoaded = false; speakEnabled = true;

// Threads

ttsLoader = 0; ttsRemover = 0; speakThread = 0;

// TTS functions

initializeFunc = 0; releaseFunc = 0; speakFunc = 0; }

Speaker::~Speaker() { terminateAllThreads();

delete ttsLoader; delete ttsRemover; delete speakThread;

//这里释放不用线程,而是直接释放 if (ttsLoaded) { removeTts(); } }

Speaker& Speaker::getInstance() { if (instance.get() == 0) {

instance.reset(new Speaker()); }

return *(instance.get()); }

void Speaker::setSpeakEnabled(bool enabled) {

speakEnabled = enabled; }

bool Speaker::isSpeakEnabled() const {

return speakEnabled; }

bool Speaker::isTtsLoaded() const {

return ttsLoaded; }

void Speaker::speak(const QString &str) {

if (ttsLoaded && speakEnabled && (0 != speakThread)) { if (speakThread->isRunning()) {

qDebug() << \; speakThread->stop(); }

qDebug() << \ << str;

speakString(\); // 不加这一句, 不知道为什么不行 speakThread->setSpeakingString(str); speakThread->start(); } }

void Speaker::speakString(const QString &str) {

if (speakFunc != 0) {

speakFunc(str.toUtf8().data()); } }

void Speaker::initializeTts() {

// If tts is loaded, don't need to load again.

if (ttsLoaded) { return; }

// 启动加载线程

// If ttsLoader is not euqal 0, that means ttsLoader is running. // Because after ttsLoader is finished, it will be removed.

if (ttsLoader == 0) {

ttsLoader = new TtsLoader(this);

connect(ttsLoader, SIGNAL(finished()), this, SLOT(completeLoadTts()));

ttsLoader->start(); } }

void Speaker::releaseTts() {

// If tts is not loaded, removing process is not needed.

if (!ttsLoaded) { return; }

if (0 == ttsRemover) {

ttsRemover = new TtsRemover(this);

connect(ttsRemover, SIGNAL(finished()), this, SLOT(completeRemoveTts()));

ttsRemover->start(); } }

void Speaker::loadTts() {

// 如果TTS引擎已经加载了, 就不需要再次加载 if (ttsLoaded) { return; }

QLibrary lib(\); if (lib.load()) {

initializeFunc = (InitializeFunc)lib.resolve(\);

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新幼儿教育qt 操作tts (2)全文阅读和word下载服务。

qt 操作tts (2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1097106.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top