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;
}
}