大家好,又见面了,我是你们的朋友全栈君。
语音相关基础知识点:
- 时域信号:一维原始信号
- 傅里叶变换:得到频域特征
- 短时傅里叶变换:傅里叶变换得到了频域信号,但是丢失了时域信号,所欲通过STFT得到时频信号
- 梅尔频谱倒谱系数:单单频率信号表达不足,为了更加和人的耳朵听觉相符,我们使用了mel窗滤波,得到人耳的频率段幅度系数
- 梅尔声谱:这种声谱是一种基于人类感知的中间媒介,它不仅记录了不同的单词如何发音,而且还记录了预期的音量和语调。
基于深度学习的研究框架:
区分说话主要是通过音高(基频)和音色(频谱包络-频谱最大幅度的连接线) 音高:http://ibillxia.github.io/blog/2013/05/16/audio-signal-processing-time-domain-pitch-python-realization/ 音色:http://ibillxia.github.io/blog/2013/05/18/audio-signal-processing-time-domain-timbre-python-realization/ 此工具箱通过提取语音的三个特征,然后对其进行修改,从而改变语音的音色等特征,从而转换语音特性 比如:通过调高基频,可以偏女性化,通过改变基频未固定值,可以类似机器人等等 f0 : ndarray F0 contour. 基频等高线 sp : ndarray Spectral envelope. 频谱包络 ap : ndarray Aperiodicity. 非周期性
工具箱主要是用matlab和c语言进行开发,pyworld脚本调用c语言接口
文档:直接参考C语言文档或者查看github源码及其一个demo https://qiita.com/ohtaman/items/84426cee09c2ba4abc22
合成数据集下载: CMU ARCTIC (en)-李开复实验室: http://festvox.org/cmu_arctic/ LJSpeech (en): 2.6G https://keithito.com/LJ-Speech-Dataset/ thchs30: 清华大学30小时的数据集(中文) 6.4G http://www.openslr.org/18/
四种现阶段主要的语音合成系统:
- 传统-概率参数- Parametric TTS 参数语音合成系统的特点是,在语音分析阶段,需要根据语音生成的特点,将语音波形(speech waves) 通过声码器转换成频谱,基频,时长等语音或者韵律参数。在建模阶段对语音参数进行建模。并且在语音合成阶段,通过声码器从预测出来的语音参数还原出时域语音信号。参数语音合成系统的优势在于模型大小较小,模型参数调整方便(说话人转换,升降掉),而且合成语音比较稳定。缺点在于合成语音音质由于经过参数化,所以和原始录音相比有一定的损失。
- 传统-拼接系统- Concatenative TTS 拼接语音合成系统的特点是,不会对原始录音进行参数化,而会将原始录音剪切成一个一个基本单元存储下来。在合成过程中,通过一些算法或者模型计算每个单元的目标代价和连接代价,最后通过Viterbi算法并且通过PSOLA(Pitch Synchronized Overlap-Add)或者WSOLA(Waveform Similarity based Overlap-Add)等信号处理的方法“拼接”出合成语音。因此,拼接语音合成的优势在于,音质好,不受语音单元参数化的音质损失。但是在数据库小的情况下,由于有时挑选不到合适的语音单元,导致合成语音会有Glitch 或者韵律、发音不够稳定。而且需要的存储空间大。
- 基于深度学习的-百度、谷歌
- GAN网络-还处于研究阶段
合成语音的评价标准: 声音的好听与难听是一个相对主观的概念,因此合成语音的好坏主要通过找很多测听人员对合成语音进行打MOS(Mean Opinion Score)分;其中MOS的范围是 1-5 分,分别代表 1: Bad, 2: Poor, 3: Fair, 4: Good, 5: Excellent 。MOS打分可以对合成语音的音质,可懂度,相似度,或者其他的分项进行评价,也可以对语音的整体自然度进行评价。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/153115.html原文链接:https://javaforall.cn