-----------------------------------------------------
2010/10/5
-----------------------------------------------------
目前AuthoringTool主要功能說明:
1.讀入wave檔可用程式抓出f0.
2.讀入wave檔可畫出spectrum.
3.使用者可以畫出f0,音量可由java或cuda合成聲音.
4.可由讀入的spectrum,由使用者畫出大概基頻,程式會自動找出對應的spectrum能量並修正頻率.
5.data可存為xml檔方便存取.
6.合成音樂時可調整音高,音量,合成partial比例.如用cuda合成時以上可為real-time.
連結網址:http://cmslab.csie.ncku.edu.tw/index.php/research/asp
-----------------------------------------------------
2010/8/19
-----------------------------------------------------
完成抓取spectrum的功能,不過抓到的數值要轉換成dB,
轉換的公式要再調整.
介面變更許多,待確定再一次貼圖.
-----------------------------------------------------
2010/7/28
-----------------------------------------------------
主畫面:
已將檔案結構換成Vector.
已完成移植:
spectrum
wav
midi
新增pitch
修改pitch
刪除pitch
java聲音合成
選擇partial
選擇group
pitch table
help-about
about :
新增兩功能的GUI,尚未實作內容:
-----------------------------------------------------
2010/7/2
-----------------------------------------------------
為了改善畫圖的效率,捨棄原本的畫圖方式,改用新的方法:
舊的方法:
在panel中用paintcomponent,由於paintcomponent是對整個panel繪圖,因此只要修改到panel的內容,整張panel就會重繪.
新的方法 :
在panel中建一個label,將已存的資料畫在bufferedimage放入label中當背景,上面架一層玻璃(GlassPane)當畫布。
1. 如果要畫新的pitch會畫在玻璃上,確定畫完再更新bufferedimage->放入label中當背景。
2. 刪除pitch時會在玻璃上畫背景顏色,等確定後再刪除資料->更新bufferedimage->放入label中當背景.
此方法優點是每次在新增或刪除pitch時畫面只會重畫GlassPane的部分,不會影響到背景label的圖形,因此效率會大幅改善,以下為圖例:
-----------------------------------------------------
2010/6/18
-----------------------------------------------------
新增demo影片
-----------------------------------------------------
2010/5/27
-----------------------------------------------------
1.讀檔可由xml讀入已編輯好的檔案.
2.在讀檔,合成,修改pitch,新增顯示進度條.
3.可指定要合成的時間片段,按"SlelectRange",滑鼠點第一下為開始時間,
第二下結束時間,第三下取消選取.
4.未選擇時間片段則預設合成全部.
-----------------------------------------------------
2010/5/25
-----------------------------------------------------
1.修改wav spectrum,使明暗更明顯.
2.可對單一partial或 partial group編輯,會跳出視窗.
3.視窗內可編輯音高,按"drawVolume"可用滑鼠畫出指定音量,單位是db,
按下"Synthesis"就可合成此段pitch並播放.
-----------------------------------------------------
2010/5/20
-----------------------------------------------------
語音合成與研究
1. 了解語音合成過程
目前語音合成
--用LPC model vocal tract
--程式中的model vocal tract部分希望改成sine
2. 如何用HMM輔助合成
showmin的合成
--音色庫先建好
--LPC+sine是用來Model Harmonics
--HMM只是來輔助合成的
3. 目標
了解語音合成的程式碼,
將showmin之LPC model sine的方法修改或套用至語音合成,
再用HMM輔助合成,並整合到authingtool.
希望能用CUDA加速.
-----------------------------------------------------
2010/5/19
-----------------------------------------------------
matlab with hmm example
http://zwe0405.blogspot.com/2010/05/hmm-matlab-example.html
matlab with hmm 函數說明
http://zwe0405.blogspot.com/2010/05/hidden-markov-models-with-matlab.html
-----------------------------------------------------
2010/5/14
-----------------------------------------------------
增加了顯示wav檔的orginal spectrum.
做法:
程式讀入wav檔->分析格式取出data部分->data bytes轉成數字->
將數字標準化後經FFT計算得frequency,amp.
亮度變化用java的函式gradientpaint(x1,y1,color1,x2,y2,color2),
意思是從(x1,y1)的顏色color1漸層至(x2,y2)座標的color2,
再搭配畫線函式畫出.
因amp大小不同須調整gradient兩座標的距離來改變亮度.
FFT window:8192, 取樣頻率用44100Hz算的話,
每隔441根bin計算一次,使得時間剛好相差0.01 second.
截圖如下:
-----------------------------------------------------
2010/4/27
-----------------------------------------------------
在小聽的筆電上跑authoringtool會有error,
經過多次試驗總算找出原因.
結果居然是visual studio 2005與visual studio 2008不相容的關係.
我是用visual studio 2005編譯dll檔,在有裝visual studio 2008的環境
下會error.
解決辦法:
1.將visual studio 2005移除掉重新裝visual studio 2008.
2.裝完後跑authoringtool果真error,於是重新編譯dll.
3.在編譯dll時多了錯誤,原來裡面有段程式碼free了已經free過的變數,
於是把這段程式碼拿掉,重新編譯dll.
4.執行authoringtool,可以work了.
在visual studio 2005下那段程式碼是ok的,
visual studio 2008下卻不work,真令人感到奇怪.
-----------------------------------------------------
2010/4/22
-----------------------------------------------------
Features :
1. When open wav file the program will show progressbar which always on top.
2. Can select Partial or Partial Group.
-----------------------------------------------------
2010/4/15
-----------------------------------------------------
Features :
1. Highlight partial. ( Just move mouse then highlight automatically. )
2. Mouse tooltip shows Pitch and Pitch picture. ( Last week done. )
3. Mouse dragged on specific field can zoom-In or zoom-Out.
-----------------------------------------------------
2010/4/14
-----------------------------------------------------
Bwv 1007
Bwv 992
Bwv 846
小步舞曲
Mozart KV.545
在8度音也是有很多錯誤, Total錯誤0.29, 8度音錯誤0.19, 非8度音錯誤0.097.
-----------------------------------------------------
2010/4/7
-----------------------------------------------------
1.新增點與點之間的連線.
2.修正xml顯示格式,可存成xml檔案.
3.解決將partial從中間刪除之後分為兩段partial的問題.
4.解決畫harmonic的連線問題.
-----------------------------------------------------
2010/3/29
-----------------------------------------------------
新增畫partial的方法,工具列圖示如下:
圖示由左至右分別為
1.畫f0
2.畫泛音
3.畫出整個partial結構
4.擦掉partial
5.擦掉整個partial結構
畫出整個partial結構就是只要畫出基頻, 其基頻產生的泛音就會自動產生;
目前泛音的算法是取基頻的2倍頻,3倍頻直到8倍頻.
擦掉整個partial結構就是只要擦掉某一partial,其泛音結構也會一併去掉.
以下是1,2,3方法的截圖:
-----------------------------------------------------
2010/3/2
-----------------------------------------------------
實驗Bach - Prelude 1, BVW 846第1,2小節.
結果:基頻找錯 8%, 多找音 2%, 少找音 5.5%.
註1.基頻找錯:共三個錯誤.兩個錯誤是應為基頻卻標示成泛音,
一個是同一trajectory在某段標示是基頻某段又標成泛音.
原樂譜:
對譜圖:
對譜圖說明:綠色是少找音,黃色是基頻找錯,重藍色是多找音.
====================================
實驗Bach Minuet NO.1:小步舞曲找parital tracking,
音源是由人工方式看譜貼音組成的wav檔.
結果:沒有發現錯誤情形
原樂譜:
對譜圖:
-----------------------------------------------------
2010/3/1
-----------------------------------------------------
修改音高的功能實作完成.
使用者可以用橡皮擦將不要的音擦掉,
也可以用筆劃出想要的音高,如圖:
還需要修改一下xml部分始能完整的存寫檔.
-----------------------------------------------------
2010/2/25
-----------------------------------------------------
將巴哈無伴奏BWV 1007的用HMM分析並人工對譜看錯誤率.
結果:多找音的情形較多,錯誤率達15.6%,其他情形錯誤率都在6%以下.
註1.基頻找錯:應為基頻但顯示為泛音.
註2.多找音:找到不在樂譜上所標記的音高.
註3.少找音:樂譜上有標記音高但對譜結果無顯示.
附錄:對譜時的圖。
原樂譜1,2小節:
partial tracking結果並標示音高:
標示出錯誤,綠色為多找音,黃色為少找音,這兩小節沒有基頻找錯:
-----------------------------------------------------
加入pitch detection的格線,隨時間或頻率範圍不同,
顯示的細密程度也不同.
-----------------------------------------------------
2009/12/21
-----------------------------------------------------
將wav波形,pitch detection,五線譜3個panel嵌入主視窗,
各個panel可拉中間分隔線調大小.
-----------------------------------------------------
2009/12/09
-----------------------------------------------------
程式說明 :
wav檔只須讀入1次,之後調整大小,顯示waveform等都不須再次讀取檔案.
之後還要做的 :
xml格式加入
pitch detection的時間軸,頻率軸,放大縮小倍率
wav波形的時間軸,頻率軸
wav頻譜顯示
HMM包成dll
修改五線譜顯示
debug midi parser
-----------------------------------------------------
2009/12/07
-----------------------------------------------------
將pitch detection與五線譜合併視窗,加入可看Wave波形,
pitch detection可調整可視時間範圍,頻率.
尚未完成:pitch detection的時間軸,頻率軸,放大縮小倍率;wav波形的時間軸,頻率軸;wav頻譜顯示;HMM包成dll.
-----------------------------------------------------
2009/11/20
-----------------------------------------------------
加入wave 的 pitch detection.
-----------------------------------------------------
2009/10/22
-----------------------------------------------------
修改繪製音符細節.
-----------------------------------------------------
2009/10/19
-----------------------------------------------------
已在程式中畫出樂譜,由midi讀檔自動畫出.
如何將midi資料畫成樂譜:由delta time與pitch來畫出。
以下為與五線譜的對應關係。
接下來要做:將五線譜畫的更完善,xml,pitch detection包近來,會儘快完成.
-----------------------------------------------------
2009/09/04
-----------------------------------------------------
現在程式加入midi播放功能,並可分析出Track數目,
但要從Track中提取資料畫譜,目前還找不到可用程式碼.
有找到關於midi以16進位開啟的資料分析的ppt,
裡面有這樣的解說
我只是舉出其中的兩張投影片,全部ppt在此 .
如果真的找不到可用的code話可能要自己利用16進位分析midi再來畫譜,這是最後的方法.
附上目前程式圖:
點file->open midi file
開啟midi音樂檔
播放時紅圈處顯示此midi檔有9個tracks.
-----------------------------------------------------
2009/08/15
-----------------------------------------------------
我新開一個討論串並把舊的文章移到這。
根據許多軟體的設計我畫了這個草圖:
功能列下面是工具列,就是有一格一格方塊的。
Wave視窗裡面的軌道要有frequency, frequency的Harmonics,波形圖,看還需要什麼.
Property可以顯示樂器,及一些詳細資料.
功能要有修改五線譜,修改FF0.
另外附上其他軟體的介面圖供參考
學長的二胡軟體
-----------------------------------------------------
2009/07/11
-----------------------------------------------------
不免俗的,先來說一下故事。
由於維城、文森及冠廷近年來在polyphonic music的研究上有了卓越的成果,Cuda的普及正好可解決合成上計算量過高的問題,因此老師便計畫著如何利用它來呈現大家的研究成果。此外,電機系有個同學願意幫我們完成電腦動畫,使其可在畫面上呈現提琴演奏的樣子,還有師大音樂系同學的加入,他們願意幫我們修正分析完錯誤的部份結果,並標記提琴的弓法。最後也最重要的,是冠廷跟小聽加入實作的行列。在天時、地利、人和的條件都滿足的情況下,這個編曲工具的專案便問世了。
昨天跟冠廷和小聽已討論出大概的系統架構、初步實作之資料格式及功能等等,因此開條Thread來紀錄一下工作事項及進度。目前工作的分配如下:
冠廷:
先實作資料格式的I/O,也就是先將文森的結果,按照以下格式紀錄在程式中,輸出的格式暫定為 XML 與 Binary,時間的最小單位是 10ms。註: Track外還會包一層 Group,來代表是同一組 partial group。
class Track
{
-----------------------------------------------------
int 樂器id;
float[] 頻率;
float[] 能量;
int 起始單位時間;
int 持續單位時間;
Control[] control;
----------------------------------------------------------------
}
class Control
{
-----------------------------------------------------
int type; //紀錄 control種類, ex: vibrato 就填1
int subType; //紀錄 是哪一個子類, ex: vibrato有三種,如果要第二種,就填2
string tablePath; //如果type是user define, 會由使用者指定這個路徑
int 起始單位時間; //在這個Track的單位時間多少時發生
int 持續單位時間;
-----------------------------------------------------
}
小聽:
使用Java Swing製作GUI,先尋找一下網路上是否已有寫好的函式庫有提供我們所需要的功能。需要的功能細項待補。(我寫的字條放在 Lab …)
1. 畫waveform的panel (time domain、FFT)
2. 在波形圖上選取區段,變色效果。
3. 經由畫筆改變waveform
4. 可以自由配置視窗的功能
5. 隨不同視窗,改變工具列。
6. 屬性頁
7. midi檔的note number用樂譜形式呈現
showmin:
實作擷取一段聲音的 partials 並另存成樂器庫及 OLA additive synthesis。