【发布时间】:2014-08-05 21:10:10
【问题描述】:
我想从 c# 获取音频文件并发送到谷歌语音识别 API 以获得“语音到文本”的答案。
我的代码是这样的:
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());
}
这部分用于上传file.wav并获取google API的响应,我是从网上找到的。
但我的代码总是会捕捉到异常:
在调用 _HWR_SpeechToText.GetResponse(); 之前,您必须将内容长度字节写入请求流;但我已经写了 ContextLength。
所以我的问题是为什么我的程序失败了?是因为google链接或者HTTPWebRequest我使用不当?
这是我获得 API 密钥的正确位置吗?
【问题讨论】:
-
您的文件有多大?你试过小一点的吗?
-
@NikolayShmyrev 我测试来自github.com/gillesdemey/google-speech-v2的文件
-
究竟是哪个文件,audio文件夹里有3个
-
另外,你的代码中真的有 / after rate 行吗?
-
@NikolayShmyrev good-morning-google.flac,我尝试了另外两个,结果一样。
标签: c# speech-recognition