2010年7月28日 星期三

Polyphonic Computer Music Authoring Tool - 仕偉

-----------------------------------------------------
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。