VGM檔音樂資料庫

[回到前頁]  

1、VGM檔簡介

2、VGM檔規格簡介

3、VGM檔驅動流程

4、VGM檔音樂資料庫列表

  VGM(Video Game Music)檔是由一群電視遊樂器公司 SEGA
愛好者所制定出來的電視遊戲音效音樂檔案標準,目前VGM檔所
支援的音效晶片主要有 SN76496、YM2413、YM2612、YM2151 等
晶片,因此適合用來記錄各種音效晶片的驅動資料,目前VGM檔
的規格為 1.01版 ,任何支援標準VGM檔的播放設備都可以正確無
誤的播放出 VGM檔所記錄的音樂資料,類似於Midi檔案一樣是屬
於跨平台的音樂檔案標準,而本研究室此次的實驗主要是將 Midi 
檔案轉換成VGM檔,然後驅動UM3567 / YM2413音效晶片。

   因為站長本身沒有音樂天份,所以無法創作出好聽的音樂,
如果想要驅動UM3567/YM2413音效晶片來表現出動聽悅耳的音樂
時,就必須具有足夠的音樂創作資料來使用,而Midi 檔案則提供
了這方面的參考,當然我們可以將Midi 檔案的樂譜資料印出,然
後將這樂譜的音樂資料轉換成驅動UM3567 / YM2413音效晶片的
資料,不過這種方式不僅緩慢費時,而且如果本身沒有具備適當
的樂理知識,根本無法使用Midi 檔案的資料,再者,所建立的音
樂資料往往是屬於各家獨門格式,無法相容與流通,因此有鑑於
此,本研究室特別介紹 VGM 檔作為驅動UM3567 / YM2413音效晶
片的音樂資料,由於它是公開的標準 ,任何人皆可創作、使用與
播放VGM檔,而且又因為它是跨平台的音樂檔案標準,只要是符
合或相容於VGM檔規格的設備,皆可以播放出來,即使在PC上也
可以播放,例如利用 WinAMP的 Plug-In就可以播放VGM檔,因此
非常適合使用在驅動UM3567 / YM2413音效晶片。

註:VGM檔的檔案結構類似於Midi檔中的Format 0格式,是屬於單
  軌多頻道(多音源)資料格式。 

[回到上面]

  VGM 檔的規格很簡單,檔頭部分為 64 個位元組,記錄資料
依序如下:

檔頭位址

記錄資料

0x00∼0x03 檔案標記 "Vgm "
0x04∼0x07 32位元的值等於 (檔案大小-4)
0x08∼0x0B 檔案版本 0x00000101
0x0C∼0x0F PSG晶片(SN76496)的晶體震盪器頻率值,例如:3579545,如果為0的話,表示不使用PSG晶片
0x10∼0x13 FM晶片(YM2413)的晶體震盪器頻率值,例如:3579545,如果為0的話,表示不使用FM晶片
0x14∼0x17 GD3相對位址,如果為0的話,表示不使用GD3
0x18∼0x1B 32位元的值等於音樂總長度,以22.67us為單位
0x1C∼0x1F 相對重複播放位址,如果為0的話,表示不重複播放
0x20∼0x23 重複播放的音樂總長度,以22.67us為單位,如果為0的話,表示不重複播放
0x24∼0x27 錄音速率,例如:50、60或0
0x28∼0x3F 保留,必須為0

0x40∼  

音樂資料

  音樂資料的內容為一連串的控制命令及寫入音效晶片的值,
包含控制命令暫存器位址暫存器資料,在此只介紹UM3567 /
YM2413的部分,其餘資料有興趣的網友可以自行研究。

控制命令種類

控制命令解釋

0x51 AA DD 3個Bytes,將DD寫入暫存器AA
0x61 LL HH 3個Bytes,HHLL為16位元的值,記錄時間延遲長度,以22.67us為單位 (1/44100 秒)
0x62 1個Byte,表示延遲 735*22.67us=0.016秒
0x63 1個Byte,表示延遲 882*22.67us=0.02秒
0x66 1個Byte,表示音樂資料結束

[回到上面]

  如果網友對於 VGM 檔的檔頭資料與音樂資料,已經有了初
步認識後,對於使用 VGM檔來驅動UM3567 / YM2413音效晶片的
步驟應該不會陌生,底下流程供網友參考。

步驟1:讀取 VGM 檔的檔頭資料,如果0x10∼0x13的值為0的話,
   表示該VGM檔不是專供UM3567 / YM2413使用,則結束程式
   ,如果不為0的話,則到步驟2。

步驟2:從位址0x40開始讀取 VGM 檔的音樂資料,如果不是 0x51
   的話,表示該VGM檔不是專供UM3567 / YM2413使用,則結
   束程式,如果為0x51的話,則到步驟3。

