admin管理员组文章数量:1122847
C#语言实现Windows系统下语音播报及语音识别
- 一、语音播报
- 二、语音识别
- 三、安装在win7系统Debug
- 参考文档
一、语音播报
语音播报可以使用System.Speech或Microsoft.Speech库文件来实现,但在Windows XP系统下运行时发现,调用System.Speech会报错,所以这里使用Microsoft.Speech来实现语音播报。
要实现语音播报还需要安装语音库(包括运行SDK和语音库),下载链接如下:
Microsoft Speech Platform SDK 11
zh-CN HuiHui中文
示例代码如下:
using Microsoft.Speech.Synthesis;
...
private SpeechSynthesizer speechSyn = new SpeechSynthesizer();
public void PlayAsync(string word)
{
var currentSpokenPrompt = speechSyn.GetCurrentlySpokenPrompt();
var speechSynthesizer = new SpeechSynthesizer();
var voices = speechSynthesizer.GetInstalledVoices(CultureInfo.CurrentCulture).Select(x => x.VoiceInfo.Name).ToList();//获取安装的语音库
speechSyn.SelectVoice(voices[0]);
speechSyn.Rate = -1;//设置语音播报速率,越大速度越快
if (currentSpokenPrompt != null)
{
speechSyn.SpeakAsyncCancel(currentSpokenPrompt);
}
speechSyn.SetOutputToDefaultAudioDevice();//设置默认语音播放设备
speechSyn.SpeakAsync(word);//语音播报word变量
}
二、语音识别
与语音播报类似,在Windows下要实现语音播报功能可以使用System.Speech与Microsoft.Speech两个dll,两者都属于微软语音API,Microsoft.Speech适用于服务器,用于识别低质量的音频,而System.Speech适用于桌面计算机,用于识别更高质量的音频,识别率较Microsoft.Speech更高,因此本文使用System.Speech进行语音识别,示例代码如下:
using System.Speech.Recognition;
...
SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("zh-CN"));//初始化中文引擎
Choices conmmonds = new Choices();
conmmonds.Add(new string[] { "红灯", "绿灯", "开灯", "关灯" });//添加词条
GrammarBuilder gBuilder = new GrammarBuilder();
gBuilder.Append(conmmonds);
Grammar grammar = new Grammar(gBuilder);
recognizer.LoadGrammar(grammar);
recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(Deal_SpeechRecongized);
recognizer.SetInputToDefaultAudioDevice();//设置默认输入设备
recognizer.RecognizeAsync(RecognizeMode.Multiple);//开始监控设备输入准备识别
static void Deal_SpeechRecongized(object sender,SpeechRecognizedEventArgs e) //处理识别结果
{
Console.WriteLine("识别结果:"+e.Result.Text);
}
三、安装在win7系统Debug
软件发布后在Windows7系统下安装试用,爆出检索COM类工厂中CLSID为{D9F6EE60-58C9-458B-88E1-2F908FD7F87C}的组件失败,原因是出现以下错误:8007007e找不到指定的模块错误:
通过查阅资料:
1、注册使用的dll文件,打开运行窗口,输入”regsvr32 需要注册的dll路径“,提示已加载,但找不到入口点,问题未能解决。
2、可能是由于软件运行权限问题,但选中程序右键——选择管理员模式运行,依然提示该错误。
3、在项目引用中选中System.Speech,右键打开属性,将嵌入互操作类型及特定版本选为False,如下图所示:
结果程序发布安装后问题依旧。
后通过在注册表中搜索{D9F6EE60-58C9-458B-88E1-2F908FD7F87C}发现指向的是**%SystemRoot%\System32\Speech\Common\sapi.dll**
通过搜索发现,一部分Windows7系统可能由于安装系统时去除了一部分包括语音识别功能组件,导致sapi.dll文件不存在,所以就会爆出上述错误。
缺乏语音识别组件的直观表现为打开控制面板,切换为大图标,正常会看到语音识别图标,而功能缺乏的系统会找不到语音识别。
这时需要下载win7系统TTS修复软件,重新安装语音识别组件,修复软件链接如下:
Win7系统TTS修复-采用原生Win7提取绿色修复
需要注意的是即使下载修复软件进行修复后,控制面板中出现了语音识别图标,但运行语音识别软件后,但可能会爆出“无法创建所需的引擎ID”类似错误,这时需要将麦克风插入计算机中,然后重启软件,如果依然存在问题,说明修复未成功,Debug失败。
参考文档
What is the difference between System.Speech.Recognition and Microsoft.Speech.Recognition
关于:我找不到System.speech
Error loading Microsoft Speech SDK v11
C# 调用微软自带的语音识别
C# 语音合成
C#调用window语音识别
版权声明:本文标题:C#语言实现Windows系统下语音播报及语音识别 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1728720825a1405060.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论