MIDI プログラムのための tips

[戻る]

実は時々、会社でインターンシップというのの世話をしています。 詳しいことは話せませんが、大体初日にこんなもん作っているんだよと プラットフォームを説明し、これに何を加えたいか考えてもらい、 身の丈に合った課題に修正させ、後は 10 日前後でそれを実現させてます。

今年の学生は演奏したいといいました。 キーボードの絵を描き、それをマウスでクリックすると音が出る... 本当は、我々が作っているプラットフォーム上でそれを実現させ、 それによって何かが出来るという所がミソなんですけど (そうで無いと単なるプログラミング教室です) ここでは関係ないのでパスします。

音は MIDI で鳴らせばよかんべと思ったのですが、 今までやったことが無く、教える側もいろいろ調べなくてはなりません。 せっかくなので調べた結果をまとめます。ちなみに開発言語は VC++ です。

  1. 音を出す方法

    このページに情報あり。 リンク切れが起きた場合に備えキーワードを並べると 要は midiOutOpen でオープンし、midiOutShortMsg で音データを送り midiOutClose で閉じる。

  2. 楽器番号

    midiOutShortMsg で例えば 0x01c0 を送ると、チャンネル 0 の楽器がピアノに なります。01 がピアノの楽器番号、c が楽器選択、最後の 0 がチャンネル。 この楽器番号ですが、正確には音色番号と言うらしく、 この辺 に対応表がありました。

  3. ファイル保存

    せっかくなんで、演奏したデータをファイルに保存したいと考えます。 まぁいつどんな音を出したか(止めたか)を保存し再生すれば済む話ですが、 せっかくなんで汎用的な書式にできないかと思いました。 調べた所 Windows では拡張子 MDI というファイルがあるようで Media Player で再生することができます。

    この MDI ファイルの書式ですが SMF (Standard MIDI Files) 形式というもので書かれているそうです。 この辺 に詳しい説明が書かれていました。

    要は

  4. 外部入力

    キーボード (鍵盤) 等の MIDI 楽器から入力する際の情報は こちらに 書いてある。 上手く初期設定すると、キー操作に従い MM_MIM_DATA メッセージが流れてくる。


2004.11