MIDI

提供: ArchWiki
2024年1月16日 (火) 22:06時点におけるKgx (トーク | 投稿記録)による版 (→‎SB Audigy 1 - Emu10k1 WaveTable: 情報を更新)
ナビゲーションに移動 検索に移動

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 ファイルをロードできます。そして、ソフトウェアシンセサイザーを利用する方法は複数存在します。

SoundFonts のリスト

MIDI ファイルを再生または変換できるようにするには、SoundFont が必要です。 これは、公式リポジトリと AUR で利用できるいくつかの SoundFonts のリストです。

FluidSynth Wiki も参照してください。

  • FatBoy — 古典的なビデオ ゲームの MIDI、エミュレーション、および一般的な用途のための無料の GM/GS SoundFonts
https://fatboy.site || soundfont-fatboyAUR
  • FluidR3 — FluidR3 SoundFont
http://www.hammersound.net || soundfont-fluid
  • FreePats — 無料でオープンな一般的な MIDI サウンドセット
https://freepats.zenvoid.org/SoundSets/general-midi.html || freepats-general-midi
  • GeneralUser GS — さまざまなスタイルの音楽に適した、小型でバランスの取れた GM/GS サウンドバンク
https://www.schristiancollins.com/generaluser.php || soundfont-generaluserAUR

再生

"じゃあどうして Windows Media Player では MIDI が再生できるのか?"

Windows にはシステム全体で動作するソフトウェアシンセサイザーがデフォルトで搭載されているためです。ただし近代的なコンピュータとして期待されるだけのクォリティはありません。Linux にもそのようなシンセサイザーがあれば、様々なプレイヤーから MIDI が再生できるようになるでしょう。おそらく MIDI サーバーが Phonon や PulseAudio などのサウンドサーバーの中に搭載される形になります (MIDI サーバーは timidity++fluidsynth などのシンセサイザーを使用することになります)。しかしながら、そのようなシステムは Linux には実装されていないため、シンセサイザーを使って音を鳴らすことができるプレイヤー (xmmsAUR[リンク切れ: パッケージが存在しません]audacious など) を使用するか、シンセサイザーそのものを搭載しているプレイヤーを使って MIDI を再生するしかありません。

ハードウェア

MIDI 対応のハードウェアデバイス (例: ハードウェアシンセサイザー) を使って MIDI ファイルを再生するだけであれば、aplaymidi コマンドが使えます。利用可能な MIDI ポートのリストを確認するには以下のコマンドを使用:

$ aplaymidi -l

上記のコマンドの出力で確認した MIDI デバイスのポートを指定して MIDI ファイルを再生するには:

$ aplaymidi -p 24:0 midi_file.mid

SB Audigy 1 - Emu10k1 WaveTable

まず Synth ミキサーコントロールがミュートになっていないこと、そしてAudigy Analog/Digital output Jack[Off] に設定されていることを確認してください。

alsamixer などのミキサーを使用することで確認・設定できます。

次に、AUR から awesfxAUR パッケージをビルド・インストールしてください。そして、Emux WaveTable に SoundFont ファイルをロードしてください:

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

.SF2 ファイルはどんな SoundFont でもかまいません。Windows の 2GMGSMT.SF2 が使える場合、それを使うこともできます。

これで準備は完了です。aplaymidi で .mid ファイルを再生するには、次のようにする必要があります:

次のコマンドを実行して、使用可能な MIDI ポートのリストを取得します。

$ 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

次に、使用可能な Emu10k1 WaveTable MIDI ポート (この場合は 29:0) を選択し、次のように指定します:

$ aplaymidi -p 29:0 midi_file.mid

ソフトウェア

DeaDBeeF

timidity-freepats[リンク切れ: 置換パッケージ: freepats-general-midi] に含まれている freepats.cfg をインストール・設定することで deadbeef プレイヤーで MIDI ファイルを再生できます。Timidity#Freepats を見てください。DeaDBeeF の Edit > Preferences > Plugins > WildMidi Player > Configure から freepats.cfg ファイルの場所を帰ることもできます。

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_GM2-2.sf2
ノート:

Audacious

audacious には MIDI シンセサイザーが組み込まれており、特に設定をしなくても簡単に MIDI ファイルを再生できます。MIDI 出力プラグインの設定から再生に使用するサウンドフォントを指定できます (File > Preferences > Plugins > Input > AMIDI-Plug > Preferences)。再生に必要なのはプレイヤーとサウンドフォントファイルだけになります。

TiMidity++

MIDI を WAVE に変換したり再生できます。TiMidity++ を参照。

FluidSynth

MIDI プレイヤーと ALSA に MIDI サポートを追加するデーモンです。FluidSynth を参照。

Drumstick

Drumstick MIDI File Player は MIDI ファイルを再生できます。dmidiplayerAUR をインストールして下さい。