2010年6月14日 星期一

巴哈無伴奏音符標記 - 皓鈞

2010.04.08~2010.06.07=============================

  • 進度更新(6/14):
    1. 小明學長發現之前我標的地方,有一些地方有標錯。大部分是音量少負號,另外有一些可能是標的時候不小心打錯。已更正。
    2. 標完前68個cue(track)。
    3. 相關檔案:音檔標記Excel檔
  • 進度更新(6/7):
    1. 標完前59個cue(track)。
    2. 相關檔案:音檔標記Excel檔
  • 進度更新(5/4):
    1. 標完前50個cue(track)。
    2. 相關檔案:音檔標記Excel檔
  • 進度更新(4/28):
    1. 標完前45個cue(track)。
    2. 相關檔案:音檔標記Excel檔
  • 進度更新(4/23):
    1. 本來想標完前四十個cue(track)再一起更新,不過cue_037和cue_040比較複雜,所以先更新其他的部分。
    2. Excel的格式有點怪怪的,我畫的線和填上的顏色全部都消失了,可能要再想辦法找看看有沒有自動存檔。
    3. 沒找到自動存檔,重新畫隔線。不過有一些之前有註記的點,像是抖音的高點和低點,或是一些比較奇怪的點就不曉得在哪裡了。
    4. 相關檔案:音檔標記Excel檔
  • 進度更新(4/12):
    1. 標完前22個cue(track),約11點多秒。
    2. 相關檔案:音檔標記Excel檔
  • 進度更新(4/08):
    1. 修改cue_007前面標寄錯誤的地方。
    2. 標完前16個cue(track),約9點多秒。
    3. 相關檔案:音檔標記Excel檔








2010.03.29========================================

  • 進度更新:
    1. 標完前10秒16個cue(track)中的8個cue(track),約5點多秒。
    2. 相關檔案:音檔標記Excel檔

  • Meeting投影片
    1. 主要內容是講一下目前做的東西,以及上禮拜遇到的一些問題。不過因為meeting時間已經超過,所以就沒有報告;只放上投影片,下次meeting再一起報告。



2010.03.25========================================

  • 上禮拜老師提出來的問題〈3/17的意見〉:
    1. 我開始標記的時間點之前,就已經有聲音發出來了;也就是說我一開始是否有漏標某些音符?
    2. 哪些音該留下來,延音或殘響有沒有注意到?

  • 關於這個問題,在檢視頻譜之後發現:
    1. 因為我原本只標記F0的音高和音量,而我第一個標記的cue(track)它能量最強的一根並非F0本身,而是F0的三倍頻。所以雖然F0本身在1.3秒以後才有能量,可是它的三倍頻卻

      在1.11秒的地方就有能量;所以在1.3秒之前出現的聲音我都漏掉了。

  • 在和老師還有小明學長討論之後,決定更改標記的方式如下:
    1. 對於每個音的音高,仍然以F0的頻率來標記。
    2. 對於每個音的音量,改成標記那個音前四倍頻中最大的能量。
    3. 當一個音的能量小於-72dB時,才當做那個音已經消失(停止標記)。

  • 目前進度:
    1. 因為更改標記的方式,所以重頭標記,之前標了一部分的16個cue(track)只有起始點仍然相同。其中cue_004以前已經標記完,cue_005之後則因為還沒標記到,所以其結束點

      都還沒更改
    2. 已標完的四個cue(track),cue_004有一小段有抖音。和小明學長討論之後,抖音的地方頻率只記裡面的高點和低點的頻率,高點和低點中間的點的頻率則用內差的方法計算出

      來。
    3. 相關檔案:目前標記完的音符音檔



2010.03.17========================================
  1. 修正之前標記錯誤的地方,刪掉幾個多標的cue(track),修改後剩下16個cue(track)。
  2. 這16個cue(track)中目前只標完前三個,約占九秒鐘的四分之一,所以應該是兩秒鐘左右。
  3. 相關檔案:修改後音檔已標記音符樂譜(free-scores.com)







