プログラミングができる人でMIDIファイルがどんなものなのか知らない人が多いと思うので
MIDIファイルの簡単な説明と方針を示しておきたいと思います
MIDIファイルには音のデータがファイルに直接保存されているわけではありません。
MIDIファイルの保存内容について例えるならば、それは楽譜です。少し専門的にいえばスコアです。音の高さや強さ、楽器などのデータが入っているのです。(後で説明を加えますが、正確には楽譜のような形では保存されていません)
現在広く使われている音楽の形式であるmp3ファイルには、直接音が保存されています。したがってかなりファイルサイズの大きいものになりますが、MIDIファイルではそのようなことはありません。音楽の形式にはこれらの二種類に大きく分けることができます。wavやwmaといったものはすべて音を保存しています。
現在音を保存するものが広く使われている点には様々な理由があります。まず一つに音で保存することでどの環境で聞いてもほぼ同じものが聞けるということです。先ほども言ったようにMIDIは楽譜だけが記録されているのです。したがって、演奏するパソコンによって音が大きく変わってしまいます。また、音を保存する技術の向上が挙げられます。mp3以前wav形式を使っていたころはそれなりの音質を保ったまま1曲(約5分)を保存するのに50MBも必要でした。また、ハードディスクの大容量化やネットの高速化によってもはや音楽ファイルというのがそれほど大きなものではなくなってしまったことも挙げられます。
上にあげたようにMIDIの一般的な音楽ファイルとしての需要はだいぶ減りつつあります。(それでも筆者はMIDIファイル結構好きなんですけど・・・)かといってなくなってしまうかというと、そんなことは決してないでしょう。現在では特に音楽家の間で広く使われています。
MIDIを使うことの利点のひとつに、編集が容易といったことが挙げられます。音のファイルに保存してある音の高さを上げようと思ったら、波形をいじって変換しなければりませんが、MIDIファイルのように楽譜のような形で保存してあれば、すぐに書き換えられるというのは想像しやすいでしょう。また、鳴らしている楽器を変えたいときも楽譜のような形ならば最初の部分を少し書き換えるだけで簡単にできます。このような点は作曲家などにとってはとても有利に働きます。
次に、音の高さや長さといった情報が標準化してあるので、電子楽器などでも使われています。キーボード(シンセサイザー)で押した音をパソコンで出したい場合、その間の通信はMIDIで行われることが一般的です。こうすることで、リアルタイムな演奏をパソコンに瞬時に取り込めたり、パソコン側で音色を変えてやることもできるのです。
では、MIDIについてだいぶ語ったところでプログラミングの話をします。まず、先ほどからMIDIは楽譜のような形式で保存していると言っていますが、実際に楽譜のまま保存されているわけではありません。MIDIファイルの中身はとてもプログラム的な形で保存されているのです。どういうことかというと「ドの音をならせ」などといった命令の羅列なのです。
命令の例
音をならせ |
音を止めろ |
コントロール(音量を変えろetc) |
この様な命令が延々と並んでいるのです。ここで注意するのは「音をならせ」「音を止めろ」の二つの命令があるということです。 つまり、鳴らした音は止めなければずっとなり続けているということです。 さらに、これらの命令には「何を」に当たる部分が抜けていますこれらは命令によって異なるので命令のすぐ後に書かれます。 (プログラミングで言うなら引数のような形をとります)
また、プログラミングとは異なり、MIDIでは「時間」という概念が必要になります。
これらは命令の前に書かれますが、デルタタイムと呼ばれる特殊な時間の表し方をしており、
これはミリ秒と変換可能な量です。これらを考えるとMIDIファイルの例は下のようになります
時間 | 命令 | 引数 |
0 | セットアップ | |
10 | コントロール | 音量=100 |
0 | 音をならせ | 音=ド 強さ=100 |
1000 | 音を止めろ | 音=ド 強さ=100 |
0 | 音をならせ | 音=レ 強さ=100 |
1000 | 音を止めろ | 音=レ 強さ=100 |
0 | 音をならせ | 音=ミ 強さ=100 |
1000 | 音を止めろ | 音=ミ 強さ=100 |
これを実際にはバイナリで出力することになります。
このような作業を続けているとアセンブラ言語を使っているような感覚になります。
かなりしんどい作業でしたが、やり応えのあるものです。ここでは大まかな仕様しか説明していませんので、実際にはもう少し詳しいページを参照してください。