2009年4月10日 星期五

建立SCREAM Lab. 研究用的音樂資料庫

2009/4/10

準備就緒了嗎? 可以開始了嗎?

Storage要在那裡呢?

--------------------------------------------------------------------------------------------

首先我要感謝冠廷起頭了一個非常棒的研究, 大家知道, 本來冠廷要做的研究是把一首.wave的曲子跟他的樂譜在時間對起來, 對於像二胡一樣的樂器獨奏這不算什麼, 但是對於複音演奏, 這就有一點難了. 目前冠廷還是先用Bach無伴奏來做, 雖說Bach無伴奏看起來其時是單音的, 不過因為提琴的弓法, 同時可以出現多個音. 對於一些曲子, 他的方法已經可以有不錯的效果, 過一陣子, 在他的畢業論文裡, 我們應該可以看到他的方法加上文森的方法, 可以再現出義崧學長的二胡合成一樣的成果, 只是現在難度更高, 他們合作的成果也更吸引人了.

不過,



無心插柳的結果是, 冠廷順手實做了音樂資料庫搜尋的幾篇論文, 再加上他的努力, SCREAM Lab. 跨進了這個領域. 目前的計劃是用先用.wav來查.wav, 當然也可以用.mid來查.wave以及用.wav來查.mid. 不過, 這種研究需要大量的測試資料. 而資料庫要不就用別人的, 要不就自己建. 網路上雖然多的是.mp3, 不過access人家的.mp3我怕有麻煩, 於是就想自己建算了. 我想實驗室CD不少, 我家裡也有一堆, 而各位應該加裡也有, 所以第一步可以想的就是把這堆CD弄進電腦. 等這堆弄完, 我們做研究有一點名氣, 再去網路上抓.mp3, 免得IFPI來查我們的電腦. 不過要冠廷一個人來建構大的資料庫實在不可能. 所以我請冠廷規劃一下要怎麼做. 以下是他會準備的一些程式:

1. .wav轉Chroma Feature

2. 將1.的Chroma Feature再轉出兩個Feature檔

3. 音樂對應Feature之資料庫, 資料庫也許仿之前的幫師大或黑膠規畫的那麼做.

然後請大家配合做以下的工作:

1.首先請大家使用軟體將CD音軌歌曲轉成. wav與.mp3 個一個file (建議使用foobar2000), 可以從你手上的CD已級實驗室裡有的CD開始.

2. 請將這些.wav 與由.mp3轉回的.wav放在兩個資料夾內

3. 對任一個資料夾, 將我撰寫的執行檔也放在一起

4. 接著請執行我寫好的執行檔

5. 每一個檔案將轉換出chroma files

6. 請將所有的.wav, .mp3以及chroma files上傳至資料庫

我這樣做是要試試壓過的.mp3是否也可以有好的效果. 我會準備HD空間給大家.

好吧! 我再做一個球給keiko, 那就是一旦他的系統弄好, 那麼我們在天涯海角, 只要有網路, 都可以回來這裡聽音樂, 雖說只是SCREAM Lab的人要來聽音樂不必搞這麼大陣仗.

不周之處, 請大家指教.

2009年4月7日 星期二

SCREAM Lab 台北團聚會

對不起.我生病了, 膝蓋又在痛. 這次聚會先取消. 過一兩周再看看.

非常抱歉!

引用 Lab 大當家的話:

四月十日左右, 去台北跟學長學姐聚聚.

畢業的學長姐比較少有人會看到這個 blog ,趁這次機會,把聚會時間地點放在這邊,然後寄出 email 邀請,順便推廣一下!

邀請的人:

  • 秘密:bff
  • 92 級:al
  • 93 級:water, kiki, Royce, bazoo
  • 94 級:mobo
  • 95 級:kiwi, Keiko
  • 其他隱藏在台北的 SCREAMer
    • 有幾位過去的專題生在台北唸書
    • buffett 可能會出沒在台北

時間:

  • 稍稍跟 water 討論了一下,預計是四月十日星期五的晚上!

地點:

  • 聽 mobo 說,老師是台北中山北路的老饕,老師有要推薦餐廳嗎?

SLIM 改版 - ㄚ凡

