我正在尝试使用谷歌语音API将语音转换为文本。我在下面有一个示例代码。它工作正常,它突然停止工作,现在它总是抛出错误 - 400 错误请求。我正在使用GOOGLE_SPEECH_KEY在没有 OAuth2 令牌的情况下进行身份验证。
不知道我到底错过了什么。我是否需要创建 OAuth 身份验证,或者是否需要修改 Google 门户中的任何控制台设置,或者需要修改代码本身?请帮忙!
我使用了以下所有 API 和相同的 400 错误:1. url = “https://speech.googleapis.com/v1beta1/speech:syncrecognize?key=” ACCESS_GOOGLE_SPEECH_KEY;
2. 网址 = “https://speech.googleapis.com/v1/speech:recognize?key=” ACCESS_GOOGLE_SPEECH_KEY;
3. 网址 = “https://speech.googleapis.com/v1p1beta1/speech:recognize?key=” ACCESS_GOOGLE_SPEECH_KEY;
public static string GoogleSpeechToTextApi(string flacUrl)
{
string pTranscriptText = "None", pTranscriptConfidence = "";
string appendText = "";
try
{
// Stream responseStream = imageResponse.GetResponseStream();
if (flacUrl != null)
{
string blobURI = flacUrl;
WebClient myWebClient = new WebClient();
Stream fileStream = myWebClient.OpenRead(blobURI);
byte[] BA_AudioFile = null;
using (var stream2 = new MemoryStream())
{
fileStream.CopyTo(stream2);
stream2.SetLength(stream2.Length);
stream2.Read(stream2.GetBuffer(), 0, (int)stream2.Length);
BA_AudioFile = stream2.GetBuffer();
}
string audioInput = Convert.ToBase64String(BA_AudioFile);
Config config = new Config();
config.encoding = "flac";
config.languageCode = "en";
config.sampleRate = "8000";
Audio audio = new Audio();
audio.content = audioInput;
JsonRequest request = new JsonRequest();
request.config = config;
request.audio = audio;
string json = JsonConvert.SerializeObject(request);
string url = "https://speech.googleapis.com/v1beta1/speech:syncrecognize?key=" + ACCESS_GOOGLE_SPEECH_KEY; // original api url
//url = "https://speech.googleapis.com/v1/speech:recognize?key=" + ACCESS_GOOGLE_SPEECH_KEY; // tested with this
//url = "https://speech.googleapis.com/v1p1beta1/speech:recognize?key=" + ACCESS_GOOGLE_SPEECH_KEY; // tested with this
WebRequest webRequest = WebRequest.Create(url);
webRequest.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(json);
webRequest.ContentLength = byteArray.Length;
Stream dataStream = webRequest.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = webRequest.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
RootObject ro = JsonConvert.DeserializeObject<RootObject>(responseFromServer);
dynamic JsonArray = JsonConvert.DeserializeObject(responseFromServer);
var jsonResult = JsonArray["results"];
foreach (var item in jsonResult)
{
appendText += item.alternatives[0].transcript;
}
}
return appendText;
}
catch (Exception ex)
{
return appendText = "Error";
}
}
}
}
错误 400 表示您的请求不正确。您可以尝试编码 = linear16
,audioChannelCount = 2
和 sampleRateHertz = 16000
,文件波形。顺便说一句,您可以在标头请求中传递密钥,而不是在您的 url 中传递