¿Cómo utilizar la API de reconocimiento de voz de Google en c #?

Quiero obtener el archivo de audio de c # y enviarlo a la API de reconocimiento de voz de google para obtener la respuesta “discurso a texto”.

Mi código es así:

try { byte[] BA_AudioFile = GetFile(filename); HttpWebRequest _HWR_SpeechToText = null; _HWR_SpeechToText = (HttpWebRequest)HttpWebRequest.Create( "https://www.google.com/speech-api/v2/recognize?output=json&lang=" + DEFAULT_LANGUAGE + "&key=" + key); _HWR_SpeechToText.Credentials = CredentialCache.DefaultCredentials; _HWR_SpeechToText.Method = "POST"; _HWR_SpeechToText.ContentType = "audio/x-flac; rate=44100"; _HWR_SpeechToText.ContentLength = BA_AudioFile.Length; Stream stream = _HWR_SpeechToText.GetRequestStream(); stream.Write(BA_AudioFile, 0, BA_AudioFile.Length); stream.Close(); HttpWebResponse HWR_Response = (HttpWebResponse)_HWR_SpeechToText.GetResponse(); if (HWR_Response.StatusCode == HttpStatusCode.OK) { StreamReader SR_Response = new StreamReader(HWR_Response.GetResponseStream()); Console.WriteLine(SR_Response.ToString()); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } 

Esta parte es para cargar el archivo.wav y obtener la respuesta para la API de Google, que encuentro de Internet.

Pero mi código siempre capta las excepciones:

debe escribir bytes de longitud de contenido en la secuencia de solicitud antes de llamar a _HWR_SpeechToText.GetResponse (); Pero ya escribí el ContextLength.

¿Entonces mi pregunta es por qué mi progtwig falló? ¿Es porque el enlace de google o HTTPWebRequest usé de manera inapropiada?

¿Es este el lugar correcto en el que obtuve la clave API?

enter image description here

Acabo de probar esto por mí mismo, a continuación se muestra una solución de trabajo si tiene una clave API válida.

  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.IO; namespace GoogleRequest { class Program { static void Main(string[] args) { try { FileStream fileStream = File.OpenRead("good-morning-google.flac"); MemoryStream memoryStream = new MemoryStream(); memoryStream.SetLength(fileStream.Length); fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length); byte[] BA_AudioFile = memoryStream.GetBuffer(); HttpWebRequest _HWR_SpeechToText = null; _HWR_SpeechToText = (HttpWebRequest)HttpWebRequest.Create( "https://www.google.com/speech-api/v2/recognize?output=json&lang=en-us&key=YOUR_API_KEY_HERE"); _HWR_SpeechToText.Credentials = CredentialCache.DefaultCredentials; _HWR_SpeechToText.Method = "POST"; _HWR_SpeechToText.ContentType = "audio/x-flac; rate=44100"; _HWR_SpeechToText.ContentLength = BA_AudioFile.Length; Stream stream = _HWR_SpeechToText.GetRequestStream(); stream.Write(BA_AudioFile, 0, BA_AudioFile.Length); stream.Close(); HttpWebResponse HWR_Response = (HttpWebResponse)_HWR_SpeechToText.GetResponse(); if (HWR_Response.StatusCode == HttpStatusCode.OK) { StreamReader SR_Response = new StreamReader(HWR_Response.GetResponseStream()); Console.WriteLine(SR_Response.ReadToEnd()); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); } } }