1.【专栏精选】实战:百度语音合成
2.最小的声音声音语音合成软件代码解析-SAM
【专栏精选】实战:百度语音合成
本文节选自大话Unity公众号技术专栏《大话Unity》,未经允许不可转载。合成合成
大话Unity公众号回复语音识别获取源码工程。源码源码用
大话Unity,声音声音让你快人几步。合成合成你好,源码源码用osmboxpost源码我是声音声音大智。
大智:“昨天我们实战了语音识别,合成合成在人工智能的源码源码用语音领域,还有很大一块是声音声音语音合成,也就是合成合成Text to Speech,文字转语音。源码源码用” 小新:“是声音声音不是就是我们经常听到的siri或者智能音箱那种声音?” 大智:“没错,那些声音都是合成合成lstm算法python源码用语音合成的技术合成音频文件,然后播放出来的源码源码用。” 小新:“我们今天就来搞这个?” 大智:“对,这就开始”
首先做些准备工作,和昨天的语音识别的流程很像,大致如下:
语音识别
大智:“看完文档了没?” 小新:“看完了” 大智:“那我们就开始了。”
语音合成主要有两个过程:1. 鉴权认证:从百度获取一个令牌(token),请求的时候需要携带这个令牌,否则视为非法请求;2. 在Unity中请求语音合成接口。
第一步鉴权认证我们昨天已经实现了,可以拿来直接用。我们直接进入第二步,在Unity中请求语音合成接口。
REST API
小新:“我在文档中看到了这个词REST API,赛博发源码API我懂,就是应用程序接口嘛,这个REST是什么?休息接口么?” 大智:“哎嘿,什么休息接口!这个是Web开发中的一个技术,你不懂正常,我来简单解释一下。”
REST ( REpresentational State Transfer ),State Transfer 为 "状态传输" 或 "状态转移 ",Representational 中文有人翻译为"表征"、"具象",合起来就是 "表征状态传输" 或 "具象状态传输" 或 "表述性状态转移",不过,官方主页源码一般文章或技术文件都比较不会使用翻译后的中文来撰写,而是直接引用 REST 或 RESTful 来代表,因为 REST 一整个观念,想要只用六个中文字来完整表达真有难度。
REST 本身是设计风格而不是标准。REST 谈论一件非常重要的事,如何正确地使用Web*标准*,例如,HTTP 和 URI。想要了解 REST 最好的方式就是思索与了解*Web*及其工作方式。如果你设计的应用程序能符合 REST 原则 (REST principles),这些符合 REST 原则的 REST 服务可称为 "RESTful web service" 也称 "RESTful Web API"。"-ful" 字尾强调它们的波段拉升指标源码设计完全符合 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,则将根据特定条件添加部分录音内容,决定是否合成浊辅音。