步驟3:從位址0x40開始,每隔22.67us讀取VGM檔的音樂資料,如果
   是0x51的話,接著再往下讀取二個位元組AA及DD,先將AA
   寫入UM3567 / YM2413的位址暫存器,接著延遲 23.5us後,再
   將DD寫入UM3567 / YM2413的資料暫存器。

步驟4:重複步驟3,如果遇到0x61時,則再往下讀取二個位元組LL
   (Lo-Byte) 及HH (Hi-Byte),然後延遲時間為HHLL*22.67us。

步驟5:重複步驟3,如果遇到0x62時,則延遲時間為735*22.67us。

步驟6:重複步驟3,如果遇到0x63時,則延遲時間為882*22.67us。

步驟7:重複步驟3,如果遇到0x66時,表示音樂資料結束,則結束
   程式。

  在此本研究室提供VGM檔驅動UM3567 / YM2413的程式,為
8051組合語言版本,使用晶體震盪器頻率為11.0592Mhz,UM3567
/ YM2413使用晶體震盪器頻率為3.579545Mhz,使用8051的I/O埠P0
連接UM3567 / YM2413的資料匯流排,P2.7連接INI、P2.6連接CS、
P2.5連接WR、P2.4連接A0,VGM檔資料放在0x0100∼0xFFFF的地
方,因此0x0100∼0x013F為檔頭資料,目前該版本程式長度為256
個位元組,定址在0x0000∼0x00FF,僅能單首、多次播放VGM檔
的音樂資料。

  在此本研究室也提供VGM檔的樣本,供有興趣的網友來驗證
VGM檔的驅動程式,該VGM檔的樣本為科學忍者隊(科學小飛俠)
,音樂長度一分16秒。

(1)、VGM檔驅動程式,8051組合語言版本原始碼: 1 2 3

(2)、VGM檔的樣本: 1

註:當您以8051的 I/O埠連接UM3567 / YM2413的資料匯流排與控制
  線時,請在8051的I/O埠加上提昇(Pull-Up)電阻,避免I/O埠的驅
  動能力不足。

(3)、VGM檔驅動程式,8051 Keil C 版本原始碼: 1 2 3 4

(4)、VGM檔驅動電路(必須配合8051 Keil C 版本的程式):1

註:使用Uv3版本V3.51編輯,C編譯器版本V8.08,此VGM檔C語
  言驅動程式適用於任何版本的8051,目前僅支援VGM檔格式
  版本為V1.01;如果以Uv4 V4.02編輯,C51 V9.01編譯,建議在
  Delay()、AccessYM2413(unsigned char Addr, Data)、InitYM2413()、
  SetTimer0()前面加上Void,避免編譯時產生警告訊息。

(5)、VGM檔驅動程式,8051 Keil C 版本原始碼編譯的Hex檔:1

註:此Hex檔為已經編譯好並且匯入GA.vgm(定址在0x0800)的完整
  HEX檔與GA.vgm檔,請參考上述電路圖正確連接,並且燒入
  具有16K-Bytes內建Flash ROM的8051中,則將可以播放出「科
  學忍者隊」的片頭音樂一次。

註:YM2413使用說明書下載位置,UM3567除了 IC腳位與 YM2413
  不同外,其餘IC內部的暫存器與使用方法,幾乎完全相同。

[回到上面]

  底下為站長將Midi檔案轉換成VGM檔後的音樂資料庫,僅供
學術研究使用,底下
所有VGM檔演奏播放之音樂著作權歸原Midi
檔案的創作者所有
,請勿拿來從事違反著作權上使用!

古典音樂類:

VGM檔的說明 VGM檔下載處
帕海貝爾 D大調卡儂 1
葛利格 清晨 2
貝多芬 給愛麗思 3
蕭邦 小狗圓舞曲  4
羅西尼 威廉泰爾序曲 5

 

卡通動畫類:

VGM檔的說明 VGM檔下載處
科學忍者隊 1
哆啦A夢 2
C.C.Sakura 夜之歌 3
龍貓 4
櫻桃小丸子 5

 

影視音樂類:

VGM檔的說明 VGM檔下載處
霹靂車 1
馬蓋先 2
鐵達尼號 3
倩女幽魂 4
X檔案 5

 

一般歌曲類:

VGM檔的說明 VGM檔下載處
Girls Just Wanna Have Fun 1
愛拼才會贏 2
故鄉 3
大約在冬季 4
男兒當自強 5

 

鄉土音樂類:

VGM檔的說明 VGM檔下載處
素還真1 1
素還真2 2
歧路人 3
葉小釵 4
一頁書 5

 

其他音樂類:

VGM檔的說明 VGM檔下載處
仙境傳說 1
古老的大鐘 2
陽明春曉 3
鴛鴦蝴蝶夢 4
愛的羅曼史 5

[回到上面]