どんなデータをどう使うか

MIDIを作れるJavaアプレットを作っているのだ。
前回でJavaアプレットを使うことに決めたのだ。

さて、闇雲に作り始めたってあっという間に失速してできなくなってしまいそうなので、大雑把にどういうものにするかを決めておきます。
今回Javaで作ることになったので、MIDIに関してJavaで使える機能を見ておきましょう。
JavaTM 2 SDK, Standard Edition ドキュメント」の「パッケージ javax.sound.midi」で見てみます。

MidiSystem
こいつが親玉らしい。
getSequenceしてgetSequencerしたらとりあえずは鳴らせるんだと。
writeが今回のミソじゃのー。
Sequence
ここにデータが入る。
曲全体の情報が入り、Sequencerにこいつをそっくりそのまま渡すと演奏できるんだと。
Sequenceのまんまじゃ管理が大変そうですのー。
Track
Sequenceの中にこれが沢山入ってる(普通は16個以内)。
簡単に言えばMIDIのデータの一区切りを表す。
Sequence.getTracksで配列として一括でもらえることになっているらしい。
MidiEvent
Sequenceに入っているデータの実体で、それぞれのTrackに山ほど入っているとか。
発音タイミングとメッセージの内容がさらに記録されているらしい。
頭が痛くなりますな。
MidiMessage
で、いつ鳴らすかという発音タイミングに対して、何を鳴らすのかというのがこれ。
最も重要なデータゆえ、これだけを使って音を鳴らすのも可能なはず。
サブクラスでもっと詳細に決めるらしいですな。
MidiChannel
チャンネルごとの現在の状態だと思う。
データとは直接関係ないけど使えたら便利に違いない。
Synthesizer.getChannelsでまとめてもらえる。

他にもいろいろあるけど省略。
MidiChannelで音を鳴らして確認しつつMidiEventをTrackに置いていって、そのTrackをまとめたSequenceをMidiSystemでwriteする、という手順を踏むことになりそうです。

続く