using System.Net; using System.Net.Http.Headers; using System.Text; namespace TextToSpeechService; public class GoogleSTTHubClient { public HttpClient Client { get; private set; } public async Task Demo() { string inFile =AppDomain.CurrentDomain.BaseDirectory+ "/test/demo.wav"; FileStream fs = new FileStream(inFile, FileMode.Open); byte[] voice = new byte[fs.Length]; fs.Read(voice, 0, voice.Length); fs.Close(); await Speech(voice); } public GoogleSTTHubClient(HttpClient httpClient) { httpClient.BaseAddress = new Uri("http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN&maxresults=1"); //httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json"); //httpClient.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample"); //httpClient.DefaultRequestHeaders.Add("content-type", "audio/x-flac; rate=16000"); Client = httpClient; } /// /// api调不通 /// 新版本的API: api:地址: https://www.google.com/speech-api/v2/recognize?output=json&lang=en-us&key=yourkey /// URL路径: 之前的V1变成V2 /// 参数: 新增output:输出类型,我们一般用json 新增KEY:需要去google注册帐号,申请apikey 其他的参数都能够继续使用 /// 开源代码:http://src.chromium.org/viewvc/chrome/trunk/src/content/browser/speech/ /// /// /// public async Task Speech(byte[] voice) { HttpContent content = new StreamContent(new MemoryStream(voice)); content.Headers.ContentType = new MediaTypeHeaderValue("audio/x-flac; rate=8000"); var result= await Client.PostAsync("",content); await using Stream responseStream = await result.Content.ReadAsStreamAsync(); using StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8); var text = await readStream.ReadToEndAsync(); return text; } /// /// 调用google语音识别引擎 /// /// private string GoogleSTT(byte[] voice) { string result = string.Empty; try { //string inFile = "audio.wav"; //FileStream fs = new FileStream(inFile, FileMode.Open); //byte[] voice = new byte[fs.Length]; //fs.Read(voice, 0, voice.Length); //fs.Close(); string url = "http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN"; Uri uri = new Uri(url); #pragma warning disable CS0618 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); #pragma warning restore CS0618 request.Method = "POST"; request.ContentType = "audio/x-flac; rate=16000"; request.ContentLength = voice.Length; using (Stream writeStream = request.GetRequestStream()) { writeStream.Write(voice, 0, voice.Length); } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8)) { result = readStream.ReadToEnd(); } } } } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } return result; } }