C# 请求Yandex发言
我试图通过桌面应用程序将识别wav文件->的请求设置为使用Yandex语音API的文本 文档请求示例:C# 请求Yandex发言,c#,.net,api,httpwebrequest,yandex-api,C#,.net,Api,Httpwebrequest,Yandex Api,我试图通过桌面应用程序将识别wav文件->的请求设置为使用Yandex语音API的文本 文档请求示例: POST /asr_xml?uuid=01ae13cb744628b58fb536d496daa1e6&key=developers-simple- key&topic=maps HTTP/1.1 Content-Type: audio/x-speex User-Agent: Dalvik/1.2.0 (Linux; U; Android 2.2.2; LG-P990 Buil
POST /asr_xml?uuid=01ae13cb744628b58fb536d496daa1e6&key=developers-simple- key&topic=maps HTTP/1.1
Content-Type: audio/x-speex
User-Agent: Dalvik/1.2.0 (Linux; U; Android 2.2.2; LG-P990 Build/FRG83G)
Host: asr.yandex.net
Transfer-Encoding: chunked
7d0
...
chunked body
因此,我在开发者论坛注册,获取api密钥并编写简单代码:
public string RecognizeSpeech(byte[] bytes, String uuid, String apiKey, string topic = "queries", string lang = "ru-RU")
{
try
{
var uri = string.Format("https://asr.yandex.net/asr_xml?" +
"uuid={0}" +
"&key={1}" +
"&topic={2}" +
"&lang={3}", uuid, apiKey, topic, lang);
var request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "audio/x-wav";//"audio/x-pcm;bit=16;rate=16000";
request.ContentLength = bytes.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(bytes, 0, bytes.Length);// exception here
}
var response = request.GetResponse();
var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
return reader.ReadToEnd();
}
catch (Exception ex)
{
...
}
return "";
}
我尝试使用音频/x-wav或音频/x-pcm;位=16;rate=16000,但我得到错误:
Unable to write data to the transport connection: remote host forcibly ripped existing connection.
(使用谷歌翻译)
字节[]字节-是:
var audioBytes = File.ReadAllBytes(@"file.wav");
另外此要点设置了对Yandex语音云的POST请求 您需要制作有效的音频文件(我使用Freemake)-pcm,16位,16000 hz,单声道。 以下是解决方案:
public string PostMethod(byte[] bytes)
{
string postUrl = "https://asr.yandex.net/asr_xml?" +
"uuid=01ae13cb744628b58fb536d496daa1e6&" +
"key="+your_api_key_here+"&" +
"topic=queries";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(postUrl);
request.Method = "POST";
request.Host = "asr.yandex.net";
request.SendChunked = true;
request.UserAgent = "Oleg";
request.ContentType = "audio/x-pcm;bit=16;rate=16000";
request.ContentLength = bytes.Length;
using (var newStream = request.GetRequestStream())
{
newStream.Write(bytes, 0, bytes.Length);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string responseToString = "";
if (response != null)
{
var strreader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
responseToString = strreader.ReadToEnd();
}
int index = responseToString.IndexOf("<variant confidence=\"1\">");
responseToString = responseToString.Substring(index + 24, responseToString.Length - index - 24);
int index2 = responseToString.IndexOf("</variant>");
responseToString = responseToString.Substring(0, index2);
return responseToString;
}
publicstringpostmethod(字节[]字节)
{
字符串姿势=”https://asr.yandex.net/asr_xml?" +
“uuid=01ae13cb744628b58fb536d496daa1e6&”+
“key=“+your_api_key_here+”&”+
“主题=查询”;
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(postrl);
request.Method=“POST”;
request.Host=“asr.yandex.net”;
request.SendChunked=true;
request.UserAgent=“Oleg”;
request.ContentType=“音频/x-pcm;位=16;速率=16000”;
request.ContentLength=字节.Length;
使用(var newStream=request.GetRequestStream())
{
newStream.Write(字节,0,字节,长度);
}
HttpWebResponse=(HttpWebResponse)request.GetResponse();
字符串响应字符串=”;
if(响应!=null)
{
var strreader=newstreamreader(response.GetResponseStream(),Encoding.UTF8);
responseToString=strreader.ReadToEnd();
}
int index=responseToString.IndexOf(“”);
responseToString=responseToString.Substring(索引+24,responseToString.Length-index-24);
int index2=responseToString.IndexOf(“”);
responseToString=responseToString.Substring(0,index2);
返回响应字符串;
}