C#桌面程序但愿使用语音识别 将语音转成文字有不少方法html
使用讯飞变得比较麻烦,主要是由于全部平台都须要用sdk,不知道是否是不能用web调用(没有研究,按道理应该有。。。)web
下面在使用百度的语音识别来完成这个工做,主要代码来自网友,我写成了类(具体从哪里来的我忘了,在此感谢)json
找到原做者 http://www.cnblogs.com/bfyx/p/3915297.htmlapi
下面是我改写的音频转文字的类,因为返回json,因此用了json.net来解析返回结果,类前面的token和apikey须要本身去申请百度语音识别app
传送门 http://yuyin.baidu.com
ui
using System; using System.Text; using System.Net; using System.IO; using Newtonsoft.Json.Linq; namespace TestBaiDuAudio2Txt { public class AudioToString { string token = "";//你本身注册百度语音识别所创建的app给的 string apiKey = "";//同上 string secretKey = "";<span style="font-family: Arial, Helvetica, sans-serif;">//同上</span> string cuid = "";//这个随便写 不过尽可能写惟一的,好比本身建立个guid,或者你手机号码什么的均可以 string getTokenURL = ""; string serverURL = "http://vop.baidu.com/server_api"; public AudioToString() { cuid = Guid.NewGuid().ToString(); getToken(); } private void getToken() { getTokenURL = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials" + "&client_id=" + apiKey + "&client_secret=" + secretKey; token = GetValue("access_token"); } private string GetValue(string key) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(getTokenURL); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader1 = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string ssss = reader1.ReadToEnd().Replace("\"", "").Replace("{", "").Replace("}", "").Replace("\n", ""); string[] indexs = ssss.Split(','); foreach (string index in indexs) { string[] _indexs = index.Split(':'); if (_indexs[0] == key) return _indexs[1]; } return ""; } public string audioToString(string audioFilePath) { serverURL += "?lan=zh&cuid=" + cuid + "&token=" + token; FileStream fs = new FileStream(audioFilePath, FileMode.Open); byte[] voice = new byte[fs.Length]; fs.Read(voice, 0, voice.Length); fs.Close(); fs.Dispose(); HttpWebRequest request = null; Uri uri = new Uri(serverURL); request = (HttpWebRequest)WebRequest.Create(uri); request.Timeout = 30000; request.Method = "POST"; //16K的采样率 request.ContentType = "audio/wav; rate=16000"; request.ContentLength = voice.Length; try { using (Stream writeStream = request.GetRequestStream()) { writeStream.Write(voice, 0, voice.Length); writeStream.Close(); writeStream.Dispose(); } } catch { return null; } string result = string.Empty; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8)) { string line = string.Empty; StringBuilder sb = new StringBuilder(); while (!readStream.EndOfStream) { line = readStream.ReadLine(); sb.Append(line); sb.Append("\r"); } result = sb.ToString(); readStream.Close(); readStream.Dispose(); } responseStream.Close(); responseStream.Dispose(); } response.Close(); } string re = string.Empty; JObject jsonObj = JObject.Parse(result); string err_msg = (string)jsonObj["err_msg"]; string err_no = (string)jsonObj["err_no"]; //错误的代码也没有处理,对我没用咯 if (err_no == "0" && err_msg == "success.") { //因为百度语音识别会返回1-5个候选结果,这里没有处理就只要了第一个结果 JArray jlist = JArray.Parse(jsonObj["result"].ToString()); return jlist[0].ToString(); } else { return null; } } } }
类的外部调用,直接new一个而后把语音文件的路径名给了就okspa
AudioToString ats = new AudioToString(); textBox1.Text=ats.audioToString(filename);
本身用的一些东西,有什么不对的请各位大神指正,另外感谢网友提供的方法。.net