王者之路 史詩即時策略對戰遊戲快狠準的絕招!最具遊戲性的三國網遊!化身十把刀,編劇班台北開課
ryanluo ( ryanluo )
Lv. 9 | 文章數:199 | 推薦數:104 | 被推數:204 #1. 2016-11-30 15:56:10
想跟大家討論一下 DOSBox 的 MIDI

以前我對遊戲音樂的認知是有聲音就好
也不曾聽過高檔音源器的聲音來作比較

直到最近重新整理一些遊戲, 發現有的遊戲會混合 Wave 音樂跟 MIDI音樂,
當初竟然沒發現我的模擬其實MIDI輸出部份根本沒聲音
才開始認真研究 MIDI, 被什麼 MPU-401, MT32, FM音源...等名詞搞得很混亂
所以想借此提出我研究後的認知跟大家討論, 認知若有錯誤請不吝指正

-----------------------------------------------------------------------------------
* 我想先搞清楚架構, 這張方塊圖簡單的描述了 SB16 卡的音樂路徑

1

中間是DOSBOX模擬的 SB16卡, Conf 中包含上半部 [midi] 下半部 [sblaster] 兩個區塊
(DOSBox好像沒有模擬錄音的路徑)

遊戲輸出的聲音大概就三個種類
1.語音, 音效, 像錄音檔, 含實際的聲音內容, 檔案大 (或習慣稱 Wave)
2.MIDI音樂, 像樂譜, 檔案小
3.CD音樂, 像錄音檔, 含實際的聲音內容, 檔案大

聲音檔與CD音樂經由處理器, 混音器, 最後就變成類比信號透過喇叭讓我們聽到
MIDI檔有兩條路, 一條經處理器送到 MIDI 介面用數位信號輸出, 需要外部的音源器才會變成聲音
另一條路是經由內建的 "FM音源合成器 Synthesizer", 混音器, 最後就變成類比信號透過喇叭讓我們聽到這個FM音源合成器代表的即是與魔奇音效卡相容的 Adlib (Opl2/Opl3), 是 MIDI 之前的產物
我們剛說 MIDI像樂譜, 音源器的功能就是將樂譜變成音樂, 等下我們再來詳談

什麼聲音要走哪條路還需要驅動程式來打通, 每個硬體需有驅動程式才能使用
DOS遊戲一般都會自帶驅動, 玩家只能從遊戲提供的選項選擇
但WINDOWS提供更彈性的選擇, 來解決不同的外部音源器相容性問題


-----------------------------------------------------------------------------------
* 接下來我們用 Win31 的 "MIDI變換程式" (MIDIMAP) 比較好理解,
2

MIDIMAP 是扮演你的遊戲與硬體驅動之間的橋梁 實際上包含三個功能
1.通道轉換 Channel remapping
2.樂器對應 Instrument patch 修補程式
3.琴鍵對應 Key patch
因應 非標準 GM 外部音源器 不同的通道, 樂器, 琴鍵定義來做轉換
標準 MIDI GM (General MIDI) 定義了標準的 通道, 樂器, 琴鍵 對應
如果依循GM的定義標準 就不需要特別轉換

-- 通道轉換
Src 通道:代表遊戲輸出音樂的通道
Dest通道:代表硬體驅動程式的通道
連接埠  :代表硬體驅動程式

如果是 標準GM 的外部音源器 Src 通道與 Dest通道 就可以設為 1:1
這個例子是非標準 GM 外部音源器 MT32
因為 MT32 的通道為 2-9+10 所以設定為 1>2 2>3 .... 8>9 10>10
通道10專門給打擊樂用
假設你的音樂用了兩個通道 1 (主旋律) 跟 2 (伴奏)
若你將通道一比一將信號送到 MT32, 就會發現 主旋律不見只剩下伴奏
因為 MT32 沒有通道1, 你的通道1送過去沒法反應

接下來看連接埠, 代表硬體驅動程式
你有 SB16 卡掛上 SB16 驅動程式 連接埠裡就會看到選項

SB16驅動有兩個
SB16 MIDI Out              指的是連到外部音源器的路徑
Creative Music Synthesizer 指的是連到內部FM音源器的路徑