目前計畫要做的事:

  • 加上用GEF製作的介面

基本上是先拿之前給OpenESL用的介面過來套用

  • 加入component測試環境

就是在我們設計出一個新的component時
系統能依據使用者的輸入資料
建立一個測試環境
提供一組components與待測試的component連接
分別負責餵資料和輸出資料的動作
至於資料是否正確 還是要component的作者自己判斷

--

【加入component測試環境】的實作方式
應該是要分別針對pcm raw data、mp3這些不同的資料型態,先寫好一些測試用的components
使用者只需填好需要設定的資料屬性,系統就能自動連接並產生xml檔,進行單一component的測試

--

目前知道的就是這些
如果還有哪些要注意的地方 或是有什麼問題或建議
也麻煩提出來 謝謝

--
090327

這幾天在改GEF的介面
把學長的GraphGen跟SLIM要用的介面同時修改
下面列的是SLIM的介面需要修改的地方
(從OpenESL介面來改)

  • repository的讀取
    • component的XML描述不同
      • port type只有data/signal兩種
      • port id 應該是只作連接用 是否可以不用讀進來
    • <Property>
      • property有ro_runtime屬性 需要在介面中讓使用者改嗎 要的話就得多增加一個屬性來對應 不然一個屬性沒辦法對應兩個值
      • 沒有版本控制 少一層資料夾也不用做版本判別
  • project存取
    • 還要去問一下 有些xml檔裡有<Config>用來記錄Watchdog是否開啟 有些xml檔則是沒有這個tag  如果要記錄<Config>我想在目錄選單裡加一個頁面來設定watchdog的開啟
    • 還有 在<Filter>裡有<item>似乎是存這個component的屬性 可是有的xml裡沒有這個tag 有的是只有部分屬性 我不太清楚他的作用
    • 連線(buffer)有property要存 ex.type, maxsize

附上一個component的xml

<SMPFilter version="0.1">
  <!-- Filter Spec Here -->
  <!--     One XML should contain only 1 filter spec -->
  <Filter name="freader" version="2.0">
    <InputPort name="control" type="signal" id="0" />
    <OutputPort name="output" id="0" />
    <OutputPort name="read_filename" type="signal" id="0" />
    <OutputPort name="read_progress" type="signal" id="1" />
    <!-- Properties to export (changable)-->
    <!-- default: runtime read only (default true) -->
    <Property name="buffer_size" value="65536" runtime_ro="true"/>
    <Property name="repeat" value="0" runtime_ro="false"/>
    <Property name="filename" value="" runtime_ro="true"/>
    <Property name="read_dir" value="0" runtime_ro="true"/>
    <Property name="filter" value="" runtime_ro="true"/>
  </Filter>
  
  <!-- Filter Property (Java GUI) : parse when Java UI is present-->
  <!--    original Exampleinterface.xml -->
  <Frame name="freader" width="400" height="150">
    <label name="label1" caption="Buffer Size" gridx="0" gridy="0" />
    <textField name="buffer_size" text="65536" fill="horizontal" gridx="0" gridy="1" columnNum="6" />
    <button name="button1" caption="OK" gridx="0" gridy="2" />
  </Frame>
</SMPFilter>


應該還有其它的地方要改  目前我只發現這些
現在關於 repository的讀取 部分已經改好了

project存取 的部分還有些疑惑要去釐清



----------------------------
090407

讀寫project的部分大致上也弄好了

<Buffer from="0:0" from_port="output" id="0" to="1:0" to_port="input" type="default" maxsize="53" />

port id還是要保留  不然SLIM會沒辦法讀取
可是為了讓GEF比較好讀取連線 所以連線兩端的port name還是留在xml中

    <Filter name="freader" id="0" version="2.0" positionX="61" positionY="88" height="98" width="200">
      <item name="buffer_size" value="655360" />
    </Filter>

比較麻煩的地方是當時OpenESL的module裡並沒有property值可讓人修改
但SLIM的component都有property
在儲存project的時候也就要把這些改過的property存起來
這邊我是先找出哪些property有改過
再把他們用<item>這個標籤來存

剩下的部分是在介面中呼叫SLIM