<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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

    文章

    4468

    瀏覽量

    91019
  • C語言
    +關注

    關注

    180

    文章

    7542

    瀏覽量

    130969
  • 語音合成
    +關注

    關注

    2

    文章

    83

    瀏覽量

    16043
  • 頻譜
    +關注

    關注

    7

    文章

    854

    瀏覽量

    45201

原文標題:開源的語音合成系統WORLD介紹以及使用方法

文章出處:【微信號:DeepLearningDigest,微信公眾號:深度學習每日摘要】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AI語音處理-文字合成語音功能

    這篇文章就介紹華為云提供的語音合成服務使用方法,利用提供的API接口完成語音合成功能,將合成語音
    的頭像 發表于 07-08 09:50 ?1688次閱讀
    AI<b class='flag-5'>語音</b>處理-文字<b class='flag-5'>合成語音</b>功能

    基于波形音頻段處理的中文語音合成研究

    特性,合成語音清晰自然,所以其質量普遍高于基于規則合成,而且該種方法簡單直觀、運算量小,因此獲得了廣泛應用。但基于拼接方法
    發表于 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

    訊飛語音合成芯片

    訊飛語音合成芯片廣泛用于停車場系統、公交車報站和刷卡系統、廣播等,其語音合成的自然度、流暢度已和
    發表于 12-04 14:17

    語音合成芯片與語音芯片對比

    實現實時播報。 語音芯片,顧名思義就是可以存儲控制播放語音的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 ?1200次閱讀
    基于DSP的中文<b class='flag-5'>語音</b><b class='flag-5'>合成</b><b class='flag-5'>系統</b>設計

    語音合成系統研究

    語音合成系統研究,語音合成是通過機械的、電子的方法產生人造
    發表于 05-24 15:59 ?4166次閱讀
    <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>的設計與實現概述
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>