刚刚从
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();
}
■
点到为止,希望这篇文章能带给初学者一点启发。
分享到:
相关推荐
标题:"microsoft speech sdk5.1 TTS初步" 在标题中提及的是Microsoft Speech SDK 5.1中的文本转语音(Text-To-Speech, TTS)功能的初步应用与探索。Microsoft Speech SDK是微软提供的一套用于开发语音识别和合成应用...
### 如何使用Microsoft Speech SDK开发包 #### 一、引言 Microsoft Speech SDK是一套功能强大的文本转语音(Text-to-Speech, TTS)工具包,它可以帮助开发者在应用程序中实现语音合成的功能。通过本教程,我们将详细...
### 使用openWrt SDK开发第一个HelloWorld应用程序 #### 一、引言 OpenWrt 是一个基于 Linux 的开源操作系统,广泛应用于嵌入式设备中,尤其是无线路由器等网络设备。对于开发者来说,能够利用 OpenWrt SDK ...
首先需要下载并安装Microsoft Speech SDK。安装完成后,可以在`C:\Program Files\Microsoft SDKs\Windows`目录下找到`TlbImp.exe`工具。接着,我们需要通过这个工具将`SAPI.dll`转换成.NET可用的DLL文件。 ##### ...
### 使用Microsoft Speech SDK实现语音识别和语音合成 #### Microsoft Speech SDK简介 Microsoft Speech SDK是由微软公司推出的一套全面的语音应用程序开发工具包。它旨在帮助开发者轻松地将语音识别(Speech ...
《OpenWrt中的Hello, World程序详解》 OpenWrt是一个基于Linux的嵌入式操作系统,广泛应用于无线路由器和其他物联网设备。它提供了高度定制化的环境,允许开发者深度定制设备的功能。在OpenWrt环境中编写和运行...
在编程世界中,"Hello, World!"程序是一个经典的起点,用于教授新手如何在特定的编程语言中编写并运行他们的第一个程序。这个简单的程序通常只包含一行代码,用于在控制台上打印出 "Hello, World!" 这个字符串。在这...
在这个"OpenWrt之helloworld程序"中,我们将探讨如何在OpenWrt环境中编写、编译和运行一个简单的 HelloWorld 程序,这将帮助初学者了解OpenWrt的开发流程。 首先,`helloworld` 文件通常是一个C或C++源代码文件,...
在编程世界中,"Hello, World!" 是每个初学者接触的第一个程序,它标志着编程旅程的开始。本主题将深入探讨如何使用C++语言编写这个经典的 "Hello, World!" 程序,以及C++的基本语法和环境配置。 C++ 是一种强类型...
如果仅安装了XP系统,默认只包含Microsoft Sam(英语)语音,需要额外安装Windows Speech SDK 5.1。 - **Windows Speech SDK 5.3** 支持Vista和Server 2008系统,并已集成在这些操作系统中。Vista和Server 2008默认...
根据给定的文件信息,我们可以总结出以下关于“汇编语言实现输出HelloWorld”的相关知识点: ### 汇编语言简介 汇编语言是一种低级编程语言,它为每种类型的计算机提供了一对一的机器指令映射。汇编语言程序通常由...
标题中的"Hello_World.zip_hello world _world"和描述中的"hello world prog for begginer"都指向了一个经典的编程入门示例——“Hello, World!”程序。这个简单的程序是许多编程语言教学的第一课,用于向初学者介绍...
### 深入淺出Hello World —— Hacking HelloWorld (Part I) #### 概述 在《深入淺出Hello World》这一系列文章中,作者Jim Huang(黃敬群/"jserv")通过深入剖析经典的“Hello World”程序,旨在帮助读者理解在...
### JNI入门之HelloWorld(一)详解 #### 一、引言 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言写的代码进行交互。JNI接口提供了若干公共服务,并为Java虚拟机和本机应用程序或...
在编程世界里,"Hello, World!" 是每个初学者的第一个程序,它标志着编程之旅的开始。这个"HelloWorld_"项目正是这样一个入门实例,用于在Visual Studio这个强大的集成开发环境中展示基本的代码编写和运行流程。 ...
在这个“linux环境下用makefile编译简单的helloworld程序”的主题中,我们将深入理解如何创建并使用`Makefile`来编译一个基本的C或C++程序,例如“helloworld”。 首先,`helloworld`程序是一个经典的入门示例,...
如何创建QT项目之QTcreator输出HelloWorld,小白保姆级别的教程,还有提供参考链接. HelloWorld程序是一个基于Qt框架的简单示例程序,用于展示如何使用Qt进行图形界面编程。这个程序的主要目的是在窗口中显示一个...
本教程将围绕“creo二次开发helloworld”这个主题,详细介绍如何在CREO 2.0环境中利用Visual Studio 2010进行基本的二次开发。 首先,我们需要理解CREO的二次开发主要基于Parametric Technology Corporation(PTC)...
**Java ME Hello World** Java ME(Micro Edition)是Java平台的一个子集,主要用于移动设备、嵌入式系统和其他计算资源有限的环境。这个"Hello World"程序是学习任何编程语言的基础,也是Java ME入门的经典例子。...
SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- Hello...