2010.03.12========================================
這次的工作是要練習標記一首曲子F0的音高(頻率,Hz)和音量(能量,dB),時間以10ms為單位。目標是希望兩個月內能標完2-3首曲子,標記的第一首曲子是小提琴演奏的巴哈無伴

奏。


  1. 專輯名稱:Sonatas & Partitas BWV 1001-1006
  2. 標記曲目:Sonata 1 in Sol Minor - Adagio
  3. 曲目長度:3分19秒
  4. 檔案格式:wav
目前的進度是先找出前九秒的音樂中出現的cue,共找到18個。然後用CoolEdit標記這18個cue,儲存在標記的wav檔中(在CoolEdit中可以直接按alt+8來看cue list)。接下來會針

對這18個cue分別去標記其音高和音量,目前打算用Excel來儲存標記的結果(格式);然後會重複上述的動作直到標記完整首曲目。

2010年6月3日 星期四

State-of-art Computer Music

相信大家對 Chuck 不陌生吧?老師之前常介紹到了一種On-the-fly programming,它實現了透過即時寫程式來創造音樂。



一個再好的系統,如果沒有人使用,就不會有更多的需求出現,因此在youtube上不難找到Ge Wang在公園或校園展示Chuck的影片。

Computer Music現今最流行的應用,就是Laptop Orchestra,在網路上可以查到兩個最有名的例子,一個是Perry Cook所在的PLORk - Princeton Laptop Orchestra,另一個是Ge Wang所在的SLORk - Stanford Laptop Orchestra。前者創立的時間較早,2006年便有在公開場合演出,其特色是會帶很多奇怪的機械物品接上電腦來發出特別的聲音。底下影片第一個出現的指揮家就是Cook.

 

Ge Wang在開發完Chuck後,在2008春天成立這個group,他們比較重視 user interface,所以戶外的展示是用IKEA salad bowl 做成的喇叭,看起來可愛多了;當然也少不了Chuck的賣點之一: 3D畫面的呈現。

 

後來,Ge Wang用Chuck自己出來另外做個 Smule 的產品,由於iPhone與iPad友善介面的加持,現在要表演,連打程式的省了,取而代之的是Glee, magic piano, I Am T-Pain….等不同介面的產品。不過既然是個產品了我就不多作介紹以免有打廣告之嫌。XD

 

除了這兩個group外,我後來在Cook那簡陋的首頁上找到了 KarmetiK : 一個同樣是由許多工程師跟音樂家所組成的 group,它們做的project稱之為 Machine Orchestra。

 

顧名思義,他們是支由機器所組成的交響樂團,因此所有樂器都是由現有樂器大改造而成的。

 

最後給一個Ge Wang演講的影片,時間很長,對Chuck有興趣的可以看看。

2010年5月20日 星期四

關於blogger首頁剩兩篇文章的問題

由於我自己的使用習慣是用google reader訂閱 lab blog 的文章及迴響,平時沒事不會直接開首頁,因此老師反應時我才發現有這問題。

這個問題起因於Blogger於2/18推出的自動分頁(audo pagination)機制,只要貼出來的文章含有大量佔空間的圖或HTML碼,首頁就會只顯示兩頁,修改背景的設定無用。剛好本lab貼文的習慣是會在同一篇文章持續update進度,因此一定會遇到這問題。

解決辦法是:

1. 使用官方的繼續閱讀功能。lab blog已經有使用其他版本的功能,要換成官方的會導致設定及貼文習慣變更。

2. 修改繼續閱讀Hack。(徵求強者)

References:

http://01mistery.blogspot.com/2010/02/auto-pagination.html

http://abintech.twidv.com/2010/02/blogger-auto-pagination.html

2010年4月10日 星期六

