`
in355hz
  • 浏览: 227549 次
社区版块
存档分类
最新评论

Hello World by Microsoft Speech SDK 5.1

阅读更多

刚刚从 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();

}

 

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

 

分享到:
评论

相关推荐

    hello world hello world

    hello world

    Helloworld_helloworld_

    输出HELLOWORLD然后输出Helloworld最后的最后的输出Helloworld

    SpringMVC ---- HelloWorld ---- 代码

    SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- Hello...

    OSGi HelloWorld实例

    采用OSGi框架设计 一个简单的HelloWorld程序 在EclipseSDK中运行

    OpenWrt之helloworld程序

    OpenWrt之helloworld程序开发入门,里面包含helloworld和Makefile

    Hello World.rar_c++ hello world_world

    c++编写hello world 简单的c++程序

    HelloWorld_打印HelloWorld_

    打印HelloWorld ,在Visual Studio的开发环境当中,实现简单的操作。

    一个简单的qt版helloworld程序

    一个简单的qt版helloworld程序

    helloworld vbs 脚本

    helloworld vbs 脚本hellohelloworld vbs 脚本world vbs 脚本helloworld vbs 脚本helloworld vbs 脚本helloworld vbs 脚本

    Hello World C源码

    Hello World C源码 Hello World C源码 Hello World C源码 Hello World C源码 Hello World C源码

    编写 hello world web 程序

    • 在命令行打印 hello world! 字符 //mkdir nodejs-demo //cd nodejs-demo // https://sample.wangding.in/nodejs/tern-project //mv tern-project .tern-project //mkdir 01-introduction //touch 01-hello-world....

    abc 联系代码hello world hello world

    abc 联系代码hello world hello worldabc 联系代码hello world hello world

    深入浅出hello world

    深入浅出hello world。从一个简单的hello,world程序开始,经过预处理、编译、汇编、链接、加载各个步骤详细介绍程序从编辑到执行的过程。深入的讲解了linux下程序的编译过程,并且讲解了linux kernel系统调用的相关...

    Hello_World.zip_hello world _world

    hello world prog for begginer

    使用openWrt SDK开发第一个HelloWorld应用程序

    详细介绍了如何通过源码编译出openWrt SDK,如何编写和使用SDK编译应用程序,然后在平台上运行的步骤,附有代码和编译出的SDK文件,将SDK放在自己的虚拟机下就可以直接使用

    OCC之HelloWorld.rar

    open cascade hello world open cascade hello world open cascade hello world open cascade hello world open cascade hello world open cascade hello world open cascade hello world open cascade hello world

    Spring4 HelloWorld

    Spring4 HelloWorld初学Spring,java bean通过applicationContext.xml配置SpringIoC容器生成。

    最小的C语言Helloworld程序

    最小的C语言Hello, world程序

    C#入门

    C#第一个程序,helloworld using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace helloworld { class helloworld { [STAThread] static void Main(string[] args)...

    EJB HelloWorld

    HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); out.println(helloworld.SayHello("佛山人")); 5.用ant或eclipse,把客户端文件打成war包,发布到jboss上 6.输入...

Global site tag (gtag.js) - Google Analytics