准备

  1. 接口文档
  2. 注册科大讯飞账户,获取语音转写的appidsecretkey

示例

  1. StreamingAssets中放置一个中文音频
  2. 先上传语音,再获取转写文本。
  3. 上传语音成功,可获取orderId
  4. 使用orderId获取对应语音转写文本
  5. 返回值解析重写多个类的ToString方法,拼接转写文本

返回值解析

[System.Serializable]
public class Respone
{public string code;public string descInfo;public ResponeUpload content;public override string ToString(){if (content == null)return null;elsereturn content.ToString();}}
[System.Serializable]
public class ResponeUpload
{public string orderId;public int taskEstimateTime;public override string ToString(){return orderId;}
}[System.Serializable]
public class Result
{public string code;public string descInfo;public Content content;
}[System.Serializable]
public class Content
{public OrderInfo orderInfo;public string orderResult;public int taskEstimateTime;
}[System.Serializable]
public class OrderInfo
{public string orderId;public int failType;public int status;public long originalDuration;public long realDuration;
}[System.Serializable]
public class Res
{public List<Lattice> lattice;public List<Lattice2> lattice2;public override string ToString(){string str = null;var length = lattice2?.Count;for (int i = 0; i < length; i++){str += lattice2[i].ToString();}return str;}
}[System.Serializable]
public class Lattice
{public string json_1best;
}[System.Serializable]
public class Lattice2
{public string lid;public string end;public string begin;public string spk;public Json_1best json_1best;public override string ToString(){return json_1best.ToString();}
}[System.Serializable]
public class Json_1best
{public ST st;public override string ToString(){return st.ToString();}
}[System.Serializable]
public class ST
{public string sc;public string pa;public string pt;public string bg;public string si;public string rl;public string ed;public List<RT> rt;public override string ToString(){string str = null;var length = rt?.Count;for (int i = 0; i < length; i++){str += rt[i].ToString();}return str;}
}[System.Serializable]
public class RT
{public string nb;public string nc;public List<Ws> ws;public override string ToString(){string str = null;var length = ws?.Count;for (int i = 0; i < length; i++){str += ws[i].ToString();}return str;}
}[System.Serializable]
public class Ws
{public int wb;public int we;public List<CW> cw;public override string ToString(){string str = null;var length = cw?.Count;for (int i = 0; i < length; i++){str += cw[i].ToString();}return str;}
}[System.Serializable]
public class CW
{public string w;public string wp;public string wc;public override string ToString(){return w;}
}

