C# 调用科大讯飞语音转写接口上传音频文件转文字可直接用
2022/7/13 1:25:48
本文主要是介绍C# 调用科大讯飞语音转写接口上传音频文件转文字可直接用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
namespace ConsoleApp0//科大讯飞语音转写接口调用 { class Program { static string appId = "******"; static string appKey = "*********************";//SecretKey static void Main(string[] args) { var filePath = @"E:\A\OK.wav"; var taskid = YuChuLi(filePath); UploadFile(taskid, filePath); HeBingFile(taskid); Thread.Sleep(1000 * 60 * 2); GetResult(taskid); Console.ReadKey(); } public static string md5Encrypt(string str) { MD5 md5 = MD5.Create(); byte[] buffer = Encoding.UTF8.GetBytes(str);//将字符串转成字节数组 byte[] byteArray = md5.ComputeHash(buffer);//调用加密方法 StringBuilder sb = new StringBuilder(); foreach (byte b in byteArray)//遍历字节数组 { sb.Append(b.ToString("x2"));//将字节数组转成16进制的字符串。X表示16进制,2表示每个16字符占2位 } return sb.ToString(); } public static 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); var enText = new StringBuilder(); foreach (byte iByte in hashBytes) { enText.AppendFormat("{0:x2}", iByte); } return enText.ToString(); } //再次Base64编码 public static string HMACSHA1Text2(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); } public static string ToBase64Str(string Str) { byte[] b = System.Text.Encoding.Default.GetBytes(Str); return Convert.ToBase64String(b); } public static string ToPaeameter(object source) { var buff = new StringBuilder(string.Empty); if (source == null) throw new ArgumentNullException("source", "Unable to convert object to a dictionary. The source object is null."); foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(source)) { object value = property.GetValue(source); if (value != null) { buff.Append(WebUtility.UrlEncode(property.Name) + "=" + WebUtility.UrlEncode(value + "") + "&"); } } return buff.ToString().Trim('&'); } public static string GetSigna() { TimeSpan mTimeSpan = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0); long time = (long)mTimeSpan.TotalSeconds; var baseString = appId + time.ToString(); //MD5加密 var md5Str = md5Encrypt(baseString); var signa = HMACSHA1Text2(md5Str, appKey);//HMACSHA1加密兼base64 return signa; } public static string GetTs() { TimeSpan mTimeSpan = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0); long time = (long)mTimeSpan.TotalSeconds; return time.ToString(); } public static byte[] AuthGetFileData(string fileUrl) { using (FileStream fs = new FileStream(fileUrl, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { byte[] buffur = new byte[fs.Length]; using (BinaryWriter bw = new BinaryWriter(fs)) { bw.Write(buffur); bw.Close(); } return buffur; } } public static string GetFileSize(long filesize) { try { if (filesize < 0) { return "0"; } else if (filesize >= 1024 * 1024 * 1024) //文件大小大于或等于1024MB { return string.Format("{0:0.00} GB", (double)filesize / (1024 * 1024 * 1024)); } else if (filesize >= 1024 * 1024) //文件大小大于或等于1024KB { return string.Format("{0:0.00} MB", (double)filesize / (1024 * 1024)); } else if (filesize >= 1024) //文件大小大于等于1024bytes { return string.Format("{0:0.00} KB", (double)filesize / 1024); } else { return string.Format("{0:0.00} bytes", filesize); } } catch (Exception ex) { throw ex; } } static string YuChuLi(string filePath) { FileInfo t = new FileInfo(filePath); var fileSize = t.Length; var fileName = Path.GetFileName(filePath); var url = @"http://raasr.xfyun.cn/api/prepare"; TimeSpan mTimeSpan = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0); long time = (long)mTimeSpan.TotalSeconds; var baseString = appId + time.ToString(); //MD5加密 var md5Str = md5Encrypt(baseString); var signa = HMACSHA1Text2(md5Str, appKey);//HMACSHA1加密兼base64 var dic = new Dictionary<string, string>(); dic.Add("app_id", $"{appId}"); dic.Add("signa", $"{signa}"); dic.Add("ts", time.ToString()); dic.Add("file_len", $"{fileSize}"); dic.Add("file_name", $"{fileName}"); dic.Add("slice_num", "1"); var result = string.Empty; using (HttpClient client = new HttpClient()) { HttpContent httpContent = new FormUrlEncodedContent(dic); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); httpContent.Headers.ContentType.CharSet = "utf-8"; HttpResponseMessage responseMessage = client.PostAsync(url, httpContent).Result; result = responseMessage.Content.ReadAsStringAsync().Result; } Console.WriteLine(result); var taskId = Regex.Match(result, @"(?<=""data"":"").+?(?="")").ToString(); Console.WriteLine(taskId); return taskId; } public static void UploadFile( string taskId,string filePath) { var fileName = Path.GetFileName(filePath); var uploadUrl = @"https://raasr.xfyun.cn/api/upload"; var signa2 = GetSigna(); var ts2 = GetTs(); using (HttpClient client = new HttpClient()) { var content = new MultipartFormDataContent(); //content.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data"); var sliceId = GetSliceId(); content.Add(new StringContent($"{appId}"), "app_id"); content.Add(new StringContent($"{signa2}"), "signa"); content.Add(new StringContent($"{ts2}"), "ts"); content.Add(new StringContent($"{taskId}"), "task_id"); content.Add(new StringContent($"{sliceId}"), $"slice_id"); FileStream fStream = File.Open(filePath, FileMode.Open, FileAccess.Read); content.Add(new StreamContent(fStream, (int)fStream.Length), "content", fileName); var res = client.PostAsync(uploadUrl, content).GetAwaiter().GetResult().Content.ReadAsStringAsync().Result; Console.WriteLine(res); } } public static void HeBingFile(string taskId) { var url = @"https://raasr.xfyun.cn/api/merge"; var signa = GetSigna(); var ts = GetTs(); var dic = new Dictionary<string, string>(); dic.Add("app_id", $"{appId}"); dic.Add("signa", $"{signa}"); dic.Add("ts", ts.ToString()); dic.Add("task_id", $"{taskId}"); var result = string.Empty; using (HttpClient client = new HttpClient()) { HttpContent httpContent = new FormUrlEncodedContent(dic); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); httpContent.Headers.ContentType.CharSet = "utf-8"; HttpResponseMessage responseMessage = client.PostAsync(url, httpContent).Result; result = responseMessage.Content.ReadAsStringAsync().Result; } Console.WriteLine(result); } public static void GetResult(string taskId) { var url = "https://raasr.xfyun.cn/api/getProgress"; var signa = GetSigna(); var ts = GetTs(); var dic = new Dictionary<string, string>(); dic.Add("app_id", $"{appId}"); dic.Add("signa", $"{signa}"); dic.Add("ts", ts.ToString()); dic.Add("task_id", $"{taskId}"); var result = string.Empty; using (HttpClient client = new HttpClient()) { HttpContent httpContent = new FormUrlEncodedContent(dic); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); httpContent.Headers.ContentType.CharSet = "utf-8"; HttpResponseMessage responseMessage = client.PostAsync(url, httpContent).Result; result = responseMessage.Content.ReadAsStringAsync().Result; } Console.WriteLine(result); } public static string GetSliceId() { string sliceId = "aaaaaaaaa`"; char[] ch = sliceId.ToCharArray(); for (int i = 0, j = sliceId.Length - 1; i < sliceId.Length && j >= 0; i++) { if (ch[j] != 'z') { ch[j]++; break; } else { ch[j] = 'a'; j--; continue; } } return new String(ch); } } }
这篇关于C# 调用科大讯飞语音转写接口上传音频文件转文字可直接用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#