2013.3.8
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第339回]


●MIDIファイルを解析(2)

前回、四季の歌のMIDIファイルを解析いたしまして、そのトラック2とトラック3は、90 XX XX(ノートオン)と90 XX 00(実質的にノートオフ)だけだと書きました。
なにしろ実際にその解析作業を行ないましてからすでに2週間以上が経過しておりまして、私の場合1週間もありましたらきれいさっぱりと忘れてしまうのには十分な時間でありまして、それに加えて前回は書くことが余りに多かったために、ついトラック2とトラック3について、念のために確認することを怠ってしまいました。

本日あらためてトラック2とトラック3の内容を確認してみましたら、上記のコード以外のコードも含まれておりました。
ええ。
それはもうちゃんと解析した上でMIDI演奏プログラムは作りましたです。

ただ、MIDI演奏プログラムを作るうえでは、そのコードの意味、働きにつきましては、知らなくても支障がなかったことも事実です(ただしコードC0を除いては)。

まあ。
しかし。
私自身のための備忘録という意味でも、そのあたりを簡単に整理しておきますことに意味はあると思いますし、MIDIについて勉強しようという方の参考にもなるかと思います。
あ。
なんですか、MIDI検定なんてものもあるのだそうですね。
でもここに書いておりますことは、あくまで私個人がMIDI演奏プログラムを作り上げる過程で理解しましたことを(誤解していることもあるかもしれませんが)、備忘録代わりに書いておりますだけですから、受験対策としては利用などなさらないようにお願いいたします(特に用語などはおそらくメッチャクチャであると思います)。

●トラック2とトラック3の解析

トラック2とトラック3のはじめのところにもちょいと特殊なコードが置かれておりました。
その内容はトラック2とトラック3で同じですから、以下トラック2について考えていくことにいたします。

9030  4D 54 72 6B 00 00 01 F1-00 B0 00 00 00 B0 20 00  MTrk.....ー...ー .
9040  00 C0 00 00 B0 07 64 00-B0 0A 40 00 90 48 64 83  .タ..ー.d.ー.@..Hd.

●コントロールチェンジ(BX XX XX)

前回説明をしましたメタイベント(FF XX …)はMIDI音源には送りませんでしたが、コントロールチェンジはそのままMIDI音源に送ります。
その名の通り、このコードによってMIDI音源のコントロールが行なわれます。

そのようにわかっている風の説明をしておりますが、ほとんど何もわかっておりません。
まあ、わからなくても、MIDI演奏プログラムは書けてしまいます。
そういう目線でお読みになってくださいませ。

トラック2はアドレス9030Hから始まります。
先頭にMTrkの文字があってそれに続いてデータバイト数を示す4バイトの数00 00 01 F1があります。
その次の
00 B0 00 00 と 00 B0 20 00
がコントロールチェンジです。
先頭の00は時間データです。00ですから直ちに音源に送出されます。

コントロールチェンジはBXで始まります。
その次のバイトでその内容を示します。

●バンクセレクト(BX 00 HH および BX 20 LL)

BXのXはチャンネルを指定する0〜Fの数です。
第2バイト00と20はバンクセレクトで、00は上位バイトを、20は下位バイトを示しています。
その次に続くデータが実データです。
そのデータはいずれも00ですから、この2つのコードで、
チャンネル0のバンクとして0000を指定する
ということを音源に指示します。
このコードでバンクを指定しても、次のプログラムチェンジを送るまでは実際のチェンジは行なわれません。

●プログラムチェンジ(CX PP)

その後ろにあります
00 C0 00
がプログラムチェンジです。

上のバンクセレクトと対で使うことでチャンネルに128×バンク(128×128通り)の音色を割り当てることができます。
しかしそんなに多くのバンクを持っている音源は無いようです。

ここで肝心なことは、このプログラムチェンジは2バイトだということです。
最初MIDI音源に送るコードは全部3バイトだと思っておりましたので、ここでこけてしまいました。

●ボリューム設定(BX 07 VV)

その後ろの
00 B0 07 64
はボリュームを指定する、コントロールチェンジのひとつです。
3バイト目のVVでボリュームを指定します。

●パンポット(BX 0A PP)

その後ろの
00 B0 0A 40
もコントロールチェンジのひとつでパンポットといいます。
ステレオ出力の音を左右に振り分けるときに指定します。
00が左のみ、7FHが右のみで、40Hは左右同じです。

本日は時間がなくなってしまいました。
この続きは次回にいたします。

ワンボードマイコンでCP/Mを![第339回]
2013.3.8upload

前へ
次へ
ホームページトップへ戻る