转自洪流学堂
语音转文字
1.打开麦克风记录

_clipRecord = Microphone.Start(null, false, 30, 16000);

2.将Unity的AudioClip数据转化为PCM格式16bit数据

/// <summary>/// 将Unity的AudioClip数据转化为PCM格式16bit数据/// </summary>/// <param name="clip"></param>/// <returns></returns>public static byte[] ConvertAudioClipToPCM16(AudioClip clip){var samples = new float[clip.samples * clip.channels];clip.GetData(samples, 0);var samples_int16 = new short[samples.Length];for (var index = 0; index < samples.Length; index++){var f = samples[index];samples_int16[index] = (short) (f * short.MaxValue);}var byteArray = new byte[samples_int16.Length * 2];Buffer.BlockCopy(samples_int16, 0, byteArray, 0, byteArray.Length);return byteArray;}

3.将字节流上传到百度语音uri,得到转换后的文本

 public IEnumerator Recognize(byte[] data, Action<AsrResponse> callback){yield return PreAction ();if (tokenFetchStatus == Base.TokenFetchStatus.Failed) {Debug.LogError("Token fetched failed, please check your APIKey and SecretKey");yield break;}var uri = string.Format("{0}?lan=zh&cuid={1}&token={2}", UrlAsr, SystemInfo.deviceUniqueIdentifier, Token);var form = new WWWForm();form.AddBinaryData("audio", data);var www = UnityWebRequest.Post(uri, form);www.SetRequestHeader("Content-Type", "audio/pcm;rate=16000");yield return www.SendWebRequest();if (string.IsNullOrEmpty(www.error)){Debug.Log(www.downloadHandler.text);callback(JsonUtility.FromJson<AsrResponse>(www.downloadHandler.text));}elseDebug.LogError(www.error);}

