qt 操作tts (3)

妖艳的兔子 分享 2020-06-22 下载文档

releaseFunc = (ReleaseFunc)lib.resolve(\); speakFunc = (SpeakFunc)lib.resolve(\);

if (initializeFunc && releaseFunc && speakFunc) { initializeFunc(); ttsLoaded = true;

qDebug() << \;

// When tts is loaded, initialize the speak thread.

speakThread = new SpeakThread(this);

speak(\); // 加载完后说一下,准备好,因为第一次说都会很慢

} } else {

qDebug() << lib.errorString(); } }

void Speaker::removeTts() {

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

if (!ttsLoaded) { return; }

releaseFunc();

ttsLoaded = false; initializeFunc = 0; releaseFunc = 0; speakFunc = 0;

qDebug() << \;

// After tts is removed, speak thread is also need to be removed.

if (speakThread != 0) { speakThread->terminate(); }

delete speakThread; speakThread = 0; } /**

* After the process that loads tts is completed, the load thread is not needed, then remove it. */

void Speaker::completeLoadTts() {

delete ttsLoader; ttsLoader = 0; } /**

* After the process that removes tts is completed, the remove thread is not needed, then remove it. */

void Speaker::completeRemoveTts() {

delete ttsRemover; ttsRemover = 0; } /**

* Terminated all threads. */

void Speaker::terminateAllThreads() {

if (ttsLoader != 0) { ttsLoader->terminate(); }

if (ttsRemover != 0) { ttsRemover->terminate(); }

if (speakThread != 0) { speakThread->terminate(); } }

/////////////////////////////////////////////////////////////////////////////////// TtsLoader::TtsLoader(Speaker *speaker) { this->speaker = speaker; stopped = false; }

void TtsLoader::run() {

if (!stopped) { speaker->loadTts(); }

stopped = false; // }

void TtsLoader::stop() {

stopped = true;

}

/////////////////////////////////////////////////////////////////////////////////// TtsRemover::TtsRemover(Speaker *speaker) { this->speaker = speaker; stopped = false; }

void TtsRemover::run() {

if (!stopped) {

speaker->removeTts(); }

stopped = false; }

void TtsRemover::stop() {

stopped = true; }

/////////////////////////////////////////////////////////////////////////////////// SpeakThread::SpeakThread(Speaker *speaker) { this->speaker = speaker; stopped = false; }

void SpeakThread::run() {

if (!stopped) {

speaker->speakString(speakingString); }

stopped = false; }

void SpeakThread::stop() {

stopped = true; }

void SpeakThread::setSpeakingString(const QString &speakingString) {

this->speakingString = speakingString; } /*

很奇怪的问题: 如果直接使用loadTts()和removeTts()函数来初始化和释放TTS的资源, 就不会存在内存泄漏问题. 但是如果使用线程来处理, 即调用initializeTts(), releaseTts(), 在线程中调用loadTts(), removeTts()来初始化和释放TTS的资源, 就会存在内存泄漏. 泄漏的内存大小为初始化一次TTS的内存, 没发现会叠加.

文本发音的使用过程: 由于使用的是单态模式, 所以在使用发音函数speak前, 初始化TTS一次就可以了, 而TTS的资源释放是自动释放的, 当然也可以手动释放.

1. Speaker::getInstance().initializeTts(); // 最好程序启动的时候调用. 2. Speaker::getInstance().speak(str);

.................可以在程序的任何地方直接调用.(如果TTS没有被加载, 或者不启用语音功能, 这时调用了不起任何作用)

[不需要自己手动释放TTS的资源, 因为使用了智能指针实现单态模式] */


qt 操作tts (3).doc 将本文的Word文档下载到电脑

下一篇:高等数学符号称呼方法

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx