出自 Arch Linux 中文维基

MIDI 本身是"樂器數字接口"(Musical Instrument Digital Interface)的縮寫,是樂器與任何能理解這種語言的設備之間的通信協議和標準。它可以用來控制一系列合成器,讓鐵罐發出鼓的聲音,甚至操作工業設備。

不過,本文的討論範圍主要集中在計算機系統中使用 MIDI 播放包含 MIDI 數據的文件。這些文件的擴展名通常為 .mid,在多媒體計算機共享音樂的黃金時代大受歡迎。在專業音樂創作/編曲中,它仍然發揮著重要作用。

MIDI 文件

在此不贅述該格式的具體內容,只需了解 MIDI 文件(如 foobar.mid )不包含任何數字音頻數據,因此沒有 "PCM 流"。一個常見的誤解是,MIDI 是一種聲音文件格式,因此人們通常會抱怨音樂播放器應用程式無法播放該文件。下面是一個非常適合初學者的 MIDI/MID 文件概述:

# FOOBAR.MID
Note ON
  Use Instrument #1
  Play Note C1
  Set Volume at 100
  Set Pitch at 50

為了讓這樣的文件發揮作用,需要有一個"引擎"能將數據轉化為音樂。這個引擎有一個"音色發生器",也就是我們所說的"合成器"。因此,任何可以在沒有 MIDI 功能硬體(計算機的聲音設備)的情況下播放 MIDI 文件的播放器都內置或使用外置合成器。一個典型的鍵盤(不是你正在打字的鍵盤)實際上由兩部分組成——一個 MIDI "控制器"(琴鍵)和一個合成器(音調發生器/模塊;發出聲音的東西)。

所以,到此為止,您應該能夠理解:

  • 需要有一個合成器來播放 MIDI 文件。
  • 合成器可以是硬體,也可以是軟體。
  • 大多數計算機音效卡/晶片組都沒有合成器。
  • 您需要一台擁有適當"音色庫"(音色集合)的合成器,才能盡享 MIDI 文件的魅力。
  • 如果音色庫中沒有某種樂器,那麼合成器將不會使用該樂器演奏任何音符。
  • 如果文件中的某一樂器與音色庫中的另一樂器相對應,合成器就會發出不同的聲音(顯而易見)。

General MIDI 音色庫

General MIDI(GM)是對許多 MIDI 相關事項進行標準化的規範,特別是聲音集合中的樂器布局。與General MIDI 兼容的"音色庫"意味著它符合 General MIDI 的標準,只要 MIDI 文件也與 General MIDI 兼容(沒有特別的規定,如引入新的樂器或將樂器放在音色庫的不同位置),重放就會按預期進行,因為音色庫為 MIDI 信息/事件提供了正確的樂器/處理程序。最流行的音色庫格式之一是 SoundFont,尤其是 SF2。另一種流行格式是 Gravis UltraSound(GUS)補丁文件。

  • 如果您的音效卡可以使用 SoundFont,您可以將 .sf2 文件加載到音效卡上。
  • 如果沒有可以使用音色的音效卡(基本上沒有硬體合成器),可以使用軟體合成器並加載 SF2 文件。反過來,您也可以想辦法在全局範圍內使用該合成器。

SoundFont 列表

  • FatBoy — 用於經典視頻遊戲 MIDI、模擬和一般用途的免費 GM/GS SoundFont。
https://web.archive.org/web/20220124174052/https://fatboy.site/ || soundfont-fatboyAUR
  • Fluid — Frank Wen 的專業級 GM/GS soundfont。
https://web.archive.org/web/20020804030405/http://www.jazzybee.com/fluid/ || soundfont-fluid
  • FreePats — 自由開放的通用 MIDI 聲音集。
https://freepats.zenvoid.org/SoundSets/general-midi.html || freepats-general-midi
  • GeneralUser GS — S. Christian Collins 製作的與 GM 和 GS 兼容的 SoundFont 庫,用於作曲、播放 MIDI 文件和復古遊戲。
https://www.schristiancollins.com/generaluser.php || soundfont-generaluserAUR

AUR 中還有許多其他 SoundFonts,例如:search for soundfont-。另請參閱 FluidSynth Wiki

Gravis UltraSound patch 列表

  • FreePats (legacy) — FreePats 通用 MIDI 音效集的舊版本,最初由 Eric A. Welsh 製作。
https://freepats.zenvoid.org/SoundSets/general-midi.html#OldFreePatsGM || freepats-legacyAUR

SoundFonts 可通過 unsf-gitAUR 軟體包中的命令行工具 unsf 轉換為 Gravis UltraSound 補丁集。

硬體播放

這篇文章的某些內容需要擴充。

原因: More details on soundcards and MIDI, possibly links to SBLive MIDI here... (在 Talk:MIDI 中討論)

