本站启用国内永久域名: www.LewenSky.cn,请大家使用新域名访问网站!
8月14

一个简单的 Microsoft Speech SDK 5_1 例子

| |
00:18MFC/VC++  From: 网络

刚刚从 Microsoft 网站下栽了 Speech SDK 5.1 和中日文发声补丁,参考 Speech SDK文档写了几个小程序,尽管我也是刚刚接触 Speech若干小时的初学者,还是拿出来共享吧:

 

Speech SDK 采用 COM 的形式封装,和大多数COM对象一样,下面是一个似曾相识的初始化:

 

CoInitialize(NULL);

 

CLSIDFromProgID(L"SAPI.SpVoice", &CLSID_SpVoice);

 

ISpVoice * pSpVoice = NULL;

 

if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL,

CLSCTX_INPROC_SERVER, IID_ISpVoice, (void **)&pSpVoice)))

{

cout << "Failed to create instance of ISpVoice!" << endl;

return -1;

}

 

现在我们用它来说 “Hello World”,非常简单:

 

pSpVoice->Speak(L"Hello World!", SPF_DEFAULT, NULL);

 

最后,清除这一切

 

pSpVoice->Release();

 

CoUninitialize();

 

很容易,是不是?下面我们稍微改变一下:

 

IEnumSpObjectTokens *pSpEnumTokens = NULL;

if (SUCCEEDED(SpEnumTokens(SPCAT_VOICES, L"language=409", NULL, &pSpEnumTokens)))

{

ISpObjectToken *pSpToken = NULL;

 

while (SUCCEEDED(pSpEnumTokens->Next(1, &pSpToken, NULL)) &&

pSpToken != NULL)

{

pSpVoice->SetVoice(pSpToken);

pSpVoice->Speak(L"Hello World!", SPF_DEFAULT, NULL);

 

pSpToken->Release();

}

 

pSpEnumTokens->Release();

}

 

如果只需要一种 Voice,SpFindBestToken 更加方便:

 

ISpObjectToken * pSpObjectToken = NULL;

 

if (SUCCEEDED(SpFindBestToken(SPCAT_VOICES, L"gender=female",

NULL, &pSpObjectToken)))

{

pSpVoice->SetVoice(pSpObjectToken);

 

pSpVoice->Speak(L"Hello World!", SPF_DEFAULT, NULL);

 

pSpObjectToken->Release();

}

 

现在改为使用中文:

ISpObjectToken * pSpObjectToken = NULL;

 

if (SUCCEEDED(SpFindBestToken(SPCAT_VOICES, L"language=804",

NULL, &pSpObjectToken)))

{

pSpVoice->SetVoice(pSpObjectToken);

 

pSpVoice->Speak(L"世界你好!", SPF_DEFAULT, NULL);

 

pSpObjectToken->Release();

}

 

ISpVoice::Speak 可以允许朗读的句子中包含 XML 标记,其实以上这一切用 XML 标记将变得十分简单:

 

pSpVoice->Speak(L"<lang langid=\"804\">世界你好!</lang>", SPF_DEFAULT, NULL);

 

pSpVoice->Speak(L"<voice required=\"gender=female\">Hello World!</voice>", SPF_DEFAULT, NULL);

 

最后,以一段简单的报时结束这篇文章:

 

SYSTEMTIME st;

GetLocalTime(&st);

 

ISpObjectToken * pSpObjectToken = NULL;

if (SUCCEEDED(SpFindBestToken(SPCAT_VOICES, L"language=804", NULL, &pSpObjectToken)))

{

pSpVoice->SetVoice(pSpObjectToken);

 

WCHAR wsz[128];

swprintf(wsz,

L"现在是<context ID = \"CHS_Date_ymdhm\">%.4d-%.02d-%.2d %.2d:%.02d</context>",

st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute);

 

pSpVoice->Speak(wsz, SPF_IS_XML, NULL);

 

pSpObjectToken->Release();

}

 

■ 到此为止,希望这篇文章能带给初学者一点启发。



出处:网络
转载时必须以链接形式注明出处及本声明!


最新日志 随机日志 综合排行
  • OFFICE 2010 VOL...
  • 格式工厂绿色版 V2.90
  • Password Invent...
  • VideoCacheView ...
  • 电脑店U盘启动盘制作工具 3....
  • 阿里旺旺AliIM2011_7...
  • 极点五笔十周年纪念版
  • PPTV网络电视3.1.1.0...
  • WinRAR注册方法
  • 紫光华宇拼音输入法 6.8.0...
  • 绿色软件更新 [高中好老师整理...
  • 迅雷7.1.0.1960 孤星...
  • 完美者解码v2010 Buil...
  • KMPlayer 3.0.0....
  • Windows XP SP3 ...
  • 爱读书小说阅读器 V2.799...
  • 从C++转到Java需注意的地...
  • 霏凡论坛查看系统端口进程路径工...
  • WinMPG Video Co...
  • QQMusic2010 正式版...
  • 安装软件时出现系统提示&quo...
  • XP与XP无线共享设置(笔记本...
  • ZineMaker目录模板大集...
  • 没有不可能 轻松实现PDG转P...
  • CString转char的方法...
  • [转]MSDN精简版、MSDN...
  • 将IE、FIREFOR (火狐...
  • VC多线程编程(转)
  • MyEclipse6.5下载地...
  • Diskeeper 2010 ...
  • Tags: , ,
    阅读(2709) | 评论(0) | 引用(0)
    发表评论
    表情
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    打开HTML
    打开UBB
    打开表情
    隐藏
    记住我
    昵称   密码   游客无需密码
    网址   电邮   [注册]