Midi檔轉VGM檔服務

[回到前頁]  

1、Midi檔簡介

2、VGM檔簡介

3、VGM檔規格簡介

4、VGM檔驅動流程

5、VGM檔播放DEMO

6、Midi檔轉VGM檔服務與訂單範例

  Midi 已經問世超過二十年,早在1983年時,一群合成音樂的
樂器製造者共同討論協商後所發表的一種劃時代數位音樂規格,
它包含數位音樂樂器、數位音樂傳輸介面與數位音樂儲存格式等
標準,作為今後有關數位音樂的創作、製造與儲存的參考規格,
因此這也是為什麼目前在各型彼此不相容電腦間,卻還能彼此分
享數位音樂資料的緣故,目前Midi 的兩大陣營為RolandYamaha
,他們在共同的 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整

 

  以上如果您對於付款方式及付款金額,有任何疑問的話,歡
來信詢問,謝謝。

[回到上面]