3 points about writing a paper

 剛跟另一個博班生meeting兼哈啦, 聊到關於寫paper,他提到一 些我一直漏掉的點,跟大家分享一下。
 
 先講結論:由於Reviewer都是大忙人,所以你最好不要讓他「花太多腦筋」去「想」你做的事情。也不要讓他「論文看到後頭,還要翻到前頭,才能懂你在講什麼」。
 
 在我有限的寫論文經驗裡,大概是寫關於實作的論文居多,所以很習慣把我做了什麼就寫什麼。這樣下來,基本上就是能說的東西很少,然後Reviewer看完也茫茫然。所以,你得先把你接下來要做的事情其前因後果解釋一次,然後才陳述你做了什麼事。
 
 第二點,如果一件事不是單純的「因為A,所以B」,那最好把中間曲折離奇的事情都一併交代一下(好吧,即使沒有那麼曲折,也最好解釋一下)。這樣Reviewer就不用卡住在一些奇怪的地方,更慘的是還在那兒鑽牛角尖,大作文章,而忽略了你真正想講的事情。
 
 第三點,即使很前面章節鉅細靡遺講解、描述過的理論、方法、事情,在後面章節要敘述相關實作時,還是要提點一下前因後果,重新refresh讀者的記憶。
 
 希望對大家有一點點幫助。
 

2010年4月5日 星期一

Improve MATLAB Figures And using Latex for Publication

之前在用matlab輸出論文圖檔時總覺得不漂亮, 還有就是弄成pdf後, 圖就失真很多, 究其原因是我都存成bmp/jpg, 然後再import to word, 最近才發現其實該轉成用EPS檔, 它是vector file. 然後, 該考慮用latex啦. 列一些link 給大家參考:

[Matlab]


[Latex tool]
Lyx What you see is what you mean LeTax Editor, Syntax-free (MiKTex required!)
LEd LaTex Editor Syntax required, you can see the result without converting to pdf.

MetaFile2EPS (included in Lyx package)

2010年3月27日 星期六

Multi-SPARC Virtual Platform -- 品皓

======================5/17============================
meeting投影片

利用之前完成的觀測instruction cycle執行數的功能,觀測自己寫的矩陣相乘程式。

40X40 矩陣相乘,分給四個core,切割方式是每一個task計算出一個element,也就是說每個task接收80個elements,處理40個乘加運算,最後產生一個element並送出。總共有1600個task。一個task所需的instruction cycle數:
wait input: 557
calculation: 2119
send output: 82

以上是平均的結果,但是meeting時大家疑問為什麼40個乘加需要花費這麼多instruction?

之後檢討,觀察assembly code,一個整數的乘法是呼叫一個function .umul


.umul 是在做bit的乘法(mulscc),也就是說一個32 bit的整數他需要做32次mulscc


其中的原因是sparc gcc預設是產生v7的instuction code,為了產生v8的必須加上參數-mcpu=v8。產生的結果是一個整數乘法只需一個instuction完成(smul)。



v8 task所需的instruction cycle數:
wait input: 481
calculation: 354
send output: 82

整個40x40的矩陣相乘所需的instruction cycle數
wait input: 191919 ~ 192591
calculation: 141645
send output: 32718

wait input數據有點差距的原因是程式的行為,開始是四個core同時在等待input,但是外部module送input data卻是一次只能送一個,所以才會造成這一點差距。

======================4/26============================
主要是完成上禮拜做一半的事情,完成外部module透過Multi-core’s Interface與core溝通的能力;並改寫應用程式: 矩陣相乘,改成input & output data皆由ELF sender收送。

另外一個是觀測instruction執行數的功能。
寫成一個應用程式(ELF)可呼叫的function,包在library裡。功用是回傳目前執行總cycle數。
用法跟一般timer類似,想紀錄一段測試程式執行所花費的cycle數時,在測試程式執行前紀錄當下時間,和測試程式執行結束後的當下時間,兩個數值相減就是所要的。

實作方面,此暫存值紀錄在buffer state裡(下圖的inst count),ELF裡的function call只是回傳那個暫存器的資料,實際上是由模擬器更新,也就是SPARC ISS每個cycle更新一次。



======================4/13============================

修改之前呈現的範例程式: 矩陣相乘
原本為了趕比賽把input data寫死在ELF裡,ELF sender把應用程式透過multi-core's interface把執行檔分給所有的core,不同的core自行取用運算所需的input,運算結果全部傳到其中一個core收集並結束。改成input & output data皆由ELF sender收送,core只負責收input和把運算結果output就好。