Win31驅動程式可以加掛 LAPC1 或 MPU-401 驅動 A330 IRQ2/9
實體的 SB16 卡支援的是陽春版 MIDI (Uart模式)
實體的 MPU-401卡支援的是完整版 MIDI (intelligent 模式)
所以透過 SB16 MIDI 跟透過 MPU-401 通道可能不同

我們常聽到的 MPU-401 "相容", 現在可以把它理解成一個 MIDI硬體介面
DOSBOX 把 MIDI介面模擬成 MPU-401相容的 intelligent 模式
而且 DOSBOX 也只模擬一個 MIDI硬體
所以 SB16 MIDI 驅動跟 MPU-401 驅動最後驅動的是相同的模擬硬體
為了節省記憶體 MPU-401的驅動就不要掛
Win31掛驅動用的好像是跟DOS一樣的 1M 記憶體
就是不管 memsize 改多大都用不到只能用 1M記憶體
驅動掛太多常會記憶體不足, 沒必要的驅動不要掛

-- 樂器對應 Instrument patch 修補程式
MT32的樂器碼跟 GM的樂器碼 不一樣, 所以需要轉換
弄錯的話會發生原曲應該是鋼琴跑出來變喇叭之類
修補程式通常會有兩組, 以Win31內建為例
MT32      (Melodious  旋律)
MT32 Perc (Percussion 打擊樂)
通道10專門給打擊樂用, 使用不同的修補程式
要怎麼知道你的樂器設定對不對?
跟 SB16 Synth 出來的音樂比 理論上 SB16 Synth 會比較正確

-- 琴鍵對應 Key patch
這個沒研究, 好像是電子鍵盤的琴鍵定義轉換, 遊戲應該用不到


* 關於音源器

不同音源器支援的樂器不同
要看當初作曲用的是哪種音源器才能有最佳表現
像有個遊戲 "西遊記 Pilgrimage" 開場曲
用電腦預設的 MS GS 音源就聽得到鑼聲
用 MT32 或 Ultrasound 就無法表現
搭配 MT32 節奏還有些問題
所以不同遊戲要找到適當的音源才能完美表現

-----------------------------------------------------------------------------------
* Win95 的 MIDIMAP

Win95 是透過 IDF 樂器檔來達成 MIDIMAP 的部份功能
Win95預設為標準GM樂器
C:\WINDOWS\CONFIG\GENERAL.IDF

需在上網找到 IDFEDIT 的程式才能進行編輯或定義新的 IDF
但很不幸的, IDF只提供 樂器對應 琴鍵對應 功能, 通道只能1:1無法轉換
所以如果你接了外部音源 MT32, 聲音無法正常播放

那怎麼辦?

方法1:
ROLAND 提供 MT32 to GM 的轉換,
http://www.rolandus.com/support/general_apps_tools/1713

但補丁是 .MID 檔的形式, 裡面含有 SysEx 碼
用 MPlayer 直接撥放後 通道樂器就修正好了
Win31 Win95 都適用
但關機就reset, 每次開機都要撥放一次,
可以將MID檔放在 "啟動"資料夾中 每次開機自動撥放

方法2:
使用Win31版的 MIDIMAP

將 Win31 C:\WINDOWS\SYSTEM\

MIDIMAP.CFG 不改名
MIDIMAP.DRV 改名為 MIDIMAP.W31

兩個檔放到  Win95 C:\WINDOWS\SYSTEM\

再修改  Win95 C:\WINDOWS\SYSTEM.ini

[drivers]
midi2=midimap.win31

控制台>多媒體>MIDI 就可選MIDI變換程式
控制台>MIDI變換程式 (注意中英文版不同) 可進行修改
注意連接埠驅動不要再選"MIDI變換程式", 這樣會變成自己輸入到自己

-----------------------------------------------------------------------------------
* DOSBOX 環境下的 MIDI
3

MIDI要有聲音需有音源器, 有幾種模式
1.選 SB16 Synthesizer 內建音源 (DOSBox模擬)
2.選 SB16 MIDI Out    外部音源 (DOSBox丟到你的電腦處理)  
  a.實體音源器 (需有驅動)
  b.你的電腦上的虛擬音源 .. 微軟內建 MS GS Wavetable Synth  
                                           .. 軟體模擬音源器 (Munt, BassMIDI, VirtualMIDISynth VSC88 ..)

  DOSBox 命令 mixer/listmidi
  可以列出你的電腦上的音源器 (含實體音源器) 號碼

  修改DOSBox設定
  mididevice=default    ..... DOSBox丟到你的電腦處理
  midiconfig=1          ..... 填入你想要音源器號碼   (若空白或0為你電腦預設的音源器)

  Win7以上系統無法改變 預設的音源器, XP 可以改變, 但更改後號碼會變, 預設的那個號碼為0         

