文本转语音 TTS(MS Speech SDK)问题??
如下一段代码(主要是 MyPlayText() 函数),我要的功能是将我的 一段字符串 转换成 语音流。
这段代码在 控制台程序运行时,一切OK 。但是 ,我把这个功能(即 MyPlayText() 函数)放到 Windows服务程序 里面 ,pVoice->Speak 处总是失败 ,GetLastError 返回的是 1008(试图引用不存在的令牌)。
小弟水平有限 ,不知该怎么弄了... 请大家帮帮忙 !!
PS:sdk是“SpeechSDK51.exe”,环境XP+VC6
代码:
这段代码在 控制台程序运行时,一切OK 。但是 ,我把这个功能(即 MyPlayText() 函数)放到 Windows服务程序 里面 ,pVoice->Speak 处总是失败 ,GetLastError 返回的是 1008(试图引用不存在的令牌)。
小弟水平有限 ,不知该怎么弄了... 请大家帮帮忙 !!
PS:sdk是“SpeechSDK51.exe”,环境XP+VC6
代码:
#include <windows.h>
#include <sapi.h>
#include <wininet.h>
#include <assert.h>
#include <cstdio>
#include <sphelper.h>
#include <WCHAR.h>
#pragma comment(lib, "wininet")
void MyPlayText();
int main(int argc, char* argv[])
{
MyPlayText();
return TRUE;
}
void MyPlayText()
{
ISpeechVoice* pVoice = NULL;
ISpeechBaseStream* stream=NULL;
ISpeechAudioFormat* pFormat=NULL;
ISpeechObjectTokens* ObjectTokens=NULL;
ISpeechObjectToken* pToken=NULL;
VARIANT vt;
VARIANT vt1;
long StreamNumber;
if (FAILED(::CoInitialize(NULL)))
{
OutputDebugString("==> ::CoInitialize(NULL) failed");
return;
}
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpeechVoice, (void**)&pVoice);
if (SUCCEEDED(hr))
{
HRESULT hr = CoCreateInstance(CLSID_SpMemoryStream, NULL, CLSCTX_ALL, IID_ISpeechBaseStream, (void**)&stream);
if (SUCCEEDED(hr))
{
try
{
OutputDebugString("-----> ----->");
stream->get_Format(&pFormat);
pFormat->put_Type(SAFT8kHz16BitMono);
pVoice->putref_AudioOutputStream(stream);
pVoice->put_AllowAudioOutputFormatChangesOnNextSet(FALSE);
pVoice->GetVoices(L"", L"", &ObjectTokens);
ObjectTokens->Item(0, &pToken);
pVoice->putref_Voice(pToken);
StreamNumber = 1000;
HRESULT hr = pVoice->Speak(L"TTTTTTaaaaaaaa", SVSFDefault, &StreamNumber);
if (SUCCEEDED(hr))
{OutputDebugString("pVoice->Speak OK");}
else
{OutputDebugString("pVoice->Speak not OK");}
memset(&vt, 0, sizeof(vt));
memset(&vt1, 0, sizeof(vt1));
hr = stream->Seek(vt, SSSPTRelativeToEnd, &vt1);
if (SUCCEEDED(hr))
{OutputDebugString("stream->Seek OK");}
else
{OutputDebugString("stream->Seek not OK");}
OutputDebugString("<----- <-----");
}
catch(...)
{
OutputDebugString("-----> some err");
}
}
pVoice-> Release();
pVoice = NULL;
}
::CoUninitialize();
}
...全文
相关推荐
Qt利用MS Speech SDK5.1实现文本朗读
这个SDK包含了各种API,可以用来实现语音识别、语音合成功能,以及语音到文本和文本到语音的转换。在我们的示例中,我们主要关注的是其文本到语音(TTS)的功能。
C# 分别使用Microsoft Speech 和 科大讯飞离线合成语音
引言 最近接到个项目,需要多声卡播放文字语音,涉及到指定声卡和语音合成的问题,于是各种查各种copy,中间走了一段弯路,写这篇文章帮助有需要的人。本人菜鸡,第一次写博客,不足之处请多多指教。 科大讯飞离线合成参考了这篇文章https://blog.csdn.net/wyq1153/article/details/72178422 首先感谢作者,其次发现其中有些错误,导致我的离线合成速度慢而且有时不...
speech sdk语音识别程序mfc程序
**Speech SDK**:Microsoft的Speech SDK是用于开发语音应用的工具集,它提供了语音识别(SR)和文本转语音(TTS)的功能。
用delphi开发基于ms的tts语音朗读程序
在本文中,我们将探讨如何使用Delphi开发一个基于Microsoft Speech API (SAPI) 的文本转语音(TTS)程序。这个程序允许将输入的文本转换成语音进行朗读。
通过MS的TTS语音库,再VS2005平台上,实现文本--语音识别,可实现中英文混读
下面我们将详细探讨如何利用MS的TTS语音库在VS2005平台上实现文本到语音识别,以及如何实现中英文混读。1.



