MIDI
MIDI は "Musical Instrument Digital Interface" の略であり、楽器と言語を解するデバイスで通信するためのプロトコルであり標準です。MIDI を使うことで、ずらりと並んだシンセサイザーを制御したり、缶でドラムのような音を奏でたり、産業機器を制御することもできます。
ただし、この記事ではあくまでコンピュータシステム上で MIDI を使用して MIDI データを含むファイルを再生することだけを説明します。MIDI データを含むファイルは .mid 拡張子が付いており、マルチメディアコンピューティングの絶頂期には音楽を共有するために大いに使われていました。今でも、プロが作曲したり編曲するのに重要な役割を持っています。
目次
MIDI ファイル
フォーマットが何から構成されているのか詳細を説明する前に、MIDI ファイル (例: foobar.mid) にはデジタル音声データ ("PCM ストリーム") が何も含まれていないということを理解する必要があります。MIDI が一つの音声ファイルのフォーマットであるというのはよくある誤解であり、Amarok などの音楽プレイヤーが MIDI ファイルを再生できないことに文句をつけている人々をみかけることもしばしばあるでしょう。初心者がわかりやすいように MIDI/MID ファイルに何が含まれているのかまとめると以下のようになります:
# FOOBAR.MID Note ON Use Instrument #1 Play Note C1 Set Volume at 100 Set Pitch at 50
このようなファイルを利用するには、データを音楽に変換できる"エンジン"が必要になります。このエンジンには"音源"が含まれており、これがいわゆる"シンセサイザー"と呼ばれるものです。従って、シンセサイザーが入っている、または外部のシンセサイザーを使用できる MIDI 対応のハードウェア (コンピューターのサウンドデバイス) がないかぎり、どんなプレイヤーでも MIDI ファイルを再生することはできません。標準的なキーボード (タイピングをする方ではありません) は実際は2つのコンポーネントから構成されています。MIDI "コントローラー" (鍵盤) とシンセサイザー (音源/モジュール; 音を作るもの) です。
ここまで来れば、以下のことが理解できるはずです:
- MIDI ファイルを再生するにはシンセサイザーが必要。
- シンセサイザーはハードウェアまたはソフトウェアである。
- ほとんどのコンピューターのサウンドカード/チップセットにはシンセサイザーが搭載されていない。
- MIDI ファイルを楽しむためには適切な"音源" (音のコレクション) とシンセサイザーが必要になる。
- 音源に特定の楽器が含まれていない場合、シンセサイザーはその楽器を使用する音はすべて再生できない。
- ファイル内の特定の楽器が音源の楽器と異なる場合、シンセサイザーから流れる音は (明らかに) 異なったものになる。
GM 音源
General MIDI (GM) は MIDI 関連の様々なこと、特に音のコレクションにおける楽器のレイアウトについての標準仕様です。GM 対応の"音源"とは General MIDI の基準を満たしていることを意味し、MIDI ファイルも GM 対応であれば (仕様から外れることが定義されていない、つまり新しい楽器や音源と異なるレイアウトが使われていない)、MIDI メッセージ/イベントに対応する正しい楽器/ハンドラを音源が用意できるので期待通りに再生されます。最も有名な音源フォーマットの一つとして SoundFont があり、特に SF2 がよく使われています。
- soundfont を利用できるサウンドカードを使っている場合、.sf2 ファイルをサウンドカードにロードさせることができます。
- soundfont を利用できるサウンドカードを持っていない場合 (基本的にハードウェアシンセサイザーはありません)、ソフトウェアシンセサイザーを使って SF2 ファイルをロードできます。そして、ソフトウェアシンセサイザーを利用する方法は複数存在します。
再生
"じゃあどうして Windows Media Player では MIDI が再生できるのか?"
Well, because Windows has a default software synthesizer which acts globally. Even then, it lacks the quality which should be expected of modern computers. If there were a way to do it on Linux, you would be able to play back MIDI from any player too. Perhaps a MIDI server (which will hold a synthesizer of choice like timidity++ or fluidsynth) that sits within the sound server, like Phonon or PulseAudio. Nevertheless, nothing of this sort has been implemented and you can only play MIDI with a player that has a plug-in to source a synthesizer (for example xmmsAUR or audacious or has a synthesizer itself.
ハードウェア
(More details on soundcards and MIDI, possibly links to SBLive MIDI here...)
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. If you want to play your .mid files in Audacious, you will need to configure it as follows:
- File > Preferences > Plugins > Input > AMIDI-Plug > Preferences
- AMIDI PLug (tab) > Backend selection > ALSA Backend
- ALSA Backend (tab)
- 17:0 Emu10k1 WaveTable Emu10k1 Port 0
- 17:1 Emu10k1 WaveTable Emu10k1 Port 1
- 17:2 Emu10k1 WaveTable Emu10k1 Port 2
- 17:3 Emu10k1 WaveTable Emu10k1 Port 3
- Mixer settings > Soundcard > SB Audigy 1 [SB0092]
- Mixer control > Synth
ソフトウェア
Totem (GNOME Videos) や Rhythmbox などの GStreamer ベースのプレイヤー
gst-plugins-bad (fluidsynth が依存パッケージになっています) をインストールして Fluidsynth に音源を設定することで、gstreamer をバックエンドとして使う GNOME Videos などのプレイヤーで MIDI ファイルを再生することができます。詳しくは FluidSynth を見て下さい。
VLC
Sound Font ファイルの場所を設定することで VLC で MIDI ファイルを再生することができます。先に、音源と fluidsynth パッケージをインストールする必要があります。
VLC を開いて:
Tools > Preferences
全ての設定が表示されるようにしてください。そして、Input/Codecs -> Audio codecs -> FluidSynth を開いてください。
例えば wiki に書かれているように fluidr3 をインストールした場合は、以下の場所に設定します:
/usr/share/soundfonts/fluidr3/FluidR3GM.SF2
TiMidity++
MIDI を WAVE に変換したり再生できます。TiMidity++ を参照。
FluidSynth
MIDI プレイヤーと ALSA に MIDI サポートを追加するデーモンです。FluidSynth を参照。