簡單的說就是需要外部module透過Multi-core’s Interface與core溝通的能力。我的想法是如同之前core之間的溝通方式;也就是增加與sc_port對應的I/O buffer,如同SPARC ISS的I/O buffer。Interface作資料讀寫看到的仍是buffers,並無多少改變。


這樣的好處是可以沿用舊有的溝通方式。不管是core還是sc_port,資料讀寫時看到的都是自己的I/O buffer,同樣interface在處理資料收送時,看到的同樣是buffers,整體上不會修改到太多。


之後還會加上別的功能如多個multi-core's interface的溝通,仍然是透過sc_port,所以應該也可以透過同樣的方式溝通。
======================3/28============================
比賽影片

比賽文件


上禮拜meeting時報告了幾個case執行的數據如下:
Case: 12X12矩陣相乘 分給四個core執行
total Instruction executed: 9,346,711 X 4
Time: 40.92 sec

Case: 12X12矩陣相乘 分給一個core執行
total Instruction executed: 34,639,538
Time: 55.29 sec

這數據蠻奇怪的,模擬34M指令需要55秒,模擬36M指令卻只要41秒?
因為明明是在同一台電腦上模擬,模擬四個core的效率竟然比一個core好。

後來找了很久才發現是systemc kernal的overhead問題,因為我的模擬器是這樣設計的,每跳一個clock所有的ISS就執行一個instruction,而模擬一個instruction的工作量比起systemc kernal小很多。也就是說模擬一個core就是每一個clock跑一個instruction和一次systemc kernal,模擬四個core就是每一個clock跑四個instruction和一個systemc kernal。

判斷這問題的方式則是增加每個instruction模擬的工作量即可,我的作法是加入很長的迴圈,之後得到的數據就比較正常了
Case: 12X12矩陣相乘 分給四個core執行
total Instruction executed: 4.2M X 4
Time: 502 sec

Case: 12X12矩陣相乘 分給一個core執行
total Instruction executed: 14.5M
Time: 436 sec


======================3/16============================

之前有提到,編譯應用程式ELF時裡面的I/O buffer的宣告和使用我是包成一個c library,使用者撰寫應用程式時必須include這個library,那麼編譯時如果有作最佳化是否會出問題?

答案是會的......

最後我避免的方式是加入attribute的設定,可以強制編譯器在處理這個function時使用指定的最佳化等級,譬如以下範例:
void foo () __attribute__ ((optimize(0)));
void foo () {
.........
}
表示foo()這個function編譯時強制使用optimization level 0,只是這方法只能在gcc上使用。

另外是把GDB的功能加到SPARC ISS上。使用ArchC產生SPARC ISS 時就有順帶產生SPARC GDB stub function,雖然ArchC文件寫GDB這段寫的不清不楚的,但是因為之前有作過8051 debugging stub,所以花了點時間trace code就知道怎麼用了。之後簡單測試了幾個指令:中斷點,單步執行,讀寫變數都沒有問題。



目前測試情況如上圖:左邊數來第一個視窗為systemC虛擬平台上兩個SPARC ISS,各一個GDB stub在跑,右邊兩個GDB視窗與之相連。由於systemc是單執行序的模擬方式,所以同時間只會有一個GDB端在與其對應的GDB stub溝通,其他的則是在等待狀態。

======================3/8============================

目前正在作多個SPARC ISS之間的資料讀寫問題,架構與溝通方式以下分段講解:
1.架構:一個中央模組ISS interface連接所有SPARC ISS,也就是全部透過sc_interface與ISS interface相連。每個SPARC ISS都會有I/O buffer各一個,和一個state buffer,ISS interface檢查每個SPARC ISS的I/O buffer並執行搬運資料的動作來達成。

