微软Speech SDK 5.1开发语音识别系统主要步骤
- 格式:docx
- 大小:16.65 KB
- 文档页数:3
Windows TTS开发介绍开篇介绍:我们都使用过一些某某词霸的英语学习工具软件,它们大多都有朗读的功能,其实这就是利用的Windows的TTS(Text To Speech)语音引擎。
它包含在Windows Speech SDK开发包中。
我们也可以使用此开发包根据自己的需要开发程序。
鸡啄米下面对TTS功能的软件开发过程进行详细介绍。
一.SAPI SDK的介绍SAPI,全称是The Microsoft Speech API。
就是微软的语音API。
由Windows Speech SDK提供。
Windows Speech SDK包含语音识别SR引擎和语音合成SS引擎两种语音引擎。
语音识别引擎用于识别语音命令,调用接口完成某个功能,实现语音控制。
语音合成引擎用于将文字转换成语音输出。
SAPI包括以下几类接口:Voice Commands API、Voice Dictation API、Voice Text API、Voice Telephone API和Audio Objects API。
我们要实现语音合成需要的是Voice Text API。
目前最常用的Windows Speech SDK版本有三种:5.1、5.3和5.4。
Windows Speech SDK 5.1版本支持xp系统和server 2003系统,需要下载安装。
XP系统默认只带了个Microsoft Sam英文男声语音库,想要中文引擎就需要安装Windows Speech SDK 5.1。
Windows Speech SDK 5.3版本支持Vista系统和Server 2008系统,已经集成到系统里。
Vista和Server 2003默认带Microsoft lili中文女声语音库和Microsoft Anna英文女声语音库。
Windows Speech SDK 5.4版本支持Windows7系统,也已经集成到系统里,不需要下载安装。
关于SAPI的简介API 概述SAPI API在一个应用程序和语音引擎之间提供一个高级别的接口。
SAPI 实现了所有必需的对各种语音引擎的实时的控制和管理等低级别的细节。
SAPI引擎的两个基本类型是文本语音转换系统(TTS)和语音识别系统。
TTS系统使用合成语音合成文本字符串和文件到声音音频流。
语音识别技术转换人类的声音语音流到可读的文本字符串或者文件。
文本语音转换API应用程序能通过IspVoice的对象组建模型(COM)接口控制文本语音转换。
一旦一个应用程序有一个已建立的IspVoice对象(见Text-to-Speech指南),这个应用程序就只需要调用ISpVoice::Speak 就可以从文本数据得到发音。
另外,ISpVoice接口也提供一些方法来改变声音和合成属性,如语速ISpVoice::SetRate,输出音量ISpVoice::SetVolume,改变当前讲话的声音ISpVoice::SetVoice 等。
特定的SAPI控制器也可以嵌入输入文本使用来实时的改变语音合成器的属性,如声音,音调,强调字,语速和音量。
这些合成标记在sapi.xsd中,使用标准的XML格式,这是一个简单但很强大定制TTS语音的方法,不依赖于特定的引擎和当前使用的声音。
ISpVoice::Speak方法能够用于同步的(当完全的完成朗读后才返回)或异步的(立即返回,朗读在后台处理)操作。
当同步朗读(SPF_ASYNC)时,实时的状态信息如朗读状态和当前文本位置可以通过ISpVoice::GetStatus得到。
当异步朗读时,可以打断当前的朗读输出以朗读一个新文本或者把新文本自动附加在当前朗读输出的文本的末尾。
除了ISpVoice接口之外SAPI也为高级TTS应用程序提供许多有用的COM接口。
事件SAPI用标准的回调机制(Window消息, 回调函数or Win32 事件)来发送事件来和应用程序通信。
对于TTS,事件大多用于同步地输出语音。
计算机语音识别模块的使用说明书
使用说明:
一.运行本程序需要安装Microsoft Speech SDK语音开发工具。
其安装方法如下:
Microsoft Speech SDK可以在微软的官方网站免费获得,需要下载两个自解压文件,一个是开发包的安装文件(speechsdk51.exe),一个是中文的语言包(speechskd51LangPack.exe)。
文件如图1.1所示。
图1.1 安装文件
运行speechsdk51.exe会弹出自解压对话框,如图1.2所示。
图1.2 解压对话框
单击“Unzip”按钮可以将文件解压到“D:\SDK”路径下,运行“D:\SDK”下的setup.exe
来进行安装,运行setup.exe会弹出Microsoft Speech SDK5.1的安装向导,如图1.3所示
图1.3 安装向导
在向导中,通过单击“Next”按钮一步一步根据提示进行安装。
安装完成后计算机就具有了语音识别能力,输入法中会增加语音输入法。
但此时只能识别英语,要想使计算机能够识别汉语,还需要安装语言包,运行speechskd51LangPack.exe将文件解压,同开发包一样使用setup.exe进行安装。
二.如果不能正常朗读,先运行调节朗读模块,进行默认的初始化
带口型的朗读,朗读英文选Microsoft Mike。
基于微软语音引擎的语音识别设计作者:刘欢来源:《电脑知识与技术》2017年第20期摘要:本设计是利用微软语音软件开发包Speech SDK,在vc++6.0的MFC平台下实现计算机语音识别的过程。
通过对微软语音开发理论的学习与探索,了解MFC平台的开发与应用,掌握Microsoft Speech SDK(SAPI)在VC++6.0下的加载运行,设计出的在Windows系统下的人机交互语音识别系统。
系统总体设计包含上位机设计和下位机设计,以上位机软件设计为主体设计部分,下位机部分作为功能扩展部分,其中下位机设计使用STC89C51单片机作为主控芯片。
整个系统设计旨在为人们日常生活提供更多的便利。
关键词:语音识别:Speech SDK;MFC语音识别技术的产生与不断发展的过程已经有六十多年的历史,在计算机与现代通信技术的不断进步,语音识别技术的进步及其扩大的应用领域也得以体现。
目前,一些基于语音识别技术的产品如语音拨号电话,智能语音搜索引擎等在国内外都相继得到了开发与使用。
最早利用计算机技术实现语音识别技术的有IBM、APPLE、GOOGLE等公司,在目前的Win-dows、Android等智能移动设备中都相继得到了开发。
语音识别技术是语音领域的重要组成部分,同时在计算机科学领域中发挥着不可或缺的作用。
在应用领域中语音识别是人机交互方式的一个重要应用,伴随着语音技术、通信技术、智能物联网技术的发展,语音识别技术将在远程智能控制、教育培训、电子商务管理等各个新型领域中发挥着更大的作用。
本设计利用微软语音开发包Microsoft Speech SDK 5.1开发设计出具有语音识别功能的软件。
该软件的使用是在Windows操作系统下运行的,识别相关语音命令来加载运行所指定的功能。
1系统上位机设计1.1语音识别的过程语音识别的编程离不开由上所述的几种语音识别引擎接口即以下四个语音引擎RecoGrammar_ISP,Recognizer_ISP,ISpPhrase以及CRInstanceCreat_ISP它们都遵循COM组件的工作原理和Windows应用程序的工作原理即消息驱动机制,在实现过程中首先需要构造出操作语音识别的类即CSpeechRecog-nition,接下来即可通过CSpeechRecognition类来实现一个语音识别程序。
用Microsoft Speech SDK5.1实现中文语音交互的方法易定
【期刊名称】《电脑开发与应用》
【年(卷),期】2005(018)004
【摘要】为了改变人们按键操纵的传统概念和习惯,实现真正意义上的人机对话,结合实例阐述了用Microsoft Speech SDK5.1实现中文语音交互的方法,可应用于各种中文语音交互公共信息服务系统.
【总页数】2页(P62-63)
【作者】易定
【作者单位】深圳职业技术学院
【正文语种】中文
【中图分类】TN912.3
【相关文献】
1.利用Microsoft Excel与1stOpt实现矿浆品位仪标定的方法 [J], 丛浩杰;刘家勇;蒋宝庆
2.基于Microsoft Speech SDK5.1的重要天气报语音识别 [J], 林凯;王佃军;霍慧峰
3.基于Microsoft Speech SDK5.1实现中英文朗读 [J], 李松;沈文轩
4.求解滚齿机挂轮的一种实用方法及Microsoft VisualC++6.0实现 [J], 孙杰;王金凯
5.基于ArcGIS与Speech SDK的中文语音交互式GIS实现方法 [J], 吴建华;余梦娟;刘强;舒志刚
因版权原因,仅展示原文概要,查看原文内容请购买。
SPEECHSDK51LANGPACK.EXESPEECHSDK51LANGPACK.EXE:语音识别软件开发包的语言包资源简介:SPEECHSDK51LANGPACK.EXE是一个针对语音识别软件开发包(SDK)的语言包资源文件。
它为开发人员提供了在使用语音识别技术进行应用程序开发时所需的多种语言资源支持。
语音识别技术在现代计算机科学领域中扮演着重要的角色。
它允许计算机系统通过解析语音输入来理解和执行用户的指令。
随着语音助手和自动语音识别系统的普及,对语音识别软件开发的需求不断增长。
因此,SPEECHSDK51LANGPACK.EXE的出现可以大大提高语音识别软件开发的多语言支持能力,使开发人员能够创建支持不同语言的语音识别应用程序。
主要功能:1. 多语言支持:SPEECHSDK51LANGPACK.EXE提供了各种语言资源,包括但不限于英语、法语、德语、西班牙语、意大利语、中文等。
这使得开发人员可以根据目标用户的语言偏好进行应用程序开发。
无论用户使用的是什么语言,都可以通过该语言包资源进行语音识别。
2. 语音翻译:该语言包资源还包含了诸如翻译功能等附加语言处理能力。
开发人员可以利用这些功能来将语音输入转换为其他语言,实现语音翻译功能。
这对于需要跨语言沟通的应用程序非常有用,例如国际旅行或在线会议。
3. 自定义语音模型:开发人员可以利用SPEECHSDK51LANGPACK.EXE中的语言包资源来创建自定义的语音识别模型。
这允许他们针对特定的行业或领域进行精确的语音识别。
通过自定义语音模型,开发人员可以提高语音识别的准确性和效果,为用户提供更好的体验。
4. 语音合成:除了语音识别功能,SPEECHSDK51LANGPACK.EXE 还提供了语音合成的能力。
这允许开发人员将文本转换为具有自然流畅语音的音频输出。
这种功能可以广泛应用于语音助手、机器人交互、导航系统等领域,为用户提供更直观、个性化的体验。
语音识别流程
语音识别技术是一种将语音信号转换为文本或命令的技术,它在现代社会中得到了广泛的应用。
语音识别技术的发展,为人们的生活和工作带来了极大的便利。
下面我们将介绍一下语音识别的流程。
首先,语音信号的采集是语音识别的第一步。
在这一步骤中,我们需要使用麦克风等设备来采集用户的语音信号。
采集到的语音信号将被传输到语音识别系统中进行处理。
接下来是语音信号的预处理。
在预处理过程中,语音信号会经过去噪、语音端点检测、音频增强等处理,以提高后续处理的准确性和鲁棒性。
然后是特征提取。
在这一步骤中,语音信号将被转换成特征参数,比如梅尔频率倒谱系数(MFCC)、线性预测编码(LPC)等。
这些特征参数将被用于后续的模式匹配和识别。
接着是模式匹配和识别。
在这一步骤中,语音识别系统将利用训练好的模型和特征参数进行匹配和识别。
常见的模型包括隐马尔
可夫模型(HMM)、深度神经网络(DNN)等。
通过模式匹配和识别,语音信号将被转换成文本或命令。
最后是后处理和结果生成。
在这一步骤中,系统会对识别结果
进行校正和修正,以提高识别的准确性。
最终的识别结果将被生成
并输出给用户使用。
总的来说,语音识别的流程包括语音信号的采集、预处理、特
征提取、模式匹配和识别、以及后处理和结果生成。
通过这些步骤,语音信号将被准确地转换成文本或命令,为用户提供便利和高效的
语音交互体验。
随着技术的不断发展,语音识别技术将会在更多的
领域得到应用,为人们的生活带来更多的便利和乐趣。
Speech API使用方法微软语音识别分两种模式:文本识别模式和命令识别模式.此两种模式的主要区别,主要在于识别过程中使用的匹配字典不同.前者使用的是通用字典,特点是内容多,覆盖的词汇量大,字典由sdk提供.适用于没有预定目标的随机听写之类的应用.同时因为词汇量大直接导致识别的精度降低,识别速度较慢.后者的字典需要开发者自己编写,就是你们所说的xml文件.xml文件作为一种数据存储的方式,有一定的格式,定义了sdk需要确定的一些标签,和用以匹配的词汇.这种方式由开发者定义词汇的数量,大大降低匹配过程中需要检索的词汇量,提高了识别速度.同时因为侯选项极少,所以一般不会识别错误.其缺点也是明显的:词汇量小,只有预先输入字典的词汇可以被识别出来,所以一般用来作为常用命令的识别,方便用户操作,代替菜单命令等.利用微软Speech SDK 5.1在MFC中进行语音识别开发时的主要步骤,以Speech API 5.1+VC6为例:1、初始化COM端口一般在CWinApp的子类中,调用CoInitializeEx函数进行COM初始化,代码如下:::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); // 初始化COM注意:调用这个函数时,要在工程设置(project settings)->C/C++标签,Category中选Preprocessor,在Preprocessor definitions:下的文本框中加上“,_WIN32_DCOM”。
否则编译不能通过。
2、创建识别引擎微软Speech SDK 5.1 支持两种模式的:共享(Share)和独享(InProc)。
一般情况下可以使用共享型,大的服务型程序使用InProc。
如下:hr = m_cpRecognizer.CoCreateInstance(CLSID_SpSharedRecognizer);//Sharehr = m_cpRecognizer.CoCreateInstance(CLSID_SpInprocRecognizer);// InProc如果是Share型,可直接进到步骤3;如果是InProc型,必须使用ISpRecognizer::SetInput 设置语音输入。
基于Microsoft speech sdk5.1的英语语音合成教学软件的设计与实现Microsoft Speech SDK5.1是目前最新的微软语音合成识别开发工具包。
在大多数情况下此工具包用于语音识别系统的开发,基于西北地区英语教学中听力和口语能力低于其他省市的教育现状,特利用此工具包的语音合成功能开发了英语语音合成教学软件,希望在英语教学中发挥一定的作用。
1 关于Microsoft Speech SDK5.1Microsoft Speech SDK是Microsoft公司开发的一套语音软件开发工具包,SDK5.1是最新版本,SDK5.1提供了语音识别和合成的类库以及API接口,可以用Visual C+ +、C#、Delphi、Visual Basic等进行开发。
本文主要讨论使用Delphi进行的开发工作。
2 英语语音合成教学软件的功能、设计原理和实现方法2.1 实现功能描述中英文文章朗读,中英文文章录音(使用于课件),词典,初高中各年级单词库,单词阅读连读,当前单元单词测试,单词库自制,语速调整等功能。
2.2 开发中使用的sdk控件及设计原理在使用Delphi进行Microsoft Speech SDK5.1语音编程时需要安装Micosoft Speech ObjectLibrary[Version5.1]ActiveX控件,Delphi中导入方法是Project ->Import Type Library对话框Micosoft Speech Object Library[Version5.1],控件生成在ActiveX控件页面,用于语音合成的控件为TspVoice。
使用TspVoice控件的Speak()函数来实现语音合成功能,由于TspVoice可以发出标准的英文朗读,因此可以实现英语听力、口语教学软件设计。
2.3 英语语音合成教学软件系统结构2.4 主要实现方法2.4.1 语音合成及中英文切换语音合成使用TspVoice控件的Speak函数实现,中英文切换使用下列语句:SpVoice1.Speak(''+内容+'',1);//用于阅读英文,发音为VW Kate女声。
基于Microsoft Speech SDK实现用户孤立词识别的过程如下:1、初始化COM端口:在CWinApp的子类中,调用CoInitializeEx函数进行COM 初始化:::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);2、创建识别引擎:微软Speech SDK 5.1 支持两种模式的:共享(Share)和独享(InProc)。
一般情况下可以使用共享型,大的服务型程序使用InProc。
如下:hr = m_cpRecognizer.CoCreateInstance(CLSID_SpSharedRecognizer);//Share hr = m_cpRecognizer.CoCreateInstance(CLSID_SpInprocRecognizer);//InProc 如果是Share型,直接到步骤3;如果是InProc型,必须使用ISpRecognizer::SetInput 设置输入:CComPtr<ISpObjectToken> cpAudioToken;hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN,&cpAudioToken);if (SUCCEEDED(hr)) { hr = m_cpRecognizer->SetInput(cpAudioToken, TRUE);}或者:CComPtr<ISpAudio> cpAudio;hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &cpAudio);hr = m_cpRecoEngine->SetInput(cpAudio, TRUE);3、创建识别上下文接口:调用ISpRecognizer::CreateRecoContext 创建识别上下文接口:hr = m_cpRecoEngine->CreateRecoContext( &m_cpRecoCtxt );4、设置识别消息:调用SetNotifyWindowMessage 告诉Windows哪个是我们的识别消息,需要进行处理:hr = m_cpRecoCtxt->SetNotifyWindowMessage(m_hWnd, WM_RECOEVENT, 0, 0);5、设置事件:最重要的事件是“SPEI_RECOGNITION”:const ULONGLONG ullInterest = SPFEI(SPEI_SOUND_START) |SPFEI(SPEI_SOUND_END) | SPFEI(SPEI_RECOGNITION) ;hr = m_cpRecoCtxt->SetInterest(ullInterest, ullInterest);6、创建语法规则:语法规则分为两种,一种是听说式(dictation),一种是命令式(command and control---C&C)。
文本语音(Text-to-Speech,以下简称TTS),他的作用就是把通过TTS引擎把文本转化为语音输出。
本文不是讲述怎样建立自己的TTS引擎,而是简单介绍怎样运用Microsoft Speech SDK 建立自己的文本语音转换应用程式。
Microsoft Speech SDK简介Microsoft Speech SDK是微软提供的软件研发包,提供的Speech API (SAPI)主要包含两大方面:1.API for Text-to-Speech2.API for Speech Recognition其中API for Text-to-Speech,就是微软TTS引擎的接口,通过他我们能够很容易地建立功能强大的文本语音程式,金山词霸的单词朗读功能就用到了这写API,而现在几乎任何的文本朗读工具都是用这个SDK研发的。
至于API for Speech Recognition就是和TTS相对应的语音识别,语音技术是一种令人振奋的技术,但由于现在语音识别技术准确度和识别速度不太理想,还未达到广泛应用的需要。
Microsoft Speech SDK能够在微软的网站免费下载,现在的版本是 5.1,为了支持中文,还要把附加的语言包(LangPack)一起下载。
为了在VC中使用这SDK,必需在工程中添加SDK的include和lib目录,为免每个工程都添加目录,最好的办法是在VC的Option->Directoris立加上SDK的include和lib目录。
一个最简单的例子先看一个入门的例子:#include <sapi.h>#pragma comment(lib,"ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll#pragma comment(lib,"sapi.lib") //sapi.lib在SDK的lib目录,必需正确配置int main(int argc, char* argv[]){ISpVoice * pVoice = NULL;//COM初始化:if (FAILED(::CoInitialize(NULL)))return FALSE;//获取ISpVoice接口:HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);if( SUCCEEDED( hr ) ){hr = pVoice->Speak(L"Hello world", 0, NULL);pVoice->Release();pVoice = NULL;}//千万不要忘记:::CoUninitialize();return TRUE;}短短20几行代码就实现了文本语音转换,够神奇吧。
SpeechSDK使用说明微软Windows Speech SDK编程入门2009-02-24 13:33一、SAPI简介软件中的语音技术包括两方面的内容,一个是语音识别(speech recognition) 和语音合成(speech synthesis)。
这两个技术都需要语音引擎的支持。
微软推出的应用编程接口API,虽然现在不是业界标准,但是应用比较广泛。
SAPI全称 The Microsoft Speech API.相关的SR和SS引擎位于Speech SDK开发包中。
这个语音引擎支持多种语言的识别和朗读,包括英文、中文、日文等。
SAPI包括以下组件对象(接口):(1)Voice Commands API。
对应用程序进行控制,一般用于语音识别系统中。
识别某个命令后,会调用相关接口是应用程序完成对应的功能。
如果程序想实现语音控制,必须使用此组对象。
(2)Voice Dictation API。
听写输入,即语音识别接口。
(3)Voice Text API。
完成从文字到语音的转换,即语音合成。
(4)Voice Telephone API。
语音识别和语音合成综合运用到电话系统之上,利用此接口可以建立一个电话应答系统,甚至可以通过电话控制计算机。
(5)Audio Objects API。
封装了计算机发音系统。
SAPI是架构在COM基础上的,微软还提供了ActiveX控件,所以不仅可用于一般的windows程序,还可以用于网页、VBA甚至EXCEL的图表中。
如果对COM感到陌生,还可以使用微软的C++ WRAPPERS,它用C++类封装了语音SDK COM对象。
二、安装SAPI SDK。
首先从这个站点下载开发包:/doc/8a2518556.html,/speech/download/sdk51 Microsoft Speech SDK 5.1添加了Automation支持。
所以可以在VB,ECMAScript等支持Automation 的语言中使用。
用C_开发基于MicrosoftSpeechSDK的语音应用程序ComputerEraNo.220070引言一直以来,让计算机听懂人们说的话,从而让人与计算机用自然语言方便地进行交流,是语音识别技术追求的目标。
本文在分析MicrosoftSpeechSDK应用程序开发接口的基础上,阐述应用C#如何开发语音应用程序。
1MicrosoftSpeechSDKMicrosoftSpeechSDK5.1是微软提供的软件开发包,其中包含了语音识别和合成引擎相关组件、帮助文档和例程,它是一个语音识别和合成的二次开发平台。
我们可以利用这个平台,在自己开发的软件里嵌入语音识别和合成功能,从而使用户可以用声音来代替鼠标和键盘完成部分操作,例如:文字输入、菜单控制等,实现真正的“人机对话”。
2.NET与COM组件SDK中提供的组件采用COM(ComponentObjectModel)标准开发,底层协议都以COM组件的形式完全独立于应用程序层,为应用程序设计人员屏蔽掉复杂的语音技术,语音相关的一系列工作由COM组件完成,程序员只需专注于自己的应用,调用相关的语音应用程序接口(SAPI)就可实现语音功能。
COM组件为在Windows平台上开发跨语言程序提供了可能,但传统COM编程的一系列技术较为复杂,对程序员水平的要求较高。
Microsoft提供的.NET平台对此作了很大改进,最终大大简化了.NET-COM的互操作过程。
例如,利用VisualStudio.NET开发平台引用SDK提供的COM组件非常简单,在菜单选择中工程|添加引用,然后点击COM标签,选择MicrosoftSpeechObjectLibrary,即可完成对该组件的引用。
实际上,这一做法,意味着项目引用了下面路径中的程序集:C:\ProgramFiles\CommonFiles\MicrosoftShared\Speech\sapi.dll(具体路径与操作系统相关)。
宝宝先行教育平台V1.0
安装手册
1、安装配套软件及作用说明
配套软件:
1、speechsdk51.zip(微软语音引擎)
2、speechsdk51LangPack.exe(微软语音引擎补丁支持中文)
3、ScanSoft_MeiLing_ChineseMandarinVoice.msi(语音库)
4、中文语音Hui绿化版(可装可不装,也是语音库)
作用:
这一、二、三项配套软件为必须安装,主要是实现语音朗读功能,不管是什么中文字,只要导入到朗读的文本中,就能准确无误的朗读出来。
2、安装步骤
1、首先安装speechsdk51.zip(微软语音引擎),如下
解压缩到当前目录下:
其次开始安装解压缩后的setup.exe文件
默认安装就行。
2、其次安装speechsdk51LangPack.exe(微软语音引擎补丁支持中文),如下
解压缩到当前目录下:
其次开始安装解压缩后的setup.exe文件
默认安装就行。
3、然后解压缩汉语中文女声-安装版的rar文件,解完后可以看到文件
ScanSoft_MeiLing_ChineseMandarinVoice.msi,双击安装。
4、安装后,我们到控制面板—
的语音设置中去看选择
以及
这样,我们的软件安装结束,可以打开这个软件了。
里面的朗读语音功能就实现了。
注意其中的摄像头功能是需要外接摄像头的。
一个简单的 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();。
微软TTS语音引擎(speechapisapi)深度开发入门Windows TTS开发介绍开篇介绍:我们都使用过一些某某词霸的英语学习工具软件,它们大多都有朗读的功能,其实这就是利用的Windows的TTS(Text T o Speech)语音引擎。
它包含在Windows Speech SDK开发包中。
我们也可以使用此开发包根据自己的需要开发程序。
鸡啄米下面对TTS功能的软件开发过程进行详细介绍。
一.SAPI SDK的介绍SAPI,全称是The Microsoft Speech API。
就是微软的语音API。
由Windows Speech SDK提供。
Windows Speech SDK包含语音识别SR引擎和语音合成SS引擎两种语音引擎。
语音识别引擎用于识别语音命令,调用接口完成某个功能,实现语音控制。
语音合成引擎用于将文字转换成语音输出。
SAPI包括以下几类接口:Voice Commands API、Voice Dictation API、Voice Text API、Voice Telephone API和Audio Objects API。
我们要实现语音合成需要的是Voice Text API。
目前最常用的Windows Speech SDK版本有三种:5.1、5.3和5.4。
Windows Speech SDK 5.1版本支持xp系统和server 2003系统,需要下载安装。
XP系统默认只带了个Microsoft Sam英文男声语音库,想要中文引擎就需要安装Windows Speech SDK 5.1。
Windows Speech SDK 5.3版本支持Vista系统和Server 2008系统,已经集成到系统里。
Vista和Server 2003默认带Microsoft lili 中文女声语音库和Microsoft Anna英文女声语音库。
Windows Speech SDK 5.4版本支持Windows7系统,也已经集成到系统里,不需要下载安装。
微软中国社区Net平台下开发中文语音应用程序摘要:语音是人类最自然的交互方式,也是现阶段软件用户界面发展的最高目标。
微软公司一直积极推动语音技术的发展,并且公布了语音开发平台Speech SDK帮助开发人员实现语音应用。
随着.net技术深入人心,越来越多的程序员开始转到.net平台上进行开发。
然而,在新发布的.net speech SDK里面并没有对中文语音进行支持,目前支持中文的Speech SDK最高版本为Windows平台下的SAPI 5.1(),本文介绍如何在.net平台下利用SAPI5.1开发中文语音应用程序。
目录:1. SAPI.51 SDK浅析以及安装2. 导入COM对象到.Net3. 用C#开发中文TTS应用程序示例4. 结论5. 参考文献1. SAPI.51 SDK浅析以及安装SAPI SDK是微软公司免费提供的语音应用开发工具包,这个SDK 中包含了语音应用设计接口(SAPI)、微软的连续语音识别引擎(MCSR)以及微软的语音合成(TTS)引擎等等。
目前的5.1版本一共可以支持3种语言的识别(英语,汉语和日语)以及2种语言的合成(英语和汉语)。
SAPI中还包括对于低层控制和高度适应性的直接语音管理、训练向导、事件、语法编译、资源、语音识别(SR)管理以及TTS管理等强大的设计接口。
其结构如图(1):图(1)语音引擎则通过DDI层(设备驱动接口)和SAPI(SpeechAPI)进行交互,应用程序通过API层和SAPI通信。
通过使用这些API,用户可以快速开发在语音识别或语音合成方面应用程序。
SAPI5.1 SDK可以从微软网站下载:/speech/download/sdk51/ 需要安装程序的有Speech SDK 5.1(68M)和5.1 Language Pack (81.5M)。
2.导入COM对象到.NetSAPI5.1的基于Windows平台的,通过COM接口进行调用。
微软语音识别分两种模式文本识别模式和命令识别模式.此两种模式的主要区别,主要在于识别过程中使用的匹配字典不同.前者使用的是通用字典,特点是内容多,覆盖的词汇量大,字典由sdk 提供.适用于没有预定目标的随机听写之类的应用.同时因为词汇量大直接导致识别的精度降低,识别速度较慢.后者的字典需要开发者自己编写,就是你们所说的xml文件.xml文件作为一种数据存储的方式,有一定的格式,定义了sdk需要确定的一些标签,和用以匹配的词汇.这种方式由开发者定义词汇的数量,大大降低匹配过程中需要检索的词汇量,提高了识别速度.同时因为侯选项极少,所以一般不会识别错误.其缺点也是明显的:词汇量小,只有预先输入字典的词汇可以被识别出来,所以一般用来作为常用命令的识别,方便用户操作,代替菜单命令等.利用微软SpeechSDK5. "1在MFC中进行语音识别开发时的主要步骤,以SpeechAPI5.1+VC6 为例:1、初始化COM端口一般在CWinApp的子类中,调用CoInitializeEx函数进行COM初始化,代码如下:::ColnitializeEx(NULL,COINIT_APARTMENTTHREADE初始化COM调用这个函数时,要在工程设置(projectsettings)->C/C+标签‘Category中选Preprocessor; 在Preprocessordefinitions:下的文本框中加上“,—WIN32_DCC”否则编译不能通过。
2、创建识别引擎微软SpeechSDK5."1 支持两种模式的:共享(Share)和独享(In Proc)。
一般情况下可以使用共享型,大的服务型程序使用In Proc。
如下:hr = m_cpRecognizer.CoCreateInstance(CLSID_SpSharedRecognizer);//Sharehr = m_cpRecog nizer.CoCreatel nsta nce(CLSID_Spl nprocRecog nizer);//l nPr如果是Share 型,可直接进到步骤3;如果是In Proc型,必须使用ISpRecog nizer::Setlnput 设置语音输入。
语音识别流程语音识别是一种将人类语音转换成文本或命令的技术,广泛应用于智能语音助手、语音识别软件等领域。
下面简要介绍一下语音识别的流程。
首先,语音识别的流程通常由语音信号的采集开始。
采集可以通过麦克风或其他音频设备进行,将人类的语音转换成电信号。
这个过程中需要注意信号的清晰度和噪音的干扰,因为不同的噪音对语音信号的识别有不同的影响。
接下来,语音信号将会经过一系列的预处理步骤。
首先是信号的采样和量化,将连续的语音信号转换成离散的数字信号。
然后进行预加重处理,强调语音信号中高频部分的信息,以提高语音识别的准确度。
接着对信号进行分帧处理,将信号分割成一段一段的小帧,每一帧通常包含几十毫秒的语音信号。
经过预处理后,会将每一帧的语音信号转换成对应的特征向量。
其中最常用的特征是梅尔频率倒谱系数(MFCC),它可以提取出语音信号的频谱特征。
其他常用的特征还包括线性预测征(LPC)和滤波器组征(Fbank)等。
这些特征向量将有助于区分不同的语音信号。
接着,将使用一个语音识别模型进行特征向量的分类。
常用的语音识别模型有隐马尔可夫模型(HMM)、深度神经网络(DNN)、卷积神经网络(CNN)和长短时记忆网络(LSTM)等。
模型的训练需要大量的语音数据和对应的文本标注,通过不断调整模型的参数,使得模型可以准确地将语音特征向量映射到对应的文字或命令。
最后,经过模型分类的输出将经过一个后处理的步骤。
这个步骤主要包括语言模型和声学模型的联合解码过程,用于对识别结果进行修正和优化。
语言模型通常是基于统计的语言模型,可以根据识别结果的上下文进行推断和纠正。
声学模型则通过解码算法,根据模型中的权重对识别结果进行优化。
总的来说,语音识别的流程主要包括语音信号的采集、预处理、特征提取、模型分类和后处理等步骤。
每一个步骤都对最终的语音识别准确度有影响,因此在实际应用中需要根据需求和场景选择合适的方法和算法。
不断地优化和调整这些步骤,可以提高语音识别的准确度和稳定性,为用户提供更好的语音识别体验。
微软语音识别分两种模式:文本识别模式和命令识别模式.此两种模式的主要区别,主要在于识别过程中使用的匹配字典不同.前者使用的是通用字典,特点是内容多,覆盖的词汇量大,字典由sdk提供.适用于没有预定目标的随机听写之类的应用.同时因为词汇量大直接导致识别的精度降低,识别速度较慢.后者的字典需要开发者自己编写,就是你们所说的xml文件.xml 文件作为一种数据存储的方式,有一定的格式,定义了sdk需要确定的一些标签,和用以匹配的词汇.这种方式由开发者定义词汇的数量,大大降低匹配过程中需要检索的词汇量,提高了识别速度.同时因为侯选项极少,所以一般不会识别错误.其缺点也是明显的:词汇量小,只有预先输入字典的词汇可以被识别出来,所以一般用来作为常用命令的识别,方便用户操作,代替菜单命令等.
利用微软Speech SDK 5.1在MFC中进行语音识别开发时的主要步骤,以Speech API 5.1+VC6为例:
1、初始化COM端口
一般在CWinApp的子类中,调用CoInitializeEx函数进行COM初始化,代码如下:
::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); // 初始化COM
注意:调用这个函数时,要在工程设置(project settings)->C/C++标签,Category中选Preprocessor,在Preprocessor definitions:下的文本框中加上“,_WIN32_DCOM”。
否则编译不能通过。
2、创建识别引擎
微软Speech SDK 5.1 支持两种模式的:共享(Share)和独享(InProc)。
一般情况下可以使用共享型,大的服务型程序使用InProc。
如下:
hr = m_cpRecognizer.CoCreateInstance(CLSID_SpSharedRecognizer);//Share
hr = m_cpRecognizer.CoCreateInstance(CLSID_SpInprocRecognizer);//InProc
如果是Share型,可直接进到步骤3;如果是InProc型,必须使用ISpRecognizer::SetInput 设置语音输入。
如下:
CComPtr<ISpObjectToken> cpAudioToken; //定义一个token
hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN, &cpAudioToken); //建立默认的音频输入对象
if (SUCCEEDED(hr)) { hr = m_cpRecognizer->SetInput(cpAudioT oken, TRUE);}
或者:
CComPtr<ISpAudio> cpAudio; //定义一个音频对象
hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &cpAudio);//建立默认的音频输入对象
hr = m_cpRecoEngine->SetInput(cpAudio, TRUE);//设置识别引擎输入源
3、创建识别上下文接口
调用ISpRecognizer::CreateRecoContext 创建识别上下文接口(ISpRecoContext),如下:hr = m_cpRecoEngine->CreateRecoContext( &m_cpRecoCtxt );
4、设置识别消息
调用SetNotifyWindowMessage 告诉Windows哪个是我们的识别消息,需要进行处理。
如下:
hr = m_cpRecoCtxt->SetNotifyWindowMessage(m_hWnd, WM_RECOEVENT, 0, 0); SetNotifyWindowMessage 定义在ISpNotifySource 中。
5、设置我们感兴趣的事件
其中最重要的事件是”SPEI_RECOGNITION“。
参照SPEVENTENUM。
代码如下:
const ULONGLONG ullInterest = SPFEI(SPEI_SOUND_START) | SPFEI(SPEI_SOUND_END) | SPFEI(SPEI_RECOGNITION) ;
hr = m_cpRecoCtxt->SetInterest(ullInterest, ullInterest);
6、创建语法规则
语法规则是识别的灵魂,必须要设置。
分为两种,一种是听说式(dictation),一种是命令式(command and control---C&C)。
首先利用ISpRecoContext::CreateGrammar 创建语法对象,然后加载不同的语法规则,如下:
//dictation
hr = m_cpRecoCtxt->CreateGrammar( GIDDICTATION, &m_cpDictationGrammar );
if (SUCCEEDED(hr))
{
hr = m_cpDictationGrammar->LoadDictation(NULL, SPLO_STATIC);//加载词典
}
//C&C
hr = m_cpRecoCtxt->CreateGrammar( GIDCMDCTRL, &m_cpCmdGrammar);
然后利用ISpRecoGrammar::LoadCmdxxx 加载语法,例如从CmdCtrl.xml中加载:WCHAR wszXMLFile[20]=L"";
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)"CmdCtrl.xml" , -1, wszXMLFile, 256);//ANSI转UNINCODE
hr = m_cpCmdGrammar->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);
注意:C&C时,语法文件使用xml格式,参见Speech SDK 5.1 中的Designing Grammar Rules。
简单例子:
<GRAMMAR LANGID="804">
<DEFINE>
<ID NAME="CMD" VAL="10"/>
</DEFINE>
<RULE NAME="COMMAND" ID="CMD" TOPLEVEL="ACTIVE">
<L>
<p>你</P>
<p>我</p>
<p>他</p>
</L>
</RULE>
</GRAMMAR>
LANGI*="804"代表简体中文,在<*>...</*>中增加命令。
7、在开始识别时,激活语法进行识别
hr = m_cpDictationGrammar->SetDictationState( SPRS_ACTIVE );//dictation
hr = m_cpCmdGrammar->SetRuleState( NULL,NULL,SPRS_ACTIVE );//C&C
8、获取识别消息,进行处理
截获识别消息(WM_RECOEVENT),然后处理。
识别的结果放在CSpEvent的ISpRecoResult 中。
如下:
USES_CONVERSION;
CSpEvent event;
switch (event.eEventId)
{
case SPEI_RECOGNITION:
{
//识别出了语音输入
m_bGotReco = TRUE;
static const WCHAR wszUnrecognized[] = L"<Unrecognized>";
CSpDynamicString dstrText;
//取得识别结果
if (FAILED(event.RecoResult()->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE ,&dstrText, NULL)))
{
dstrText = wszUnrecognized;
}
BSTR SRout;
dstrText.CopyToBSTR(&SRout);
CString Recstring;
Recstring.Empty();
Recstring = SRout;
//进一步处理
......
}
break;
}
9、释放创建的引擎、识别上下文对象、语法等。
调用相应的Release函数即可。
至此最简单的识别就完成了。