[回到前頁]
1、Midi檔簡介
2、VGM檔簡介
3、VGM檔規格簡介
4、VGM檔驅動流程
Midi
已經問世超過二十年,早在1983年時,一群合成音樂的
樂器製造者共同討論協商後所發表的一種劃時代數位音樂規格,
它包含數位音樂樂器、數位音樂傳輸介面與數位音樂儲存格式等
標準,作為今後有關數位音樂的創作、製造與儲存的參考規格,
因此這也是為什麼目前在各型彼此不相容電腦間,卻還能彼此分
享數位音樂資料的緣故,目前Midi 的兩大陣營為Roland與Yamaha
,他們在共同的 Midi標準下,又各自發表了最新的數位音樂標準
,用來表現出獨家的數位音樂技術。
由於Midi標準包含了樂器、傳輸介面、儲存格式等標準,因
此,只要是符合或相容於Midi標準的樂器、傳輸介面、儲存格式
等資料,都可以互相溝通或連接,目前Midi標準是 1.1版,而Midi
檔案是用來描述與記錄一段數位音樂的資料,它包含了整段音樂
的所有音符、節拍與所使用的樂器等資料,因此功能上類似於一
本樂譜,而Midi檔案本身的記錄格式又可以分成Format 0、Format
1與Format 2三種,Format 0 的格式是屬於單軌(Track)的資料,將多
達16頻道(16個Channel)的資料全部放在一軌 ;Format 1的格式是屬
於多軌的資料,最多可以有256個音軌,而每個音軌可以有16頻道
(16個Channel)的資料;Format 2 的格式是屬於多本樂譜資料,可以
看成是多個Format
1格式的資料集成。
[回到上面]
VGM(Video Game Music)檔是由一群電視遊樂器公司
SEGA 的
愛好者所制定出來的電視遊戲音效音樂檔案標準,目前VGM檔所
支援的音效晶片主要有 SN76496、YM2413、YM2612、YM2151
等
晶片,因此適合用來記錄各種音效晶片的驅動資料,目前VGM檔
的規格為 1.50 版 ,任何支援標準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埠的驅
動能力不足。
註:YM2413使用說明書下載位置,UM3567除了 IC腳位與 YM2413
不同外,其餘IC內部的暫存器與使用方法,幾乎完全相同。
[回到上面]
底下為 VGM檔播放錄音的DEMO,站長以原始的Midi檔作為對
照使用,然後將 Midi 檔轉換成VGM檔後,驅動UM3567播放出來的
錄音檔案。
原始的Midi檔案 |
UM3567播放錄音檔案 |
軍隊進行曲 | March |
櫻桃小丸子 | Maruko |
新版素還真 | Suh Hwan Jen |
火影 忍者 | Naruto |
女神事務所 | AMG |
棋靈王片頭 | Hikaru |
[回到上面]
本研究室提供將Midi檔轉換成VGM檔的服務,採用本研究室
獨家開發的轉換程式,完全自動轉換不需人工,轉換後的VGM檔
驅動UM3567的播放品質,近似程度達到原來Midi 檔案的85%以上
,如果是單純伴奏樂器類的Midi檔,近似程度可以達到95%以上。
單首Midi 檔 (Format 0 / 1)
轉換成
VGM檔的收費,Midi檔案播
放時間長度三分鐘以內,一次
NT$ 300元;三分鐘∼六分鐘以內,
一次NT$ 500元;同時加送VGM檔8051組合語言版本驅動程式,已
經編譯成機械碼,長度為 256位元組,定址在0x0000∼0x00FF,並
請註明您所使用的 8051 晶體震盪器頻率為多少、連接 UM3567 /
YM2413的資料匯流排於哪個 I/O埠,以及連接UM3567 / YM2413的
控制線(INI、CS、WR、A0) 於哪個I/O埠位元上,以及您要單次撥
放或是重複播放模式
,如此本研究室才能幫您編譯出專屬您的驅
動程式,如果搭配VGM檔的話,VGM檔資料必須放在 0x0100∼0x
FFFF 的地方 。
另外,如果您沒有 UM3567的話,本研究室提供代
購服務,配合本實驗套件 (Midi 檔轉換成VGM檔的服務)
一起購買
的話,只要再加上NT$
50元;但如果您只是要單買 UM3567的話,
一顆 PDIP-24 包裝的 UM3567 定價為
NT$ 100元,同時贈送 30首的
VGM檔供您驅動之用。
來信時,請將
Midi 檔以電子郵件方式寄至本研究室,本研究
室收到您所寄來的Midi檔後,會馬上將轉換完成後的 VGM檔播放
錄音檔案寄回供您驗證與評估
,如果您對於轉換結果滿意而且沒
有代購UM3567的話,請以ATM 匯款至本站長的郵局帳號
(銀行代
碼 700,帳號為 ) , 然後將您匯款所使用的帳號後
5碼以E-Mail
方式告知本站長,經本站長確認無誤後 ,馬上就將
您所要求轉換的 VGM 檔與8051 驅動程式 ,以電子郵件的方式寄
回給您。
如果您還有請本研究室代購
UM3567 的話,則一律採用郵局
代收貨價郵件方式 (外加郵資NT$100元),您只需將Midi
檔及訂單
寄至站長即可,並不需要事先匯款,不過請您確認您的住址是否
有人可以代收郵件,否則可能會被退件至郵局候領。您的訂單經
本站長確認無誤後,馬上就將您所訂購的實驗套件以郵局代收貨
價郵件方式寄出,郵局所需處理的工作天為三到七天,視您所需
要郵寄地區而定。
訂單範例:
(1)、採用郵局代收貨價郵件方式
姓名:趙錢孫
地址:台北市100中正區子虛烏有路一段 1號
電話:0987-654-321 (郵局規定要留)
Midi檔數量:1首
Midi檔案播放時間長度:三分鐘以內
郵寄方式:代收貨價
8051晶體震盪器的操作頻率:11.0592Mhz
UM3567/YM2413的資料匯流排連接I/O埠:P0
UM3567/YM2413的控制線(INI、CS、WR、A0)連接I/O埠位元
INI連接於I/O埠位元:P2.7
CS 連接於I/O埠位元:P2.6
WR連接於I/O埠位元:P2.5
A0 連接於I/O埠位元:P2.4
播放模式:重複播放
代購PDIP-24包裝的UM3567:一顆
以上所需代收付款金額為 100X1+50X1+100 = NT$ 250整
以上如果您對於付款方式及付款金額,有任何疑問的話,歡
迎來信詢問,謝謝。
[回到上面]