那些buffer是SPARC ISS裡面執行的測試程式(test.elf)宣告在SPARC memory裡的。這裡就關係到應用程式設計者要怎麼使用I/O buffer來達成多核分工的問題。I/O buffer的宣告和使用我是包成一個c library,使用者撰寫應用程式時必須include這個library,並在程式一開始時呼叫buffer初始化的function。之後使用者就可以使用裡面的function進行多核之間的資料讀寫。

這裡比較麻煩的是buffer的位子,是由sparc gcc安排在 sparc memory,包在elf裡。因為ISS interface在存取I/O buffer時必須知道其位子,因此需要buffer初始化。

SPARC ISS載入elf後從pc = 0開始執行。elf裡一開始一定會執行buffer初始化,將I/O buffer address指定在幾個local register並等待(無限迴圈)ISS interface讀取。ISS interface讀取完後將建立一個I/O buffer address table,之後讀寫資料根據此table。ISS interface建立完table後告知SPARC ISS,跳脫等待的無限迴圈並結束buffer的初始化,之後就繼續執行elf的程式。



2. 溝通方式:假設有兩個SPARC ISS A&B,A寫資料給B,如上圖producer->consumer。
A將要寫的資料寫到自己的output buffer並註明目標為B
ISS interface檢查每個SPARC ISS的I/O buffer,知道A有資料要給B
ISS interface檢查B的input buffer是否為空
如果為空,將A的output buffer搬到B的input buffer
B檢查自己的input buffer是否為空以得知有沒有別人傳資料給他。

=====================================================
整個計畫的起始點是從一個單核SPARC simulator開始. 我找了很多模擬器, 最後決定用ArchC. ArchC為 Architecture Description Language, 我用ArchC產生SPARC V8 指令模擬器, 產生出來的模擬器是純c code, 包成一個SystemC module, 且支援gdb的樣子. 測試程式可以由sparc gcc編譯出的elf直接放到指令模擬器上執行.

有了SPARC ISS和其支援工具, 接下來是要發展成多核虛擬平台. 目的是可以將一個應用程式差成多個子程式, 放在不同的SPARC ISS上執行, 最後共同完成此應用程式的功能, 達到多核分工的目標.

2010年3月19日 星期五

演講:以 GDB 重新學習 C 語言程式設計 (成功大學)

演講:以 GDB 重新學習 C 語言程式設計 (成功大學)

  • 講者: Jserv (黃敬群)
  • 講題:以 GDB 重新學習 C 語言程式設計
  • 日期:2010 年 3 月 27 日 (週六)
  • 時間:14:00 - 17:00
  • 地點: 國立成功大學自強校區電機大樓一樓 令洋廳
高手又開講了!!! 大家該去聽一下 !!!!!!

這麼傑出的系友, 系上應該請他回來開些課才對啊!!!
結果, 竟然連請來分享經驗都沒有...
看來系上的系友維繫工作做的不佳

在弄android/embedded的學弟, 快把握機會唷, 有問到有賺到, 沒問到就要多做兩三個月的白工啦!!!

2010年3月17日 星期三

2010年3月16日 星期二

DAFx2010 – HNM Experimental Results

Original audio signals. (violin)(trumpet)

Decomposed lower-partial part. (violin)(trumpet)

Decomposed higher-partial part. (violin)(trumpet)

Decomposed residuals. (violin)(trumpet)

 

Synthetic higher-partial part. (violin)(trumpet)

Synthetic residuals. (violin)(trumpet)

Synthetic audio signals. (violin)(trumpet)

2010年3月11日 星期四

2010 第二學期 group meeting 報告順序

由於碩二同學每週皆要報告進度,因此不列於名單中。約一個月輪到一次。

日期

報告成員

3/15

偉祥、仕偉

3/22

小新、小聽

3/29

小明、嚕嚕.

4/5

清明(放假)

4/12

小龍、aaa

4/19

胤霖、大鈞

4/26

雙魚、仕偉

5/3

小新、小聽

5/10

小明、嚕嚕.

5/17

小龍、aaa

5/24

胤霖、大鈞

5/31

雙魚、仕偉

6/7

小新、小聽

6/14

小明、嚕嚕.

6/21

小龍、aaa

6/28

胤霖、大鈞