win8/Metro开发系六 win8 中让你的程序 智能语音转身小霸王学习机
首先还是那句话,我不是大牛,这些只是简单的记录一下学习的过程,没有太多面向对象和设计模式的思维,只偏基础,不喜莫笑;个人观点如果有不足之处,还望多多指教!
导语:多媒体时代怎么让你的程序能满足用户多样化的需求,如html5里的语音输入,眼神控制等等
这节将给大家说说怎样让你的程序做智能语音提示!让你的程序比小霸王点读机还要强大
只是一个思路起抛砖引玉供大家借鉴,不喜勿骂!~
首先:传统开发中可以调用微软的提供的一个强大的tts语音识别引擎 让lily帮你读出你想说的话!支持多种语言版本
1. SAPI.51 SDK浅析以及安装
SAPI SDK是微软公司免费提供的语音应用开发工具包,这个SDK中包含了语音应用设计接口(SAPI)、微软的连续语音识别引擎(MCSR)以及微软的语音合成(TTS)引擎等等。目前的5.1版本一共可以支持3种语言的识别 (英语,汉语和日语)以及2种语言的合成(英语和汉语)。SAPI中还包括对于低层控制和高度适应性的直接语音管理、训练向导、事件、语法编译、资源、语音识别(SR)管理以及TTS管理等强大的设计接口。
语音引擎则通过DDI层(设备驱动接口)和SAPI(SpeechAPI)进行交互,应用程序通过API层和SAPI通信。通过使用这些API,用户可以快速开发在语音识别或语音合成方面应用程序。
要开发这个需满足几个前提:
SAPI5.1 SDK可以从微软网站下载:http://www.microsoft.com/downloads/details.aspx?FamilyID=5e86ec97-40a7-453f-b0ee-6583171b4530&DisplayLang=en需要安装程序的有Speech SDK 5.1(68M)和5.1 Language Pack (81.5M)。
在win8中不需要安装别的我没有尝试大家可以先开发出程序不能发音然后再下载语言包
现在语言包引进支持N多国家了大家可以去自己下载看一看
这里给大家贴出c#的语言识别代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /// <summary> 2 /// 点击按钮发音 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void buttonVoice_Click(object sender, EventArgs e) 7 { 8 read(textText.Text); 9 } 10 11 /// <summary> 12 ///发音线程,来管理发音;如果,多处发音,可以创建多个; 13 ///backgroundWorker的dowork事件,双击backgroundWorker1, 即可自动生成 14 /// </summary> 15 /// <param name="sender"></param> 16 /// <param name="e"></param> 17 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 18 { 19 SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync; 20 SpVoice voice = new SpVoice(); 21 voice.Rate = 0;//调整发音语速,可以为负数,如-3,0,5 22 voice.Speak(e.Argument.ToString(), spFlags); 23 24 } 25 26 /// <summary> 27 /// 发音 28 /// </summary> 29 /// <param name="content"></param> 30 void read(object content) 31 { 32 try 33 { 34 backgroundWorker1.RunWorkerAsync(content); 35 } 36 catch (Exception er) 37 { 38 MessageBox.Show(er.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); 39 } 40 }
这里介绍win8程序里面的发音这个就不多做介绍了
我找了一下提供的这些版本都没有winrt的支持组件所以这里就不用微软的tts来开发
我们用谷歌的翻译里面有个语音朗读功能
用谷歌的发音api
这个api默认传递的参数utf-8编码
由于winrt的程序默认编码就是utf-8不用费心思去转码直接上就Ok
请求回来的文件是mp3格式文件所以用mediaElement这个控件直接去请求加载它就ok方面简单
不过你实例化了这个对象之后要记住把它加入到xaml对象中去简单好用大家可以自己试试吧
缺点:需要联网发包。如果大家觉得不好就等微软出新版本或用别的方法
优点:所有平台都可以使用不受限制,所有类型的软件也可以使用
只起抛砖引玉:如果大家有好的方法还可以交流!!!
示例代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class MediaHelper { private MediaElement mdeia; public MediaHelper(string sound,MediaElement m) { mdeia = m; mdeia.Source = new Uri("http://translate.google.cn/translate_tts?ie=UTF-8&q="+sound+"&tl=zh-CN&total=1&idx=0&textlen=3&prev=input"); } public void play() { mdeia.AutoPlay=true; mdeia.Volume = 10; mdeia.Play(); } }
同时这个控件还可以播放网络和本地的视频等,多媒体很强大,大家可以继续研究研究