0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详细解析WORLD语音合成系统的原理以及使用方法

wpl4_DeepLearni 2018-01-29 10:39 次阅读

WORLD是一个基于C语言的开源语音合成系统,语音合成主要包括波形拼接和参数合成两种方法,WORLD是一种基于vocoder的参数合成方法,它相比于STRAIGHT的优势是减少了计算复杂度,并且可以应用于实时的语音合成。由于STRAIGHT不是开源的系统,并且在WORLD论文中已经对比了WORLD相比于STRAIGHT无论是在合成的音频质量上还是合成速度上都处于领先优势,所以这里我不准备介绍STRAIGHT,我们今天主要讲一下WORLD语音合成系统的原理以及使用方法。

WORLD系统如下图所示,包含三个模块,分别是DIO、CheapTrick、PLATINUM,其中DIO的作用是用来估计一段波形的Fundamental Frequency(简称F0),CheapTrick算法是根据波形和F0来计算spectral envelope,PLATINUM算法是基于波形、F0和spectral envelope来计算aperiodic parameter,下面我们来分别看这些参数的计算原理。

详细解析WORLD语音合成系统的原理以及使用方法

1. F0的计算

F0在维基百科中的定义是:当发声体由于振动而发出声音时,声音一般可以分解为许多单纯的正弦波,所有的自然声音基本都是由许多频率不同的正弦波组成的,其中频率最低的正弦波即为基音,而其他频率较高的正弦波则为泛音,即这些不同正弦波中的最低频率称为基频。F0是一种非常常用的可以表示声音的特征,在WORLD中,F0的计算是基于DIO算法,DIO算法主要包含如下三个步骤:

第一步:使用不同的截止频率的低通滤波器,如果滤波后的信号只包含基频,那么它就是一个正弦波,由于事先我们对F0并不知晓,需要多次试探,所以在这一步中会有很多不同截止频率的滤波器被使用;

第二步:计算每一个滤波后的信号中的候选基频以及可信度,由于只包含基频的信号应该是一个正弦波,因此如下图所示,四个区间的跨度应该基本相等,我们可以计算四个跨度的平均值,用这个值的倒数来表示候选基频。同时,计算这四个跨度的标准差来作为衡量基频可信度的指标,标准差越大,说明跨度长短差异较大,那么取此频率作为基频的可信度就较低。

第三步:选取可信度最高的候选基频作为最终的基频。

详细解析WORLD语音合成系统的原理以及使用方法

2. 用于估计频谱包络的CheapTrick算法

首先,我们需要明白什么是语音的频谱包络,语音是一个时序信号,例如对于一个采样频率为16kHz的音频文件,意味着在这个音频中,每一秒包含16000个采样点,这些采样点在计算机中以某种数据形式进行存储着(例如常见的有16bit整型),当我们使用矩形窗函数对一段音频进行处理,它就被划分成多个帧,于是得到了多个子序列,然后对每个子序列进行傅里叶变换操作,就得到了频率-振幅图,将这些图在时间维度上展现出来,就得到了这个语音文件的spectrogram。一张实际的spectrogram如下图所示。

详细解析WORLD语音合成系统的原理以及使用方法

频谱包络实际上是在一个频率-振幅图中,将每个频率共振峰用平滑的曲线连接起来,而这个平滑的曲线就是语音的频谱包络,下图展示了频谱包络在频谱图中的位置。

详细解析WORLD语音合成系统的原理以及使用方法

确定这个频谱包络的算法有很多,例如常见的是倒谱法(Cepstrum,有趣的是,cepstrum与spectrum两个单词只是开头四个字母翻转了位置而已,这其实也暗示了它们的物理含义有某种巧合的关联...),在WORLD中,使用的是CheapTrick算法来估计频谱包络,该算法工作流程如下:

首先,对信号添加Hanning window,然后对windowed之后的信号计算其功率,公式如下(1)所示;

其次,使用矩形窗函数对功率谱进行平滑化,公式如下(2)所示;

最后,计算功率谱的倒谱,并做倒谱提升,公式如下(3)(4)(5)(6)所示;

详细解析WORLD语音合成系统的原理以及使用方法

详细解析WORLD语音合成系统的原理以及使用方法

详细解析WORLD语音合成系统的原理以及使用方法

最终得到的Pl(w)就是我们所需要的频谱包络。

3. Aperiodic参数提取算法

aperiodic是与混合激励相关的参数,为了获得自然的声音,激励源不能只使用周期信号,也需要包含一些非周期信号。在WORLD中,aperiodic参数可以直接基于波形、F0、频谱包络来计算得到。这种算法叫做PLATINUM,它的工作流程如下:

首先,对波形添加宽度为2T0的窗函数,并计算得到其频谱X(w);将X(w)除以最小相谱Sm(w)得到Xp(w),公式如(11)所示;对Xp(w)进行逆iFFT,即可得到激励信号,公式如(10)所示;

详细解析WORLD语音合成系统的原理以及使用方法

详细解析WORLD语音合成系统的原理以及使用方法

最终的语音合成是通过将最小相谱与激励信号进行卷积得到。

最后,来看一下如何调用WORLD来合成一段语音以及合成的效果。WORLD源代码是基于C语言的,但是WORLD也有一个Python wrapper库——PyWorld,为了代码简洁起见,这里我们使用PyWorld来演示。

在终端运行pip install pyworld以及pip install soundfile即可安装PyWorld库,该库中提供了一个demo代码,可以用来演示语音合成。下面一段代码就是使用WORLD库来提取音频特征,并将此特征基于vocoder合成新的音频,原始音频和新的音频的波形图对比如下图所示。

