--------Synthesis Results-------
Star Variations
1. Song1
2. Song2
3. Song3
4. Song4
5. Song5
6. Song6
7. Song7
8. Song8
9. Song9
10.Song10
-------- 2011 . 2. 18之2---------
對於F0基頻設定,trace code結果後發現:
1. 445Hz要設定LOWERF0=200,UPPERF0=600,基頻的值才會正確被找到。(正確)
2. 如果設定LOWERF0=100,UPPERF0=500,基頻值會找到2百多Hz。(錯誤)
-------- 2011 . 2. 18 ------------
目前在training音檔時發現幾個問題:
1. 如果我們設定每個state要分成N個HMM model的話,那麼這個state的長度就要大於等於N*0.01(秒),最小的duration要設為N。
在HTS中每個state並不是只有一個HMM model去training,而是拆成N個HMM model,而N的大小可以設定。
之前training設的N值是5,也就是每個state長度至少要大於0.05(秒)。
我們可以設定N為3,所以在跑matlab程式時,設定state的最小長度至少要0.03(s),最好的長度是多少還要再實驗。
2. 在分state的演算法中,之前我有加入一個條件,就是找出頻率轉折點;實際跑時遇到一個例子,頻率是[ 444.75, 444.79, 444.81, 444.80, 444.78, 444.77],這段頻率人耳聽起來是沒有差異,但是依照演算法會被分成[ 444.75, 444.79, 444.81 ] , [ 444.81, 444.80, 444.78, 444.77 ]兩段,在training時應歸為同一類。此部分已修改完。
3. 再取F0部分用HTS範例的取F0程式會有問題,例如基頻是445Hz,在取F0時設定最低400Hz,最高500Hz的話會找不到基頻,猜想因為是語音所以設定的頻率較低,目前在trace code看他取基頻的程式是如何。
附上有做好的進度,紅色為未完成。
基頻目前是直接用讀程式的值,以後應該要人工修一下;還有產生state sequence的程式還沒寫好。
-------- 2010 . 12. 28 ----------
Speech Parameter Generation Algorithm
Considering Global Variance for
HMM-Based Speech Synthesis
-------- 2010 . 12. 9 ----------
我在網路上有找到已經有人用matlab來讀
htk的參數的例子,並且他也用自己的方法算出
MFCCs與htk的MFCCs作比較,如圖:
input是htk的MFCCs檔案跟原音的wave檔.
網址:http://labrosa.ee.columbia.edu/matlab/rastamat/mfccs.html
-------- 2010 . 12. 8 ----------
AN ALGORITHM FOR SPEECH PARAMETER
GENERATION FROM CONTINUOUS MIXTURE
HMMS WITH DYNAMIC FEATURES
-------- 2010 . 12. 2 ----------
上次音檔vibrato不像的原因是因為model分類沒分好,
也就是decision tree未建好.
正常來講,依前後state不同,同一state的model也應該要分類.
例如attack + vibrato_rise 跟 vibrato_fall + vibrato_rise,
兩個vibrato_rise應該要有不同的model,之前合成是只有一個model.
改進之後將上述情形分成不同的model,最後合成結果:
gen1
gen2,延長vibrato
gen3,用不同的vibrato state去合成
目前進度:用matlab將mfcc參數取出,之後要做clustering.
-------- 2010 . 11. 21 ----------
延續11月19日,新增合成音檔,
vitrato的rise和fall的state重複多遍, sample rate 44100Hz :
Synthesis D4 Vibrato2 44.1KHz
-------- 2010 . 11. 19 ----------
修改了sample rate為44100Hz,
training完後8000Hz以上頻率有找到,聽起來又更像了.
但比較有趣的是,同樣都用hts_engine但產生的音檔聽起來不一樣,應該是少打參數.
因為我得到合成的音檔有兩種方式:
1. 依照script,training完會自動執行hts_engine幫我產生音檔.
2. training完我手動將產生的model參數移到另一個資料夾,自己下指令用hts_engine合成音檔.
可能是我手動下指令少了什麼參數,所以跟自動產生的音檔不像,這點有待查明.
原音D4
1.Synthesis D4 sample rate 44.1KHz
2.可能少打參數 D4 sample rate 44.1KHz
-------- 2010 . 11. 11 ----------
問了奕欽學長關於training model時基頻有沒有限制範圍,
有!!他說有而且可以修改範圍,
找到data/Makefile內有兩行:
LOWERF0 = 110 # lower limit for f0 extraction (Hz)
UPPERF0 = 280 # upper limit for f0 extraction (Hz)
就是萃取f0時設的範圍.
所以之前音檔會有低頻雜音可能是因為
原本的聲音的基頻是300Hz,
造成程式在training時硬要是找110~280內的頻率當基頻,
所以才會有低頻的雜音.
先來實驗看看改範圍能不能解決這個問題!
//////////////////////////////////////
將範圍改成 200~500 Hz
LOWERF0 = 200 # lower limit for f0 extraction (Hz)
UPPERF0 = 500 # upper limit for f0 extraction (Hz)
雜音的問題就解決了.
//////////////////////////////////////
接著實驗vibrato :
原音D4 295Hz Vibrato
將同一音檔copy 10份去training, 並且合成 :
Synthesis D4 295Hz Vibrato1
又將vitrato的rise和fall的state重複多遍 :
Synthesis D4 295Hz Vibrato2
以上為目前結果.
-------- 2010 . 11. 08 ----------
這禮拜利用小聽給的java讀cue的程式,
寫了個GUI介面,並修改成HTK label檔的格式如下圖:
只要用程式開啟標完cue的wave檔,就可顯示cue內容,
按下save to label就可存成label檔.
此外程式也提供一般的txt格式,輸出單位為秒如下圖:
一樣只要按下save to txt就可存成txt檔.
這禮拜即利用此程式去標出上次合成出來有雜音問題的D4
(上次報告是說G1,去看頻譜才發現說錯了是D4才對),
合成出來仍有低頻的雜音參雜其中.
目前解決的辦法就是先去拆解hts_engine程式看它產生音檔的部分,
順便拆解流程.
-------- 2010 . 11. 02 ----------
Cepstral Analysis Synthesis on the Mel Frequency Scale
-------- 2010 . 10 . 25 ----------
經過修改與測試之後原來是question set的問題.
目前已有合出聲音,聽得出來像是小提琴的聲音.
下一步是用cool editor邊看頻譜邊標音,這樣可以標得比較準確,
並把其他不同的state也加入training.
-------- 2010 . 10 . 13 ----------
目前有成功產生音檔,但聽起來不像violin的聲音.
可能有問題的點是:
1. 在標音的時候就沒有標好.
2. question沒建好,問題太少.
3. state間的關係描述太少,例如語音中有分片語,短語,音節,重音等,會用這些關係建HMM model.但我在實驗中只用到音節的關係.
目前先嘗試:
用同一個音檔重複10次,然後去training,再合成出來,看出來的音是不是跟原來的一樣.
-------- 2010 . 10 . 3 -----------
6.
對HMM model作初始化用HInit和HRest,
trace code發現是指令下錯的關係.
先用HInit對要處理的phone的HMM model作uniformly segmented,
再來用HRest對同一個HMM model作Baum-Welch re-estimated.
如此反覆將所有的phone都執行上述兩個指令後,
HMM model的初始化完成.
7.
依HTK格式將所有初始化好的HMM model集合成同一個檔案:
inic.mac
8.
開始HMM training:
用HERest這個指令也是會跑Baum-Welch re-estimated,與HRest不同之處是HRest只對單一個utterence做處理,HERest在training過程則是處理全部的utterence,並統計每個utterence的means,variances等,用於完善HMM參數.
處理完得到每個phone訓練好的HMM model.
9.
有了HMM model接下來是合成部份,用的是另一個系統:HTS.
合成需要的參數要有decision tree, question set,這部份如何產生我還要再去研究and問學長,目前進度到此.
-------- 2010 . 9 . 30 ----------
1.
從小提琴的音檔分出C1,G1,D2,A2四個音,每個音準備的音檔數目如下:
C1 : 7個音檔 - 1-1.wav ~ 1-7.wav
G1 : 7個音檔 - 2-1.wav ~ 2-7.wav
D2 : 7個音檔 - 3-1.wav ~ 3-7.wav
A2 : 6個音檔 - 4-1.wav ~ 4-6.wav
2.
接下來取spectrum參數,先用語音預設的39維Mel-frequency cepstral coefficients.
由於HTK只吃16bit或8bit的wave format,因此先用cool editor將wave檔降碼.
取完可得*.fea檔案.
3.
接著是人工標音,使用HTK提供的工具,指令打"HSLab -F WAVE"才能讀入wave檔,
標音的畫面如下:
目前HMM state暫定為"音階_ADSR_status",
example: "c1_A"代表音色為c1,狀態是attack,其他命名以此類推.
將所有的音檔標示完會有相對應的*.lab檔.
4.
依HTK格式將所有lab檔案集合成1個*.mlf檔.
5.
產生HMM model的template,
指令"outMacro Plainhs DiagC 3 "1 1 1" MFCC_E_D_A "13 13 13" > template.hmm",
意思是每個model有三個state,每個state有三個stream,分別用1個、1個、1個mixture,每個stream各佔13維度。
6.
接著對HMM model作初始化用HInit和HRest,
目前這邊有錯誤,下HInit指令時會有
"ERROR [+2121] HInit: Too Few Observation Sequences [0]",
錯誤可能發生的原因有幾種:
1.樣本數太少.
2.HMM model template設的不對,無法跟*.fea檔相符.
3.取segment時人工切的frame間隔太小,導致取不到參數.
解決辦法:
問學長and直接trace code找error.
-------- 2010 . 8 . 12 ----------
執行HTS的demo檔案,網頁上有分兩種 :
Speaker dependent training demo : training 單獨一人的HMM model.
Speaker adaptation/adaptive training demo : training 不同人的HMM model; 例如要讓speaker A發出的語調要像speaker B, 或是speaker A發出的語調像speaker B+C+D.
每種語言又分兩種demo :
Normal demo : HTS 內建的方法取 spectral parameter.
STRAIGHT demo : 由另外一位學者自行改進的演算法取 spectral parameter.由於STRAIGHT demo的方法並沒有公開程式碼,需要的話要自行跟那位教授聯絡取得,因此一般都是執行Normal demo.
我跑的是Speaker dependent training demo : English : Normal,如圖紅框所示 :
跑完成約需要6~7個小時,會有HMM model的統計資料,包含f0,spectral等,之後就可以直接用這些資料透過hts_engine直接合成聲音.
目前已跑完取得統計資料,正在研究hts_engine如何使用.
參考網頁 : http://hts.sp.nitech.ac.jp/?Download
-------- 2010 . 8 . 3 ----------
HMM-based speech synthesis system(HTS)
介紹如何從音檔轉成參數再來合成語音.
-------- 2010 . 8 . 1 ----------
About HTS and HTK system.
HTK - Hidden Markov Model Toolkit
HTS - HMM-Based Speech Synthesis System
語音合成分為兩部份:training part 和 synthesis part
其中HTK就是負責training參數,HTS則是負責synthesis.
HTS內沒有加入text analyzer,如果要使用要另外下載,
Festival Speech Synthesis System就是個text analyzer.
HTS有內建hts_engine可以在不需要HTK library的情形下單獨執行,
可配合Festival或其他應用程式使用.
HTS是以patch檔的形式存在,安裝後會對HTK及HDecode作更新.
因此除了HTK外還需先裝好HDecode.
-------- 2010 . 7 . 8 ----------
viterbi algorithm
介紹如何將最小單位發音,切成我們指定的HMM state數目.
-------- 2010 . 7 . 7 ----------
接下來要做的就是去看合成的部分,
並將裡面取特徵參數的方法MFCC改為簡單的LPC,
再去合成看看看有沒有什麼問題。
下圖為HTK內建取特徵參數的方法,共有7種類型:
-------- ------------- ----------