JavaとMIDI:バッハ・チェロ組曲の一部(2)

スポンサーリンク

ではコードを作るにあたり使う音を抜き出して見ましょう。

使う音をリストアップする

リストにはフレーズの8音全てを書いているわけではありません。全てのフレーズで共通ですがフレーズの2、6番目は同じ音ですし、3、57番目は同じです。8番目は2番目と基本的に同じなのですが4小節目の最後の音がG3になるべきところがF#と不規則になっているので注意しておきます。楽曲的には次の小節でE3に行くための経過音なのでこれはこれで重要な変化です。

以下の表で小節番号はJavaのコードに合わせて0ベースにしています。国際式の音名表記とMIDIのノート番号の両方を書いていますが譜面から直接ノート番号を読み取れるように訓練すると色々便利です。上記の不規則がなければ1フレーズ4つの音で作れたところですがこの対応のため1フレーズ5つの音で作ることにします。

0小節目 G2 / 43 D3 / 50 B3 / 59 A3 / 57 D3 / 50
1小節目 G2 / 43 E3 / 52 C4 / 60 B3 / 59 E3 / 52
2小節目 G2 / 43 F#3 / 54 C4 / 60 B3 / 59 F#3 / 54
3小節目 G2 / 43 G3 / 55 B3 / 59 A3 / 57 F#3 / 54

上記の音のリストを二次元配列にしました。

int[][] notes = new int[][]{
  new int[]{43, 50, 59, 57, 50},
  new int[]{43, 52, 60, 59, 52},
  new int[]{43, 54, 60, 59, 54},
  new int[]{43, 55, 59, 57, 54}
};

実装

まずシーケンスを作ります。解像度は一般的な480にしてあります。

int resolution = 480;
Sequence sequence = new Sequence(Sequence.PPQ, resolution);

トラックを作ります。最初のトラックはコンダクタートラックとして使うようにして演奏情報のためには使いません。ここではテンポを設定するようにしています。

JavaとMIDI:シーケンスにテンポを設定する(1)
JavaとMIDI:シーケンスにテンポを設定する(2)

Track track;
track = sequence.createTrack();
double tempo = 65;
track.add(new MidiEvent(getTempoMessage(tempo), 0));

時間情報を管理するクラスのインスタンスを作ります。初期値に解像度と4拍子であることを設定します。

MidiTimeSign timeSign = new MidiTimeSign(resolution, 4.0);

演奏用のトラックを作ります。音色を呼び出しておきます。チェロのプログラム番号はGMで43番ですが0ベースに読み替えて42を指定します。最初の二つの引数は0小節目の0拍目、サウンドバンクは使わないので次の二つの引数も0二つ、最後にプログラムチェンジの42を指定します。

JavaとMIDI:音色を変更する(1)
JavaとMIDI:音色を変更する(2)
JavaとMIDI:音色を変更する(3)

TrackEditor te1 = new TrackEditor(timeSign, sequence.createTrack(), 0);
te1.setProgram(0, 0, 0, 0, 42);

次は演奏情報を設定していきます。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

%d人のブロガーが「いいね」をつけました。