讯飞语音转写实例代码 C# 当前时间版本可直接用
string preUrl = "https://raasr.xfyun.cn/api/prepare";string uploadUrl = "https://raasr.xfyun.cn/api/upload";string mergeUrl = "https://raasr.xfyun.cn/api/merge";string progressUrl = "https://raasr.xfy
·
string preUrl = "https://raasr.xfyun.cn/api/prepare";
string uploadUrl = "https://raasr.xfyun.cn/api/upload";
string mergeUrl = "https://raasr.xfyun.cn/api/merge";
string progressUrl = "https://raasr.xfyun.cn/api/getProgress";
string resultUrl = "https://raasr.xfyun.cn/api/getResult";
string app_id = "自己写";
string secretkey = "自己写";
string file_len = "";
string file_name = "";
int slice_num = 1;
string taskID = "";
string finalResult = "";
string slice_id = "aaaaaaaaaa";
string resPath = "";
string errorInfo = "";
// 参数自己补
// 这里直接调用方法即可获取最终结果
// 写代码的时候是按顺序从第一个接口开始 获得成功返回值则向后调用
protected void Page_Load(object sender, EventArgs e) {
string preResult = PreHandle();
string newData = "";
if (preResult != null && preResult != "")
{
UploadHandele(preResult);
if (finalResult != "")
{
//newData即finalResult即转写结果
newData = finalResult;
}
}
}
//这里开始是一层一层实现的方法
// 可无视或者帮忙做点优化
private string PreHandle()
{
string ts = "";
string signa = "";
string preHandleContent = "";
string taskID = "";
slice_num = 1;
TimeSpan timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
ts = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
signa = GetSigna(app_id, ts);
preHandleContent = "app_id=" + app_id + "&signa=" + signa + "&ts=" + ts + "&file_len=" + file_len + "&file_name=" + file_name + "&slice_num=" + slice_num + "&pd=edu";
string postResult = "";
while (postResult == "")
{
postResult = HttpPost(preUrl, preHandleContent, "application/x-www-form-urlencoded; charset=UTF-8");
}
JObject getTaskID = (JObject)JsonConvert.DeserializeObject(postResult);
if (getTaskID["data"] != null)
{
taskID = getTaskID["data"].ToString();
}
return taskID;
}
private void UploadHandele(string preData)
{
string task_id = preData;
byte[] uploadBuffer;
uploadBuffer = fileTobyte(Server.MapPath(resPath));
string ts = "";
string signa = "";
string uploadResult = "";
TimeSpan timeSpanU = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
ts = Convert.ToInt64(timeSpanU.TotalSeconds).ToString();
signa = GetSigna(app_id, ts);
uploadUrl += "?app_id=" + app_id + "&signa=" + signa + "&ts=" + ts + "&task_id=" + task_id + "&slice_id=" + slice_id;
while (uploadResult == "")
{
uploadResult = HttpPostMulti(uploadUrl, uploadBuffer, file_name);
}
JObject getUploadResult = (JObject)JsonConvert.DeserializeObject(uploadResult);
// 上传成功
if (Convert.ToInt32(getUploadResult["ok"]) == 0)
{
MergeHandle(task_id);
}
else
{
//UploadHandele(preData);
errorInfo += getUploadResult.ToString();
}
}
private void MergeHandle(string MergeTaskID)
{
string ts = "";
string signa = "";
string mergeResult = "";
TimeSpan timeSpanM = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
ts = Convert.ToInt64(timeSpanM.TotalSeconds).ToString();
signa = GetSigna(app_id, ts);
string mergeContent = "";
mergeContent = "app_id=" + app_id + "&signa=" + signa + "&ts=" + ts + "&task_id=" + MergeTaskID;
while (mergeResult == "")
{
mergeResult = HttpPost(mergeUrl, mergeContent, "application/x-www-form-urlencoded; charset=UTF-8");
}
JObject getMergeResult = (JObject)JsonConvert.DeserializeObject(mergeResult);
if (Convert.ToInt32(getMergeResult["ok"]) == 0)
{
ProgressHandle(MergeTaskID);
} else
{
errorInfo += "合并失败";
}
}
private void ProgressHandle(string progressTaskID)
{
string ts = "";
string signa = "";
int progressResult = -100;
int timeCount = 0;
TimeSpan timeSpanP = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
ts = Convert.ToInt64(timeSpanP.TotalSeconds).ToString();
signa = GetSigna(app_id, ts);
string progressContent = "";
progressContent = "app_id=" + app_id + "&signa=" + signa + "&ts=" + ts + "&task_id=" + progressTaskID;
while (progressResult != 9 && progressResult != -1 && timeCount != 6)
//while (progressResult != 9 && progressResult != -1)
{
string postProgressResult = "";
while (postProgressResult == "")
{
postProgressResult = HttpPost(progressUrl, progressContent, "application/x-www-form-urlencoded; charset=UTF-8");
}
JObject getProgressResult = (JObject)JsonConvert.DeserializeObject(postProgressResult);
if (Convert.ToInt32(getProgressResult["ok"]) == 0)
{
string progressResultData = "";
progressResultData = getProgressResult["data"].ToString();
JObject getStatus = (JObject)JsonConvert.DeserializeObject(progressResultData);
progressResult = Convert.ToInt32(getStatus["status"]);
if (progressResult != 9)
{
timeCount ++;
Thread.Sleep(30000);
}
}
else
{
progressResult = -1;
}
}
if (progressResult == 9)
{
GetResultHandle(progressTaskID);
} else
{
errorInfo += "进程失败";
}
}
private string GetResultHandle(string resultTaskID)
{
string ts = "";
string signa = "";
string translateResult = "";
TimeSpan timeSpanG = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
ts = Convert.ToInt64(timeSpanG.TotalSeconds).ToString();
signa = GetSigna(app_id, ts);
string resultContent = "";
resultContent = "app_id=" + app_id + "&signa=" + signa + "&ts=" + ts + "&task_id=" + resultTaskID;
while (translateResult == "")
{
translateResult = HttpPost(resultUrl, resultContent, "application/x-www-form-urlencoded; charset=UTF-8");
}
JObject getTranslateResult = (JObject)JsonConvert.DeserializeObject(translateResult);
if (Convert.ToInt32(getTranslateResult["ok"]) == 0)
{
string translateResultData = getTranslateResult["data"].ToString();
JArray array = JArray.Parse(translateResultData);
finalResult = array[0]["onebest"].ToString();
} else
{
errorInfo += "结果失败";
}
return finalResult;
}
private string HttpPostMulti(string url, byte[] body, string fileName, Dictionary<string, string> headers = null, string contentType = null, int timeout = 60, Encoding encoding = null)
{
string result = string.Empty;
HttpWebRequest request = null;
HttpWebResponse response = null;
Stream requestStream = null;
Stream responseStream = null;
try
{
request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Timeout = -1;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "POST";
//对发送的数据不使用缓存【重要、关键】
request.AllowWriteStreamBuffering = false;
request.SendChunked = true;//支持分块上传
string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
//请求头部信息
StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"content\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName));
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());
//request.AddRange(body.Length);
requestStream = request.GetRequestStream();
requestStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
requestStream.Write(body, 0, body.Length);
requestStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
response = (HttpWebResponse)request.GetResponse();
responseStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
result = streamReader.ReadToEnd();//返回信息
streamReader.Close();
streamReader.Dispose();
requestStream.Dispose();
responseStream.Close();
responseStream.Dispose();
}
catch (Exception ex)
{
return "";
}
finally
{
//Dispose(request, response, requestStream, responseStream);
}
return result;
}
private byte[] fileTobyte(string filePath)
{
byte[] buffer;
using (FileStream fs = File.OpenRead(filePath))
{
buffer = new byte[fs.Length];
byte[] b = new byte[1024];
//UTF8Encoding temp = new UTF8Encoding(true);
int i = 0;
while (fs.Read(b, 0, b.Length) > 0)
{
for (int j = 0; j < 1024; j++)
{
if (i * 1024 + j < buffer.Length)
{
buffer[i * 1024 + j] = b[j];
}
}
i++;
}
fs.Close();
fs.Dispose();
}
return buffer;
}
private string HttpPost(string postUrl, string postContent,string postContentType)
{
string result = "";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(postUrl);
req.Method = "POST";
req.ContentType = postContentType;
//#region 添加Post 参数
byte[] data = Encoding.UTF8.GetBytes(postContent);
req.ContentLength = data.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
//#endregion
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
reader.Close();
}
return result;
}
private string GetSigna(string appID, string theTS)
{
return HMACSHA1Text(StandardMD5(appID + theTS), secretkey);
}
private string StandardMD5(String s)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s);
bytes = md5.ComputeHash(bytes);
md5.Clear();
string ret = "";
for (int i = 0; i < bytes.Length; i++)
{
ret += Convert.ToString(bytes[i], 16).PadLeft(2, '0');
}
return ret.PadLeft(32, '0');
}
private string HMACSHA1Text(string text, string key)
{
//HMACSHA1加密
HMACSHA1 hmacsha1 = new HMACSHA1();
hmacsha1.Key = System.Text.Encoding.UTF8.GetBytes(key);
byte[] dataBuffer = System.Text.Encoding.UTF8.GetBytes(text);
byte[] hashBytes = hmacsha1.ComputeHash(dataBuffer);
return Convert.ToBase64String(hashBytes);
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)