3.選 SB16 MIDI Out 外部音源, DOSBox-0.74-Daum 版可模擬 MT32 音源
  修改DOSBox設定
  mididevice=mt32   ..... DOSBox模擬 MT32 音源 (來源自Munt?)

  然後還需要找到兩個 MT32 ROM 丟進 DOSBox 目錄中
  MT32_CONTROL.ROM
  MT32_PCM.ROM
  或
  CM32L_CONTROL.ROM
  CM32L_PCM.ROM

  * 這個模擬聲音很小聲, 不知有沒有解決辦法? (ScummVm 用同樣引擎也有同樣毛病)
  * DOS遊戲的MIDI支援如美少女夢工廠2 MT32會標為 LA 標準MIDI標為 GM

4.DOSBox Ultra Sound 音卡模擬

  DOSBox可以模擬另一張 Ultrasound 音卡, 他有自己的音源, 放在 C:\UTRASND\MIDI 目錄中,
那些.PAT檔即是樂器的聲檔,  有殘響, 效果比FM音源好點, 但一樣要看遊戲,
如果遊戲原本以 FM音源設計, 反而 FM音源表現會比較好

  Win95可掛Win31的驅動或Win95的驅動,
  Win31 + DOSBox 0.72 可直接安裝
  Win31 + DOSBox 0.74 驅動安裝程式會檢查硬體, 無法通過檢查無法直接安裝, 需繞點遠路
有機會再說


5.在 Guest上 跑虛擬音源

  如果你用 DOSBox 模擬 Win95, 也許有機會用 VSC55 軟體音源, 我沒試過, 不知跑不跑得起來

-----------------------------------------------------------------------------------
* 最後提供檔案讓有興趣的人可以直接測試

1.DOSBox Win31 + UltraSound
2.DOsBox Win95 + UltraSound + Win31MIDIMap
3.大唐詩錄 一般版

* C:\MT2GM 為Roland官方MT32補丁, 可供MT32測試, 撥放MTGM.MID 即可或可加 MTR-STND.MID
* 大唐詩錄為文森大之前提供的, 為一般版, 就我所知另有超強版 (金學版), 如有人能提供感激不盡
  網路上的簡體版為超強版, 進入「見龍在田」可選「展示版」「提示版」「金學版」, 說明書有說明

這個遊戲語音錄的不錯, 沒有雜音
但 MIDI 部份若設外部音源, 我在兩台電腦上測, 一樣用 MS GS 音源 一台有聲音 一台沒聲音
若用 MT32, 在Win31下 第二畫面魚夫那裏明顯樂器錯誤 用了MT2GM就OK
但Win95下同樣的 MIDIMAP MT32修補程式沒問題
真的很妙


  • 1
  • 2
  • 3
▼ 顯示全部圖片
ryanluo ( ryanluo )
Lv. 9 | 文章數:199 | 推薦數:104 | 被推數:204 #2. 2016-12-01 08:48:11
補充一下
1.DOSBox 內建 MT32 聲音太小的問題
使用 DOSBox 命令
mixer mt32 400 .......... 400 代表 400%, 以此類推

2.上面談到 MIDIMAP 修補問題, 都是預設遊戲音樂是 GM 標準, 所以外接非 GM 標準音源器就需要轉換
但有可能原本音樂就是 MT32 標準, 若外接MT32就不需轉換了, 這種情況很少就是
Roland 有個 GS to MT32 補丁就是為了這個目的吧


ryanluo ( ryanluo )
Lv. 9 | 文章數:199 | 推薦數:104 | 被推數:204 #3. 2016-12-04 07:49:52
發現 DOSBox SVN Daum 版可以模擬用 SoundFont 的音源器

[midi]
mididevice=synth
midiconfig=SGM-V2.01.sf2

MIDIMAP 記得選外部 MIDI (W31:SB16 MIDI All, W95用預設的MPU-401)