上传语音,获取转写文本

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using System.IO;
using System.Security.Cryptography;
using System;
using System.Text;
using System.Collections.Generic;public class AudioToText : MonoBehaviour
{string testFilePath = Application.streamingAssetsPath + "/合成音频.wav";string appid ;string secretkey;string orderId;//上传语音后获取的订单idstring info;//转写的内容string message = "语音转写";IEnumerator UploadAudio(){string url = "http://raasr.xfyun.cn/v2/api/upload";byte[] data = File.ReadAllBytes(testFilePath);var ts = DateTimeToTimestamp().ToString();url = url + "?" +"appId=" + appid +"&signa=" + Signa(appid, ts) +"&ts=" + ts +"&fileSize=" + data.Length +"&fileName=" + "合成音频.wav" +"&duration=" + 200;using (var req = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST)){req.timeout = 60;req.downloadHandler = new DownloadHandlerBuffer();req.uploadHandler = new UploadHandlerRaw(data);req.SetRequestHeader("Content-Type", "application/octet-stream");message = "上传中...";yield return req.SendWebRequest();if (req.result == UnityWebRequest.Result.Success){var info = JsonUtility.FromJson<Respone>(req.downloadHandler.text);orderId = info.ToString();message = "请求结束,语音上传:" + (string.IsNullOrEmpty(orderId) == true ? "失败" : "成功");}else{message = "请求结束,失败原因:" + req.error;}}}IEnumerator Result(){string url = "https://raasr.xfyun.cn/v2/api/getResult";var ts = DateTimeToTimestamp().ToString();List<IMultipartFormSection> list = new List<IMultipartFormSection>();list.Add(new MultipartFormDataSection("appId", appid));list.Add(new MultipartFormDataSection("ts", ts));list.Add(new MultipartFormDataSection("signa", Signa(appid, ts)));list.Add(new MultipartFormDataSection("duration", "200"));list.Add(new MultipartFormDataSection("orderId", orderId));using (var req = UnityWebRequest.Post(url, list)){message = "获取转写文本中...";yield return req.SendWebRequest();if (req.result == UnityWebRequest.Result.Success){var txt = req.downloadHandler.text;var res = JsonUtility.FromJson<Result>(txt);if (res != null){if (!string.IsNullOrEmpty(res.content.orderResult))info = JsonUtility.FromJson<Res>(res.content.orderResult).ToString();}message = "请求结束,获取文本信息:" + (string.IsNullOrEmpty(info) == true ? "失败" : "成功");}else{message = "请求结束,失败原因:" + req.error;}}}string Signa(string appid, string ts){StringBuilder result = new StringBuilder();string baseString = appid + ts;using (MD5 md5 = MD5.Create()){var bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(baseString));for (int i = 0; i < bytes.Length; i++){result.Append(bytes[i].ToString("x2"));}}using (HMACSHA1 mac = new HMACSHA1(Encoding.UTF8.GetBytes(secretkey))){var bytes = mac.ComputeHash(Encoding.UTF8.GetBytes(result.ToString()));return Convert.ToBase64String(bytes);}}public static long DateTimeToTimestamp(){DateTime dd = new DateTime(1970, 1, 1, 0, 0, 0, 0);DateTime timeUTC = DateTime.UtcNow;TimeSpan ts = (timeUTC - dd);return (long)ts.TotalMilliseconds;}private void OnGUI(){GUILayout.Label(message);if (string.IsNullOrEmpty(orderId)){if (GUILayout.Button("上传中文音频")){StartCoroutine(UploadAudio());}}else{if (GUILayout.Button("获取转写文本")){StartCoroutine(Result());}}if (!string.IsNullOrEmpty(info)){GUILayout.Label(info);}}}

Unity使用科大讯飞-语音转写接口相关推荐

  1. 通过科大讯飞实时转写接口了解音频数据采集

    通过科大讯飞实时转写接口了解音频数据采集 音频采集相关术语 采样率(sample rate) 音频采样率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然 采样位数(sa ...

  2. C# /.NET6 实现语音转文字(科大讯飞语音转文字接口)

    依赖包 <PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version ...

  3. 语音转写基于科大讯飞WebApi接口的安卓实现--上传录音音频翻译成文字

    一.目的与实现过程 1.目的:将.wav/.mp3音频文件翻译成文字 2.方式:基于科大讯飞语音转写 WebApi的安卓实现 3.机制:采用自定义计时器轮询. 4.坑点1:科大讯飞当前暂无安卓文档/代 ...

  4. AI赋能日常生活:讯飞语音转写在会议、采编、上课等场景中的应用

    人工智能在日常生活中的应用已经非常广泛了.除了ChatGPT这种对话生成式AI,语音转文字技术也可以在很多场景中派上用场.比如,奔波于各种会议之间的打工人.经常采访的媒体从业者以及要上网课的学生们,每 ...

  5. Unity 讯飞实时语音转写(二)—— 接收转写结果

    目录 Unity 讯飞实时语音转写(一)-- 使用WebSocket连接讯飞语音服务器 Unity 讯飞实时语音转写(二)-- 接收转写结果 Unity 讯飞实时语音转写(三)-- 分析转写结果 正文 ...

  6. 微信小程序+.NET(六) 科大讯飞语音接口-tts语音生成

      科大讯飞语音接口-tts语音生成   Demo下载链接:https://download.csdn.net/download/jinglell/11566459 语音生成是另一个难点,我的应用场景 ...

  7. python分割语音端点检测_python的webrtc库如何实现语音端点检测 科大讯飞输入法PC体验版下载:语音+手写+...

    python的webrtc库如何实现语音端点检测 科大讯飞输入法PC体验版下载:语音+手写+ 2018-03-05 出处:网络 整理:zhishizhan.net 延伸:科大讯飞输入法PC体验版下载: ...

  8. 微信小程序+.NET(四) 科大讯飞语音接口-iat语音听写

      科大讯飞语音接口-iat语音听写   Demo下载链接:https://download.csdn.net/download/jinglell/11566402   首先,来看科大讯飞给的msc. ...

  9. 科大讯飞语音无限制录音、识别功能的实现:Android studio(一)

    最近想要做一款语音听写APP,在网上搜索关于如何使用科大讯飞语音的Demo少之又少,又或者是只是单纯的按照文档来实现简单的语音听写,远远不能满足需求,看了几天的文档和自己搜索的一些资料,还有这几天中遇 ...

最新文章

  1. 三层架构,Struts2,SpringMVC实现原理图
  2. java上转型对象特点_Java 浅析三大特性之一继承
  3. dubbo接口demo开发
  4. 计算机保研-中科大计算机
  5. oracle切换实例启动,3.1 Oracle体系结构之实例启动与关闭
  6. 2020年的工程咨询将如何影响建设工程?
  7. VC++ 应用程序无法正常启动0xc0150002
  8. 大学生自己做网站如何赚钱
  9. Python笔记17-Dma指标算法
  10. java.net.ServerSocket详解
  11. mysql数据库的基本操作语句
  12. 硕盟 HDMI转VGA 笔记本台式主机HDMI转VGA显示器转接头
  13. 知识分享 | Oracle的官方ACE是个啥 and如何搞定一个ACE!
  14. Cisco路由器重置enable密码步骤
  15. 郝夫曼(Huffman)树及其应用
  16. “联通云”正式浮出水面 要讲出云计算怎样的“新故事”?
  17. IIS三种应用程序池回收方法(保姆级教程)
  18. java毕业设计的创意项目众筹平台的设计与开发mybatis+源码+调试部署+系统+数据库+lw
  19. xubuntu16.04关闭系统错误提示
  20. poj1144 求割点模板

热门文章

  1. Helm系列-helm chart实战(一)
  2. 如何理解人工智能、机器学习和深度学习
  3. 2020 树酱的那点事
  4. ios老版本通过autoresizing简单适配iphone5
  5. lua语言xml的解析
  6. Android setbackgroundcolor(color.red)color显示找不到符号 符号: 变量 Color
  7. 2023年中职组“网络安全”赛项南昌市竞赛任务书
  8. 【云原生 | 18】容器的四种网络模式
  9. java网络文章博客抓取系统_java 后端博客系统文章系统——No6
  10. 使用脚本生成jtl报告报错解决方法