If you simply need to play a MIDI file on a MIDI-capable hardware device (e.g. a hardware synthesizer), you can use the aplaymidi command from alsa-utils.

To get the list of the available MIDI ports, use the command

$ aplaymidi -l

Then to play a MIDI file, specify it along with an available port of the preferred MIDI device that you got from the output of the previous command. For example like this:

$ aplaymidi -p 24:0 midi_file.mid

SB Audigy 1 - Emu10k1 WaveTable

First, make sure that the Synth mixer control is not muted and that Audigy Analog/Digital output Jack is set to [Off].

To check and adjust them, use alsamixer or your mixer of choice.

Next, build and install the awesfxAUR package from the AUR. Then, load a SoundFont file on the Emux WaveTable, like so:

$ asfxload /path/to/any/file.sf2

The .SF2 file can be any SoundFont. If you have access to 2GMGSMT.SF2 on Windows, you can use that one.

You should be all set now. To play your .mid files with aplaymidi, you will have to do as follows:

Get a list of the available MIDI ports by running

$ aplaymidi -l
Port    Client name                      Port name
14:0    Midi Through                     Midi Through Port-0
28:0    SB Live! 5.1 [SB0060]            EMU10K1 MPU-401 (UART)
29:0    Emu10k1 WaveTable                Emu10k1 Port 0
29:1    Emu10k1 WaveTable                Emu10k1 Port 1
29:2    Emu10k1 WaveTable                Emu10k1 Port 2
29:3    Emu10k1 WaveTable                Emu10k1 Port 3

Then, pick an available "Emu10k1 WaveTable" MIDI port, in this case 29:0, and specify it as such:

$ aplaymidi -p 29:0 midi_file.mid

軟體播放

"那為什麼我可以用 Windows Media Player 播放 MIDI?"

這是因為 Windows 有一個默認的全局軟體合成器。即便如此,它也無法達到現代電腦應有的質量。如果有辦法在 Linux 上做到這一點,你也可以從任何播放器回放 MIDI。也許可以在聲音伺服器中安裝一個 MIDI 伺服器(可容納所選的合成器),如 Phonon 或 PulseAudio。不過,目前還沒有實現這類功能,你只能用帶有合成器源插件或合成器本身的播放器或聲音伺服器播放 MIDI。

合成器

FluidSynth

為 ALSA 添加 MIDI 支持的 MIDI 播放器和守護進程。它只支持 SoundFonts。請參閱 FluidSynth

TiMidity++

MIDI 轉 WAVE 轉換器和播放器。它支持 SoundFonts 和 Gravis UltraSound 補丁文件。請參閱 Timidity++

WildMIDI

WildMIDI 是一款簡單的 MIDI 播放器軟體。它使用 Gravis UltraSound 補丁文件將 MIDI 文件轉換為音頻。目前還不支持 SoundFonts。[1] 要使用它,需要一個指向 GUS 補丁的配置文件 wildmidi.cfg(5)

/etc/wildmidi/wildmidi.cfg
dir /path/to/any
source /path/to/any/timidity.cfg

配置文件格式大多與 TiMidity++ 兼容。

您可以簡單地使用 WildMIDI 播放 MIDI 文件:

$ wildmidi example.mid

將 MIDI 文件轉換為 WAV 格式:

$ wildmidi example.mid -o example.wav

更多選項請參見 wildmidi(1)

Players

GStreamer-based players

MIDI files can be played in GNOME Videos and all other players using GStreamer as backend after having installed gst-plugins-bad and a SoundFont (soundfont-fluid for example). It uses FluidSynth as synthesizer and picks up the first usable SoundFont from the /usr/share/soundfonts/ directory.

VLC

The FluidSynth plugin provides MIDI playback support for VLC using FluidSynth as synthesizer. A SoundFont needs to be installed, and VLC will detect it automatically. If multiple SoundFonts are installed, you can choose one in VLC preferences (Tools > Preferences): you have to show all settings. Then, go to Input/Codecs > Audio codecs > FluidSynth.

And, if you installed e.g. Fluid, set the location to:

/usr/share/soundfonts/FluidR3_GM.sf2

Audacious

The AMIDI-Plug from the audacious-plugins package provides MIDI playback support for Audacious using FluidSynth as synthesizer. You can specify the SoundFont to use for playback in the settings of its MIDI output plugin (File > Preferences > Plugins > Input > AMIDI-Plug > Preferences).

DeaDBeeF

deadbeefAUR player is able to play MIDI files via its WildMidi player plugin. It does not support SoundFonts, just Gravis UltraSound patch files. You can specify the configuration file location in DeaDBeeF by going to Edit > Preferences > Plugins > WildMidi Player > Configure.

Drumstick

Drumstick MIDI File Player is able to play MIDI files using FluidSynth as synthesizer. Install dmidiplayerAUR.