#获取音频的采样点数值以及采样率x, fs = sf.read('utterance/vaiueo2d.wav')#使用DIO算法计算音频的基频F0_f0, t = pw.dio(x, fs, f0_floor=50.0, f0_ceil=600.0, channels_in_octave=2, frame_period=args.frame_period, speed=args.speed)#使用CheapTrick算法计算音频的频谱包络_sp = pw.cheaptrick(x, _f0, t, fs)#计算aperiodic参数_ap = pw.d4c(x, _f0, t, fs)#基于以上参数合成音频_y = pw.synthesize(_f0, _sp, _ap, fs, args.frame_period)#写入音频文件sf.write('test/y_without_f0_refinement.wav', _y, fs)

下图是原始波形与合成后音频的波形对比,上图是原始波形,下图是合成后的音频波形,可以看到,基本保持一致。由于公众号文章只能上传一段音频,因此这里我只能上传合成后的音频。

详细解析WORLD语音合成系统的原理以及使用方法

WORLD语音合成系统可以根据F0、spectral envelope、aperiodic三个参数来合成一段语音,因此,在前沿的语音合成研究中,会通过深度学习技术学习到一段文本所对应的这三个特征,然后借助WORLD合成为语音。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4612

    浏览量

    92875
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136789
  • 语音合成
    +关注

    关注

    2

    文章

    89

    浏览量

    16157
  • 频谱
    +关注

    关注

    7

    文章

    882

    浏览量

    45621

原文标题:开源的语音合成系统WORLD介绍以及使用方法

文章出处:【微信号:DeepLearningDigest,微信公众号:深度学习每日摘要】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AI语音处理-文字合成语音功能

    这篇文章就介绍华为云提供的语音合成服务使用方法,利用提供的API接口完成语音合成功能,将合成语音
    的头像 发表于 07-08 09:50 2109次阅读
    AI<b class='flag-5'>语音</b>处理-文字<b class='flag-5'>合成语音</b>功能

    基于数字信号处理器的中文语音合成系统设计

    本文介绍的就是一种基于DSP的中文语音合成系统的实现方法。随着语音信号处理技术的不断发展与成熟,语音
    发表于 12-28 09:32 1980次阅读

    基于波形音频段处理的中文语音合成研究

    特性,合成语音清晰自然,所以其质量普遍高于基于规则合成,而且该种方法简单直观、运算量小,因此获得了广泛应用。但基于拼接方法
    发表于 03-06 22:24

    灵犀云智能语音平台的语音评测SDK使用方法

    分享一下集成语音评测功能的方法:①先登录中国移动开发者社区;②登录成功后,进入“管理中心”再点击下图红框指示的“应用发布” ;③填妥应用的名称和简介,然后勾选“含有能力”,选择你希望应用语音能力的平台并在
    发表于 08-20 10:57

    基于LabVIEW语音合成系统设计

    有会基于LabVIEW语音合成系统设计的吗
    发表于 04-06 22:26

    智能语音套件VBS7100 试用体验+使用方法

    ` 本帖最后由 *** 于 2017-5-13 08:46 编辑 第二波:智能语音套件VBS7100 试用体验+使用方法语音套件VBS7100使用方法可参考两种方式,如下图所示。后期陆续测评,敬请期待!
    发表于 05-11 13:06

    语音合成芯片与语音芯片对比

    实现实时播报。 语音芯片,顾名思义就是可以存储控制播放语音的IC;是指将语音信号通过采样转化为数字,存储在IC的ROM中,再通过威廉希尔官方网站 将ROM中的数字还原成语音信号。从
    发表于 03-08 17:26

    语音合成芯片与语音芯片对比

    实现实时播报。语音芯片,顾名思义就是可以存储控制播放语音的IC;是指将语音信号通过采样转化为数字,存储在IC的ROM中,再通过威廉希尔官方网站 将ROM中的数字还原成语音信号。从
    发表于 03-11 15:39

    Modelsim详细使用方法

    Modelsim 详细使用方法介绍。点击下载
    发表于 04-23 10:28

    语音合成IC与语音IC的两三事

    通过威廉希尔官方网站 将ROM中的数字还原成语音信号。从使用方法来看,语音芯片的主要使用方式是先对其进行录音,录音完成烧录后再来对其使用。 总的来说,语音IC是把声音录制进去才能播放,
    发表于 05-13 17:02

    基于语音合成技术的车载终端系统该怎样去设计?

    什么是语音合成技术?基于语音合成技术的车载终端系统该怎样去设计?
    发表于 05-12 07:25

    ModelSim软件的详细使用方法是什么?

    ModelSim软件有哪些主要特点?ModelSim软件的详细使用方法是什么?
    发表于 06-21 07:35

    基于DSP的中文语音合成系统设计

    基于DSP的中文语音合成系统设计 引言   本文介绍的就是一种基于DSP的中文语音合成系统
    发表于 10-09 14:50 1306次阅读
    基于DSP的中文<b class='flag-5'>语音</b><b class='flag-5'>合成</b><b class='flag-5'>系统</b>设计

    语音合成系统研究

    语音合成系统研究,语音合成是通过机械的、电子的方法产生人造
    发表于 05-24 15:59 4419次阅读
    <b class='flag-5'>语音</b><b class='flag-5'>合成</b><b class='flag-5'>系统</b>研究

    如何进行马来语语音合成系统的设计与实现概述

    马来语广泛使用于马来西亚、新加坡等东南亚国家,目前使用人数约有2亿多人。本文研究马来语语音合成系统的前端文本分析与处理方法以及基于HMM的
    发表于 12-24 15:54 4次下载
    如何进行马来语<b class='flag-5'>语音</b><b class='flag-5'>合成</b><b class='flag-5'>系统</b>的设计与实现概述