文字转语音
1.文本上传百度语音uri,得到字节流

 public IEnumerator Synthesis(string text, Action<TtsResponse> callback, int speed = 5, int pit = 5, int vol = 5,Pronouncer per = Pronouncer.Female){yield return PreAction();if (tokenFetchStatus == Base.TokenFetchStatus.Failed){Debug.LogError("Token was fetched failed. Please check your APIKey and SecretKey");callback(new TtsResponse(){err_no = -1,err_msg = "Token was fetched failed. Please check your APIKey and SecretKey"});yield break;}var param = new Dictionary<string, string>();param.Add("tex", text);param.Add("tok", Token);param.Add("cuid", SystemInfo.deviceUniqueIdentifier);param.Add("ctp", "1");param.Add("lan", "zh");param.Add("spd", Mathf.Clamp(speed, 0, 9).ToString());param.Add("pit", Mathf.Clamp(pit, 0, 9).ToString());param.Add("vol", Mathf.Clamp(vol, 0, 15).ToString());param.Add("per", ((int) per).ToString());string url = UrlTts;int i = 0;foreach (var p in param){url += i != 0 ? "&" : "?";url += p.Key + "=" + p.Value;i++;}#if UNITY_STANDALONE || UNITY_EDITOR || UNITY_UWPvar www = UnityWebRequest.Get(url);
#elsevar www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.MPEG);
#endifDebug.Log(www.url);yield return www.SendWebRequest();if (string.IsNullOrEmpty(www.error)){var type = www.GetResponseHeader("Content-Type");Debug.Log("response type: " + type);if (type == "audio/mp3"){
#if UNITY_STANDALONE || UNITY_EDITOR || UNITY_UWPvar clip = GetAudioClipFromMP3ByteArray(www.downloadHandler.data);var response = new TtsResponse {clip = clip};
#elsevar response = new TtsResponse {clip = DownloadHandlerAudioClip.GetContent(www) };
#endifcallback(response);}else{Debug.LogError(www.downloadHandler.text);callback(JsonUtility.FromJson<TtsResponse>(www.downloadHandler.text));}}elseDebug.LogError(www.error);}

2.字节流转化为AudioClip播放

private AudioClip GetAudioClipFromMP3ByteArray(byte[] mp3Data){var mp3MemoryStream = new MemoryStream(mp3Data);MP3Sharp.MP3Stream mp3Stream = new MP3Sharp.MP3Stream(mp3MemoryStream);//Get the converted stream dataMemoryStream convertedAudioStream = new MemoryStream();byte[] buffer = new byte[2048];int bytesReturned = -1;int totalBytesReturned = 0;while (bytesReturned != 0){bytesReturned = mp3Stream.Read(buffer, 0, buffer.Length);convertedAudioStream.Write(buffer, 0, bytesReturned);totalBytesReturned += bytesReturned;}Debug.Log("MP3 file has " + mp3Stream.ChannelCount + " channels with a frequency of " +mp3Stream.Frequency);byte[] convertedAudioData = convertedAudioStream.ToArray();//bug of mp3sharp that audio with 1 channel has right channel data, to skip thembyte[] data = new byte[convertedAudioData.Length / 2];for (int i = 0; i < data.Length; i += 2){data[i] = convertedAudioData[2 * i];data[i + 1] = convertedAudioData[2 * i + 1];}Wav wav = new Wav(data, mp3Stream.ChannelCount, mp3Stream.Frequency);AudioClip audioClip = AudioClip.Create("testSound", wav.SampleCount, 1, wav.Frequency, false);audioClip.SetData(wav.LeftChannel, 0);return audioClip;}

unity3d:百度语音在线语音转文字,文字转语音,跨平台相关推荐

  1. android通过百度语音合成实现文字转换成语音(TTS)详细教程?

    android实现百度语音合成 1.使用TextToSpeech朗读文字 2.百度语音合成 1.创建应用 1.在百度开发者平台实现注册,并进行实名认证 2.点击语音技术 3.点击创建应用 4.创建细节 ...

  2. 这三个方法让你实现文字转语音在线转换

    大家平时在逛街的时候,是否会听到商场或者店铺正在播放着一些商品促销的声音呢?这些声音有激情澎湃的:有温柔清晰的,能够很好的吸引顾客购买,不过这些声音其实都不是店家自己录制的,而是通过利用一些软件工具将 ...

  3. 文字转语音在线转换方法

    将文字在线转语音的方法有很多种,大部分的文字是放在TXT文本中保存着,那么需要在线将文字转成语音有哪些基本的操作步骤呢?下面简单给大家介绍一下. 步骤一:文字转语音的方法很简单我们需要在线进行操作,直 ...

  4. 在线文字转成语音怎么转

    很多小伙伴在办公或学习中,经常或需要浏览大量资料.随着时间越来越长,我们的眼睛就会多度疲劳.为了不戴上眼镜,我们只能改变当前的方式,也就是把文字变成语音去听,而不是去看.那么就有小伙伴想问了在线文字转 ...

  5. PHP文字转语音排号声音_文字转语音真人发声在线怎么转换?这种操作最简单

    文字转语音真人发声在线怎么转换?我们在学习和生活中经常会需要给视频进行配音,但你可能会存在担心自己的声音不够好听,或者是不想暴露自己原有声音.下面笔者就来给大家安利一款非常不错的工具-文字转语音助手, ...

  6. 语音计算机在线使用方法,一分钟就能把文字转换成语音,使用电脑这个软件很简单...

    一分钟就能把文字转换成语音,使用电脑这个软件很简 单 有的时候,我们眼睛太酸不想看文字时,就想用耳朵听,现在越 来越多的人们都喜欢听电台故事,可是我们的文件是没有声音的,怎 么才能把文字也转换成语音呢 ...

  7. 李彦宏:未来五年语音图片搜索将超过文字

    李彦宏:未来五年语音图片搜索将超过文字(转) 新浪科技讯 9月3日上午消息,2014年百度(217.96, -2.06, -0.94%)世界大会在京举行.本届大会主题为拥抱移动时代,打造人与服务连接的 ...

  8. 跨平台Android和IOS百度语音在线识别原生插件

    一.插件推荐 跨平台Office文档.图片在线预览,视频播放原生插件 Android和IOS图片在线预览,视频播放原生插件 跨平台Android和IOS百度OCR文字识别.证卡识别.票据识别原生插件 ...

  9. 基于springboot+h5+websocket的即时通讯客服系统和百度实时语音转译(语音在线识别)

    本文章由本人原创 下载链接:https://download.csdn.net/download/u014191624/51948075 这是一个基于springboot+h5+websocket的即 ...

  10. Python 神工具包!翻译、文字识别、语音转文字统统搞定

    今天给大家介绍一款 Python 制作的实用工具包,包含多种功能: 音频转文字 文字转语音 截图 OCR文字识别 复制翻译 举个例子,比如截图 OCR 文字识别就有很多实用场景. 常会遇到有些 PDF ...

最新文章

  1. 理解mipi协议【转】
  2. Python----Day1
  3. hadoop 集群配置
  4. 在游戏运营行业,Serverless 如何解决数据采集分析痛点?
  5. [云炬创业管理笔记]第一章测试3
  6. html页面加载转圈,纯CSS实现加载转圈样式
  7. ubuntu20.04LTS系统的终端terminal透明化设置
  8. 2017模拟赛:还款计算
  9. LeetCode 1776. 车队 II(单调栈)
  10. MySQL笔记-简单配置主从库
  11. 商业计划书范文3000_凤城编写商业计划书范文模板格式
  12. linux怎么用jconsole_怎么在linux jconsole
  13. @永和:为自己编码 --- 开源中国众包平台上线
  14. android als传感器,环境光传感器(ALS)背光控制解决方案
  15. 5000的游戏电脑计算机配置,5000元电脑配置单,5000游戏电脑配置,直播电脑配置
  16. ZStack--级联框架
  17. 特写 | CVPR十年轶事:走出象牙塔
  18. Poj 2965 The Pilots Brothers‘ refrigerator
  19. 图神经网络(五):GAT
  20. 多因素身份认证 (MFA) 插件:手机验证码认证因素配置流程

热门文章

  1. PyQt 记住上次打开路径
  2. educoder/python第1关:学习-Python集合之应用一
  3. 6 个设计准则让图表焕然一新,数据可视化并不难!
  4. 京东股权众筹投后总结和反思
  5. GPS周和周内秒转公历时间 以及 公历时间转GPS周和周内秒 (python版)
  6. 现代服务器底层奠基(SEDA+Reactor/Proactor+epoll/kqueue )
  7. 猿创征文|浅谈区块链-区块链是什么?
  8. C/C++中的exit()函数
  9. suricata smtp协议解析源码注释一
  10. linux下载大文件失败,Linux下FTP/SFTP传输大文件总是失败的处理办法