EMPTY 结果如下所示:
json[0] "{\"result\":[]}"
json[1] ""
NON-EMPTY 结果(期望结果)如下所示:
json[0] "{\"result\":[]}"
json[1] "{\"result\":[{\"alternative\":[{\"transcript\":\"good morning Google how are you feeling today\",\"confidence\":0.987629}],\"final\":true}],\"result_index\":0}"
json[2] ""
我有这个功能,应该把“.flac”文件转换成文本。出于某种原因,只有这两个示例“.flac”文件在通过 Google Speech API 传递时返回一个字符串,其他 flac 文件返回 EMPTY 结果。这些人也有同样的问题:link
这是我所有的flac文件:链接
my.flac
并且this_is_a_test.flac
工作完美,谷歌语音 API 给了我一个 jason 对象,里面有文本。
但是,recorded.flac
它不适用于谷歌语音 API,并给了我 EMPTY json 对象。
调试:
- 我以为问题出在麦克风上,我录制
recorded.flac
了很多次,响亮而清晰,并使用 ffmpeg 将其转换为 flac。但谷歌语音API仍然无法识别recorded.flac
我以为我的代码格式错误,所以我尝试了
_HWR_SpeechToText.ContentType = “音频/116;速率=16000”;
代替
_HWR_SpeechToText.ContentType =“音频/x-flac;速率=44100”;
Then, none of them worked, not a single flac file. so i changed it back.
这是我的谷歌语音 API 代码,它将 FLAC 文件转换为 TEXT(我认为没有必要,但是,无论如何):
public void convert_to_text()
{
FileStream fileStream = File.OpenRead("recorded.flac");//my.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=" + ACCESS_GOOGLE_SPEECH_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();
StreamReader SR_Response = new StreamReader(HWR_Response.GetResponseStream());
string responseFromServer = (SR_Response.ReadToEnd());
String[] jsons = responseFromServer.Split('\n');
foreach (String j in jsons)
{
dynamic jsonObject = JsonConvert.DeserializeObject(j);
if (jsonObject == null || jsonObject.result.Count <= 0)
{
continue;
}
text = jsonObject.result[0].alternative[0].transcript;
jsons = null;
}
label1.Content = text;
}