.Net平台下开发中文语音应用程序(C#)

本文介绍了如何在.NET环境下,利用C#语言调用控制面板中的各种属性窗口,如辅助选项、添加新硬件、添加/删除程序等,通过运行特定的DLL文件和命令来实现各种设置功能。
摘要由CSDN通过智能技术生成
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可以从微软网站下载:http://www.microsoft.com/speech/download/sdk51/ 需要安装程序的有Speech SDK 5.1(68M)和5.1 Language Pack (81.5M)
2. 导入COM对象到.Net
SAPI5.1的基于Windows平台的,通过COM接口进行调用。在.Net平台下要应用SAPI5.1,我们可以利用.Net Framework自带的强大工具TlbImp.exe来把SAPI SDK的COM对象导入到.Net中。TlbImp.exe产生一个管制的包装类,管理客户端可以使用它。包装类管理实际的COM对象的参考数。当包装类当作收集的垃圾时,包装类释放掉它包装的COM对象。当然,你也可以在VS.NET环境中通过从项目参考对话框选择COM对象,实现COM对象的导入,这个过程也是通过TlbImp.exe来完成的。
下面演示如何导入SAPI的COM对象:
SAPI.dll的目录在c:/Program Files/Common Files/Microsoft Shared/Speech
Tlbimp的目录在C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin
在DOS下面运行命令:Tlbimp sapi.dll /out: DotNetSpeech.dll
在安转SDK以后,可以在C:/Program Files/Common Files/Microsoft Shared/Speech/目录下面找到SAPI.dll,这里面定义了SAPI的COM对象,用Tlbimp.exe工具将该dll转换成.net平台下的Assembly---DotNetSpeech.dll,转换的过程会提示不少的警告(warning),但这部影响我们的开发,可以忽略。最后,我们可以用ildasm查看DotnetSpeech.dll里面的对象。
附:警告信息:
C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin>tlbimp sapi.dll /out:Dot
NetSpeech.dll
Microsoft (R) .NET Framework Type Library to Assembly Converter 2.0.50727.42
Copyright (C) Microsoft Corporation.  All rights reserved.
TlbImp : warning TI0000 : “SpObjectTokenCategory.GetStringValue”的至少一个参数
不能由运行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要
不安全代码进行操作。
TlbImp : warning TI0000 : “SpObjectTokenCategory.EnumKeys”的至少一个参数不能由
运行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安全
代码进行操作。
TlbImp : warning TI0000 : “SpObjectTokenCategory.EnumValues”的至少一个参数不能
由运行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安
全代码进行操作。
TlbImp : warning TI0000 : “SpObjectTokenCategory.GetId”的至少一个参数不能由运
行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安全代
码进行操作。
TlbImp : warning TI0000 : “SpObjectTokenCategory.GetDefaultTokenId”的至少一个
参数不能由运行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能
需要不安全代码进行操作。
TlbImp : warning TI0000 : “ISpObjectTokenCategory.GetStringValue”的至少一个参
数不能由运行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需
要不安全代码进行操作。
TlbImp : warning TI0000 : “ISpObjectTokenCategory.EnumKeys”的至少一个参数不能
由运行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安
全代码进行操作。
TlbImp : warning TI0000 : “ISpObjectTokenCategory.EnumValues”的至少一个参数不
能由运行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不
安全代码进行操作。
TlbImp : warning TI0000 : “ISpObjectTokenCategory.GetId”的至少一个参数不能由运
行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安全代
码进行操作。
TlbImp : warning TI0000 : “ISpObjectTokenCategory.GetDefaultTokenId”的至少一个
参数不能由运行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能
需要不安全代码进行操作。
TlbImp : warning TI0000 : “ISpDataKey.GetStringValue”的至少一个参数不能由运行
时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安全代码
进行操作。
TlbImp : warning TI0000 : “ISpDataKey.EnumKeys”的至少一个参数不能由运行时封送
拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安全代码进行操
作。
TlbImp : warning TI0000 : “ISpDataKey.EnumValues”的至少一个参数不能由运行时封
送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安全代码进行
操作。
TlbImp : warning TI0000 : “ISpObjectToken.GetStringValue”的至少一个参数不能由
运行时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安全
代码进行操作。
TlbImp : warning TI0000 : “ISpObjectToken.EnumKeys”的至少一个参数不能由运行时
封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安全代码进
行操作。
TlbImp : warning TI0000 : “ISpObjectToken.EnumValues”的至少一个参数不能由运行
时封送拆收器进行封送处理。因此,此类参数将作为指针进行传递,并可能需要不安全代码
进行操作。
TlbImp : warning TI0000 : “ISpObjectToken.GetId”的至少一个参数不能由运行时封送
拆收器进行封送处理。因此,此类参数将作为指针进行传递,
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值