大家好,欢迎来到IT知识分享网。
Microsoft Text-to-Speech(TTS)
语音引擎是一种能够将文字转换成自然语音输出的技术,可以在很多领域得到应用,如阅读软件、辅助阅读、语音导航、语音合成等领域。TTS语音引擎在使用过程中,可以根据语音合成对象的需求,实现多种语言、口音、声音质量、情感、语速等方面的自定义配置和功能。
Python开发TTS
下载 win32com
组件
pip install pywin32
C:\Users\mageriletu>pip install pywin32 Collecting pywin32 Downloading pywin32-306-cp311-cp311-win_amd64.whl (9.2 MB) ---------------------------------------- 9.2/9.2 MB 26.7 kB/s eta 0:00:00 Installing collected packages: pywin32 Successfully installed pywin32-306
语音合成
# Python 代码示例 import win32com.client def speak(text): speaker = win32com.client.Dispatch("SAPI.SpVoice") speaker.Speak(text) speak("欢迎使用Microsoft TTS语音引擎")
C++开发TTS
微软win7
及以上版本自带的语音合成引擎,可以直接拿来用,不需要额外的dll
文件,只需要引用头文件即可, 封装一个简单的类用来做语音合成如下:
tts.h
文件:
#pragma once #include <Windows.h> #include "sapi.h" #include <list> #include <string> #include "sphelper.h" #pragma comment(lib, "sapi.lib") class TTS { public: TTS(); ~TTS(); bool Speak(std::wstring); bool IsUseful(); private: ISpVoice* m_pSpVoice; bool InitVoice(); void StopVoice(); };
tts.cxx
文件:
#include "tts.h" TTS::TTS() { m_pSpVoice = nullptr; } TTS::~TTS() { StopVoice(); ::CoUninitialize(); } //初始化设备 bool TTS::InitVoice() { HRESULT ret = ::CoInitialize(NULL); ret = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void)&m_pSpVoice); if (0 == ret && m_pSpVoice) { m_pSpVoice->SetVolume(80); IEnumSpObjectTokens *pSpEnumTokens = NULL; if (SUCCEEDED(SpEnumTokens(SPCAT_VOICES, NULL, NULL, &pSpEnumTokens))) //找到lili语音进行朗读, 否则就跳出 { ISpObjectToken *pSpToken = NULL; while (SUCCEEDED(pSpEnumTokens->Next(1, &pSpToken, NULL)) && pSpToken != NULL) { LPWSTR pId = new WCHAR[32]; pSpToken->GetId(&pId); int nLen = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)pId, -1, NULL, 0, NULL, NULL); char *s = new char[nLen + 1]; WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)pId, -1, s, nLen, NULL, NULL); if (0 == strcmp(s, ("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\MS-Lili-2052-20-DSK"))) { m_pSpVoice->SetVoice(pSpToken); // 设置lili语音 pSpToken->Release(); delete[] s; break; } delete[] s; pSpToken->Release(); } pSpEnumTokens->Release(); } return true; } else { } return false; } //文字转语音并播放 bool TTS::Speak(std::wstring word) { StopVoice(); if (InitVoice()) { HRESULT ret = m_pSpVoice->Speak(word.c_str(), SPF_ASYNC, NULL); return ret; } else { return false; } } bool TTS::IsUseful() { bool bRet = InitVoice(); StopVoice(); return bRet; } //停止播放 void TTS::StopVoice() { if (m_pSpVoice!=nullptr) { m_pSpVoice->Release(); } }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/158938.html