1.【专栏精选】实战:百度语音合成
2.最小的声音声音语音合成软件代码解析-SAM
【专栏精选】实战:百度语音合成
本文节选自大话Unity公众号技术专栏《大话Unity》,未经允许不可转载。合成合成
大话Unity公众号回复语音识别获取源码工程。源码源码用
大话Unity,声音声音让你快人几步。合成合成你好,源码源码用莎莎源码账号我是声音声音大智。
大智:“昨天我们实战了语音识别,合成合成在人工智能的源码源码用语音领域,还有很大一块是声音声音语音合成,也就是合成合成Text to Speech,文字转语音。源码源码用” 小新:“是声音声音不是就是我们经常听到的siri或者智能音箱那种声音?” 大智:“没错,那些声音都是合成合成modbus 主机源码用语音合成的技术合成音频文件,然后播放出来的源码源码用。” 小新:“我们今天就来搞这个?” 大智:“对,这就开始”
首先做些准备工作,和昨天的语音识别的流程很像,大致如下:
语音识别
大智:“看完文档了没?” 小新:“看完了” 大智:“那我们就开始了。”
语音合成主要有两个过程:1. 鉴权认证:从百度获取一个令牌(token),请求的时候需要携带这个令牌,否则视为非法请求;2. 在Unity中请求语音合成接口。
第一步鉴权认证我们昨天已经实现了,可以拿来直接用。我们直接进入第二步,在Unity中请求语音合成接口。
REST API
小新:“我在文档中看到了这个词REST API,珠宝app源码API我懂,就是应用程序接口嘛,这个REST是什么?休息接口么?” 大智:“哎嘿,什么休息接口!这个是Web开发中的一个技术,你不懂正常,我来简单解释一下。”
REST ( REpresentational State Transfer ),State Transfer 为 "状态传输" 或 "状态转移 ",Representational 中文有人翻译为"表征"、"具象",合起来就是 "表征状态传输" 或 "具象状态传输" 或 "表述性状态转移",不过,iapp源码免费一般文章或技术文件都比较不会使用翻译后的中文来撰写,而是直接引用 REST 或 RESTful 来代表,因为 REST 一整个观念,想要只用六个中文字来完整表达真有难度。
REST 本身是设计风格而不是标准。REST 谈论一件非常重要的事,如何正确地使用Web*标准*,例如,HTTP 和 URI。想要了解 REST 最好的方式就是思索与了解*Web*及其工作方式。如果你设计的应用程序能符合 REST 原则 (REST principles),这些符合 REST 原则的 REST 服务可称为 "RESTful web service" 也称 "RESTful Web API"。"-ful" 字尾强调它们的face js源码设计完全符合 REST 论文里的建议内容。
如果你不需要做Web开发,了解到这就够了,否则建议你了解下REST的具体原则,RESTful的Web接口目前非常流程。
请求语音合成
百度语音合成支持两种方式请求:- POST方式;- GET方式
百度文档中推荐使用POST方式,但是由于Unity的WebRequest类中,获取音频的现成接口是使用Get方法,所以我们下面的代码还是使用Get方法去获取。
上面的代码写好以后,设置好APIKey和SecretKey就可以合成语音出来了。
大智:“我们这两天通过实战学习了UnityWebRequest的具体用法,在请求Http时,结合接口说明,一般实现起来还是很容易的。”
思考题
大智:“上面的语音合成中很有多参数可以设置,试试不同的参数看看有什么效果吧!” 小新:“好嘞!” 大智:“收获别忘了分享出来!也别忘了分享给你学Unity的朋友,也许能够帮到他。”
推荐阅读
大话Unity公众号回复语音识别获取源码工程。
最小的语音合成软件代码解析-SAM
SAM(Software Automatic Mouth)是一款体积小巧的语音合成软件,纯软件性质,商业用途,离线运行无需联网。它由c语言编写,编译后文件大小约为kB,支持在Windows、Linux、esp、esp上编译使用。原源代码非公开,但有网站提供反编译后的c源代码。此软件可以在线测试效果,用户输入文字即可体验语音合成功能。
SAM软件的说明书提供了详细的使用指南。网站上同时介绍了软件的分析过程,以及esp上的移植代码。对于代码关键部分的分析,主要集中在SAM中的个音素上。音素按0-编号,每个音素都有特定属性,如ID、名称、正常长度、重音长度、共振峰频率和幅度等。音素名称由1-2个字符组成,存储在phonemeNameTable1和phonemeNameTable2中。phonemeLengthTable表示音素的默认长度,单位为帧,约ms。音素分为三类,并有特定的频率和幅度数据。
SAM的关键函数依次执行,上一个函数的输出为下一个函数的输入。主要函数包括TextToPhonemes、PhonemeStr2PhonemeIdx、RenderAll、CreateFrames和ProcessFrames2Buffer。这些函数负责从文本到音素的转换、音素索引和长度的获取、所有音素的渲染、频率和幅度数据的生成以及帧处理等核心操作。语音合成的关键代码位于processframes.c文件中,通过公式计算生成波形,涉及元音、浊辅音的合成,以及清辅音的直接读取文件处理。如果音素的flags属性不为0,则将根据特定条件添加部分录音内容,决定是否合成浊辅音。