@[TOC](Unity3d C#实现语音合成(TTS)试听并选择路径保存下载功能(含源码))

前言

计划实现语音的合成功能,将文字转语音,支持试听和保存功能,经过一段时间的研究,发现搜狗可以使用,用100–200万字的免费额度:

决定就对接搜狗接口完成这些功能。

效果:

准备工作

可以直接参考官方指南:https://ai.sogou.com/doc/?url=/docs/content/overview/guides/

注册账号

前往搜狗开发平台(https://ai.sogou.com/)自行操作,操作完成登录后,有个控制台按钮点击进入:

下载LitJson

这个网上有很多,主要用于传参和数据解析,自行下载吧。

##获取appid和key
操作步骤:
新建应用 > 填写名称>填写描述>勾选语音合成>勾选同意协议> 创建应用

这样就获得了appid和key,复制了备用。

实现功能

在上一步中我们获得了“appid” 和“appkey”,在脚本初始化的时候,将它记录下来:

    /*----------------------------------------||||                                        ||||       此处填写 appid appkey             ||  ||                                        || ||----------------------------------------*/string appid = "";string appkey = "";

这一步请自行申请填入。

认证与鉴权

这个过程就是获取令牌的过程,代码如下:

 void GetToken() {string url = "https://api.zhiyin.sogou.com/apis/auth/v1/create_token";JsonData ReqParam = new JsonData();ReqParam["appid"] = appid;ReqParam["appkey"] = appkey;ReqParam["exp"] = "3600s";byte[] postBytes = System.Text.Encoding.Default.GetBytes(ReqParam.ToJson());StartCoroutine(DoPost(url, postBytes, GetTokenDone));}void GetTokenDone(string str){try{JsonData data = JsonMapper.ToObject(str);token = data["token"].ToString();endDate =DateTime.Parse(data["end_time"].ToString());TTS();Debug.Log("Get Token:" + token);}catch (Exception e){Debug.LogWarning("GetToken调用异常:" + e);;}}

在获取到令牌后,将其记录,还有个是有效时间(endDate),在超过有效时间后,需要重新获取令牌。

语音合成

根据选择的声音,调用语音合成接口,将输入的文字和转化的声音以及其它参数传入,即完成了语音合成的请求。

如下是根据官网给的音色列表以及每种音色所支持的语言预定义的参数,用于展示声音选项和传递的参数:

 List<string> titles = new List<string> { "康哥(中)", "晶晶(中)", "阿华(中)", "婉清(中)","夕月(中)" , "阿星(中)", "青峰(中)", "若曦(中)", "梦暄(中)", "思思(中)", "帅帅(中)", "宝哥(中)", "婉贞(中)", "小玉(中)", "文雅(中)", "翠萍(中)","强仔(中)", "宛如(中)", "小赵(中)", "燕燕(中)", "小智(中)", "婉婷(中)", "瑶瑶(中)","男声(英)", "女声(中英日韩)", "杰克(英)", "丽莉(英)"};List<string> Values = new List<string>{"kangge", "jingjing", "ahua", "wanqing","xiyue" , "axing", "qingfeng", "xf5","mengxuan", "sisi", "shuaishuai", "shanxi_male","sichuan_female", "henan_female", "hubei_female", "dongbei_female","guangpu_male", "taipu_female", "zhao", "yanyan","xiaozhi", "wanting", "yaoyao","male","female", "jack", "lily"};

核心的请求代码:

    void TTS() {if (string.IsNullOrEmpty(Ipt.text)) {Debug.LogError("输入内容不能为空!");return; }string url = "https://api.zhiyin.sogou.com/apis/tts/v1/synthesize";JsonData ReqParam = new JsonData();ReqParam["input"] = new JsonData();ReqParam["input"]["text"] = Ipt.text;ReqParam["config"] = new JsonData();ReqParam["config"]["audio_config"] = new JsonData();ReqParam["config"]["voice_config"] = new JsonData();ReqParam["config"]["audio_config"]["audio_encoding"] = "MP3";ReqParam["config"]["audio_config"]["pitch"] = 1;ReqParam["config"]["audio_config"]["volume"] = 1;ReqParam["config"]["audio_config"]["speaking_rate"] = 1;ReqParam["config"]["voice_config"]["language_code"] = "zh-cmn-Hans-CN";ReqParam["config"]["voice_config"]["speaker"] = Values[VoiceSel.value]+ "-pro";//"male";byte[] postBytes = System.Text.Encoding.Default.GetBytes(ReqParam.ToJson());StartCoroutine(DoTTSPost(url, postBytes, TTSDone));}void TTSDone(byte[] bytes) {try{//Debug.Log("返回音频:" + str);VoiceBytes = bytes;//ac.clip = GetAudioClipByBytes(bytes);File.WriteAllBytes(VoiceUrl, bytes);StartCoroutine(DoVioceClip());OptBtns.SetActive(true);}catch (Exception e){Debug.LogWarning("GetToken调用异常:" + e); ;}}

官方推荐是声音参数增加"-pro",欢迎用户使用新版音色代码(增加-pro),新版音色大幅提升音效质量和自然度。同时,原音色代码(未加-pro)仍可使用。

选择路劲保存

大致思路就是根据选择的路劲写入字节数组:

 File.WriteAllBytes(path, VoiceBytes);

可以参照之前的文章:选择路径保存功能

试听功能

这个在做研究的时候也写过一个文章:
Unity3d C# 实现mp3的字节数组byte[] 转AudioClip并播放(含源码)

项目源码

https://download.csdn.net/download/qq_33789001/18239880

Unity3d C#实现语音合成(TTS)试听并选择路径保存下载功能(含源码)相关推荐

  1. Unity3d C# 实现纯鼠标平滑控制场景摄像头(相机)实现自由旋转、移动和围绕节点移动旋转等功能(含源码工程)

    相机控制 前言 效果 漫游效果 围绕节点效果 实现过程 功能范围 搭建场景 编码实现 变量设置 自由漫游 观察节点 功能使用 项目工程 瑕疵 前言 在很多情况下我们都会用到如题的功能,在一般情况下我们 ...

  2. JavaScript实现SelectionSort选择排序算法(附完整源码)

    JavaScript实现SelectionSort选择排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 SelectionSort.js完整源代码 Compara ...

  3. Unity3d中使用百度语音识别及语音合成【含源码】

    本文首发于"洪流学堂"公众号. 洪流学堂,让你快人几步!你好,我是你的技术探路者郑洪智,你可以叫我大智(vx: zhz11235). 源码地址 https://github.com ...

  4. C语言Selection Sort选择排序的算法(附完整源码)

    C语言Selection Sort选择排序的算法 C语言Selection Sort选择排序的算法完整源码(定义,实现) C语言Selection Sort选择排序的算法完整源码(定义,实现) #if ...

  5. 【Unity3D】Unity3D开发《我的世界》之六、创建地形(视频 + 源码)

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_06.html 一.引入LibNoise 虽然Unity3D里也有一个Mathf.P ...

  6. Unity3d C# 开发微信小游戏分享图片、朋友圈等功能实现(含源码)

    广告 通过一段时间的基于minigame-unity-webgl-transform插件的开发,算是稍微完整的一小个游戏已经制作完成,具体大家可以扫码体验一下: 感谢支持!! 前言 之前编写了一篇u3 ...

  7. Unity3d 微信小程序(小游戏)项目实现流量主接入功能(含源码)

    前言 很早之前编写了Unity导出微信小游戏的博客,也尝试自己做了个Demo上线了,基本没更新过,不过几个月的时间,用户超过了一千,可以开通流量主了,大概率是因为上篇的帖子浏览量大了,扫码体验的人多, ...

  8. Unity3d C#通过使用大华SDK控制大华摄像头旋转、变焦等云台操作和预置点等控制操作(含源码)

    前言 本文的内容和在之前我写过Unity3d C# 接入海康威视摄像头SDK实现接口控制功能(如:控制云台)的文章基本类似,同样是通过官网提供的SDK进行开发,只不过针对的设备不同,和部分实现细节不同 ...

  9. Unity3d C#利用材质(Material)贴图的偏移实现2D游戏单背景图无限移动背景效果功能(含源码)

    前言 2D的游戏背景基本是一张图,前后可以无缝拼接的那种,无限的背景滚动的效果,可以通过多张的图拼接起来,随着相机移动动态的创建/移位背景图可以实现,不过,本文介绍的方法是使用单张Sprite实现,具 ...

  10. SwiftUI 文字转语音TTS 开发朗读器 AVSpeechSynthesizer(教程含源码)

    实战需求 SwiftUI 文字转语音TTS 开发朗读器 本文价值与收获 看完本文后,您将能够作出下面的界面 看完本文您将掌握的技能 AVFoundation AVSpeechSynthesizer A ...

最新文章

  1. java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor错误
  2. PHP----------php封装的一些简单实用的方法汇总
  3. 兰州大学的《致谢》火了:“我从来不曾优秀过,也从来不曾放弃过!”
  4. 对象是空的吗? [重复]
  5. 揭秘又拍云凭啥做到两年估值超10亿?
  6. 无法连接到已配置的开发web服务器_你知道多少种服务器?这三种服务器你都认识吗?...
  7. 小工匠聊架构-超高并发秒杀系统设计 03_热点数据的处理
  8. Linux下mknod的作用,Linux系统mknod命令用法
  9. LeetCode 01【两数之和】【LeetCode人生第一题!】
  10. 12月中国域名服务商Top20市场份额解析(图)
  11. 软件工程中的所有内聚类型【吐血整理,附带排名!】
  12. 【探秘ES6】系列专栏(二):迭代器和for-of循环
  13. RANSAC算法的简单理解
  14. Centos7.x 安装 CDH 6.x
  15. java 输入16进制_尝试使用十六进制输入来使用小端和大端
  16. 02(d)多元无约束优化问题-拟牛顿法
  17. 如何对ado.net做比较好的封装?
  18. wps ppt 如何批量换背景
  19. 说说“安规”的那些事儿
  20. 服务器被入侵了,怎么防范服务器被黑客入侵情况

热门文章

  1. 为图片添加LOMO效果
  2. SQLiteHelper帮助类
  3. 【Openbravo开发】Openbravo windows开发环境搭建
  4. 7、核心芯片说明文档
  5. 我的世界服务器信息显示等级,我的世界空岛服务器怎么查方块等级 | 手游网游页游攻略大全...
  6. 我的网名--荡涤心灵
  7. [TopCoder] SRM 587 DIV 2, 250p, 500p, 1000p, Solution
  8. 采样频率变化时,滤波器的性能会变差吗?
  9. 您未被授权查看该页 的解决办法。
  10. 学计算机的怎么防辐射,一种学生用防辐射计算机的制作方法