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

qt 操作tts

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

所使用的DLL: http://www.cppblog.com/Files/biao/TTSSpeaker.dll.zip ///////////////////////////////////////////////////////////////////////////////////////////////////// // TTSSpeaker.cpp: Qt

///////////////////////////////////////////////////////////////////////////////////////////////////// // 调用sapi.dll, 使用里面的三个函数来初始化, 释放资源, 发音函数

// 在VS中使用TTSSpeaker.cpp生成DLL文件. 因为如果在QtCreator中使用的话, 有可能自带的mingw的不完全, 而找不到

// 某些结构的定义而出错题.

#include \

#include

#ifdef _MANAGED #pragma managed(push, off) #endif

BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) {

return TRUE;

}

ISpVoice *pVoice; HRESULT hr;

extern \ __declspec(dllexport) bool initialize() {

pVoice = NULL;

if (FAILED(::CoInitialize(NULL))) {

return false; }

hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void**)&pVoice);

return true; }

extern \ __declspec(dllexport) void release() { if (SUCCEEDED(hr)) {

pVoice->Release(); pVoice = NULL; }

::CoUninitialize(); }

extern \ __declspec(dllexport) void speak(char *szU8) { if (SUCCEEDED(hr)) {

int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, 0); wchar_t* wszString = new wchar_t[wcsLen + 1];

::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen); wszString[wcsLen] = '\\0';

hr = pVoice->Speak(wszString, 0, NULL); } }

#ifdef _MANAGED #pragma managed(pop) #endif

////////////////////////////////////////////////////////////////////////////////////////////////////// // Speaker.h: Qt

////////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef SPEAKER_H #define SPEAKER_H

#include #include #include

class Speaker; class TtsLoader; class TtsRemover; class SpeakThread;

// 对应sapi.dll里的三个TTS函数, 从DLL中得到的

typedef bool (*InitializeFunc)(); typedef void (*ReleaseFunc)();

typedef void (*SpeakFunc)(char *szU8);

/**

* 管理TTS的类, 对TTS进行加载, 释放TTS占用的资源, 调用TTS进行文本发音. */

class Speaker : public QObject {

Q_OBJECT public:

static Speaker& getInstance(); void setSpeakEnabled(bool enabled);

bool isSpeakEnabled() const; bool isTtsLoaded() const;

void speak(const QString &str); // 启动发音线程 void initializeTts(); // 启动TTS加载线程 void releaseTts(); // 启动释放TTS资源的线程

void terminateAllThreads();

protected:

void loadTts(); // 真正加载TTS的函数

void removeTts(); // 真正释放TTS占用资源的函数 void speakString(const QString &str); // 真正发音的函数

private slots:

void completeLoadTts(); // TTS加载线程结束的处理糟函数 void completeRemoveTts(); // 释放TTS资源线程结束的处理糟函数 private: Speaker(); ~Speaker();

Speaker(const Speaker &other);

Speaker& operator=(const Speaker &other);

// TTS 初始化, 释放资源, 发音函数

InitializeFunc initializeFunc; ReleaseFunc releaseFunc; SpeakFunc speakFunc;

bool ttsLoaded; // TTS 加载成功 bool speakEnabled; // 启用语音功能

friend class TtsLoader;

TtsLoader *ttsLoader; // TTS 加载线程 friend class TtsRemover; TtsRemover *ttsRemover; friend class SpeakThread;

SpeakThread *speakThread; // 发音线程

friend class std::auto_ptr; static std::auto_ptr instance; };

/////////////////////////////////////////////////////////////////////////////////// // 加载TTS的线程

// 如果不使用线程来加载, 在加载的时候就会感觉到卡

class TtsLoader : public QThread {

public:

TtsLoader(Speaker *speaker); virtual void run(); void stop();

private:

Speaker *speaker; volatile bool stopped; };

/////////////////////////////////////////////////////////////////////////////////// // 释放TTS资源的线程

class TtsRemover : public QThread {

public:

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

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