這真的太好了, 可以選適合的樂器檔 (SF2格式)
注意 SoundFont 檔名不要空格或太長可能掛載失敗
注意 SoundFont 的樂器標準, 一般現在都是 GS
注意太大的SF2檔音質好但可能影響效能
網路上有不少free SoundFont 可抓, 如果是 sfark檔需用 sfArk解壓


asus1610 ( 老頑固 )
手機認證徽章基地新手榮譽徽章雙十國慶紀念徽章值日生值日模範生基地15週年慶紀念徽章2015羊年紀念徽章基地16週年慶紀念徽章猴年限定徽章
Lv. 22 | 文章數:626 | 推薦數:409 | 被推數:2131 #4. 2016-12-09 15:53:43
感謝分析.對電子音樂想了解的朋友很有幫助!
早期遊戲80年代用的mid音色都很簡單大約8-10個音.
也因為這樣都是自己獨特的方式撥放.在現今不太能解析出來.
而90年後音效卡的出現加上可以插擴充小卡及模擬部分音源器音色.
才有mt32.gm這些標準規格出現.而gs是90後期至今的mid標準規格.
就我以前知道的知識.年代久遠不一定正確也懶的求證.mt32最高
128個音色gm 350個 gs 700個.那音色越多有甚麼特別?舉一個常見的
列子.電視上常見的綜藝節目不是一台電子琴就能完整表現出一首歌曲
的旋律?除了基本音樂還能加上鼓聲水晶音樂等等的音效?就是這麼神奇!
if4 ( 逍遙遊 if )
板主家族板板主Pow瓦紀念徽章2017年端午節活動紀念徽章2017母親節限定徽章傳說中的模範值日生無敵模範值日生超級模範值日生三星模範值日生二星模範值日生值日模範生值日生元旦紀念徽章元旦紀念徽章雙十國慶紀念徽章
Lv. 46 | 文章數:14055 | 推薦數:9560 | 被推數:2974 #5. 2016-12-09 17:05:50
最近忘了不知道在哪看見有人用 Pi(π)3.1415926535...(先定義0,1,2,3,4,5,6,7,8,9 各音階)然後彈奏了一首不錯聽的曲子,只是不知道他有沒有能彈完 XDDD

嗯...找到了...特地分享出來 :)
caola ( masoawsa )
Lv. 5 | 文章數:12 | 推薦數:0 | 被推數:0 #6. 2017-05-07 17:53:03



記憶體不足, 沒必要的驅動不要掛

-- 樂器對應 Instrument patch 修補程式
MT32的樂器碼跟 GM的樂器碼 不一樣, 所以需要轉換

[drivers]
midi2=midimap.win31LA 標準MIDI標為 GM

MT32, 就會發現 主旋律不見只剩下伴奏
因為 MT32

外部音源器 Src 通道與 Dest通道 就可以設為 1:1
這個例子是非標準 GM 外部音源器 MT32

驅動程式
你有 SB16 卡掛上 SB16 驅動程式 連接埠裡就會看到選項

SB16驅動有兩個
SB16 MIDI Out
介面用數位信號輸出, 需要外部的音源器才會變成聲音
另一條路是經由內建的 "FM音源合成器 Synthesizer",

Adlib (Opl2/Opl3), 是 MIDI 之前的產物
我們剛說 MIDI像樂譜, 音源器的功能

只能從遊戲提供的選項選擇
但WINDOWS提供更彈性的選擇,

特別轉換

-- 通道轉換
Src 通道:代表遊戲輸出音樂的通道
Dest通道:代表硬體驅動程式的通道
連接埠 :代表硬體驅動程式



IRQ2/9
實體的 SB16 卡支援的是陽春版 MIDI (Uart模式)
實體的 MPU-401卡支援的是完整版 MIDI (intelligent 模式)
所以透過 SB16 MIDI 跟透過DOSBox Ultra Sound 音卡模擬

DOSBox可以模擬另一張 Ultrasound 音卡, 他有自己的音源, 放在 C:\UTRASND\MIDI 目錄中,
那些.PAT檔即是樂器的聲檔, 有殘響, 效果比FM音源好點, 但一樣要看遊戲,

快速回覆 | 註冊 使用完整編輯模式回覆
討論板頭像 [ 設定 ] |簽名檔 [ 設定 ]
有人回覆時通知我 【通知管理