では簡単なフォリアを作ります。
主旋律の決定
コルレリのバージョンの提示部の単純化したものを主旋律とします。1小節目と2小節目でリズムが違いこれが最終部まで続きます。最終部はコードも細かく分けます。
楽器の構成
構成は弦楽四重奏 String Quartetにします。ヴァイオリン2つにヴィオラとチェロが1つづつで4パート、MIDIでは4チャンネル使います。
主旋律以外の3パートは第二ヴァイオリンとヴィオラで1拍目と2拍目、チェロが1拍目と3拍目を引くようにします。こうすることで3拍子すべての拍をどれかの楽器が音を出すためリズムが途切れることがありません。
フレーズの実装
すべてのパートをひとつのフレーズとして処理するようにします。以下は1小節目のスコアです。
音符の上についている音はこのフレーズを弾くのに必要な音の配列のインデックスです。ここではチェロの音が1、ヴィオラが1、第二ヴァイオリンが1、第一ヴァイオリンが2の計5つの音を定義する必要があります。以下フレーズ編集クラスで実装する様子を順に見ていきます。
チェロの音は1と3拍目におきます。コード上は0ベースなので0拍目と2拍目となります。チャンネルは3、ノート配列から0番目を取ってきています。ヴェロシティは最初の方を2番目より強めにします。
play(0, 0.00, 3, notes[0], 100, 1.75); play(0, 2.00, 3, notes[0], 90, 1.0);
第二ヴァイオリンとヴィオラはチャンネルと音のインデックス以外同じです。最初の音は少し短めにしています。チャンネルは1と2、使う音は配列の2番目と1番目です。
// violin-2 play(0, 0.00, 1, notes[2], 100, 0.5); play(0, 1.00, 1, notes[2], 90, 1.75); // viola play(0, 0.00, 2, notes[1], 100, 0.5); play(0, 1.00, 2, notes[1], 90, 1.75);
バイオリンのパートは3音で作ります。最初の2音は第二ヴァイオリンとヴィオラのパートと同じようにしています。最初の二つは配列の3番目の音、最後の音は4番目の音を使っています。
play(0, 0.00, 0, notes[3], 100, 0.5); play(0, 1.00, 0, notes[3], 90, 1.5); play(0, 2.50, 0, notes[4], 90, 0.25);
フレーズ全体は以下のようになります。
PhraseEditor pe1 = new PhraseEditor(se) { @Override public void playPhrase(int[] notes) { // violin-1 play(0, 0.00, 0, notes[3], 100, 0.5); play(0, 1.00, 0, notes[3], 90, 1.5); play(0, 2.50, 0, notes[4], 90, 0.25); // violin-2 play(0, 0.00, 1, notes[2], 100, 0.5); play(0, 1.00, 1, notes[2], 90, 1.75); // viola play(0, 1.00, 2, notes[1], 90, 1.75); play(0, 0.00, 2, notes[1], 100, 0.5); // cello play(0, 0.00, 3, notes[0], 100, 1.75); play(0, 2.00, 3, notes[0], 90, 1.0); } };
次に2小節目の実装をします。
こちらは第一ヴァイオリンは一つしか音をつかわないので配列は4つで良いことになります。こちらは上と同様なのでコードのみ載せます。
PhraseEditor pe2 = new PhraseEditor(se) { @Override public void playPhrase(int[] notes) { // violin-1 play(0, 0.00, 0, notes[3], 100, 0.5); play(0, 1.00, 0, notes[3], 90, 1.00); play(0, 2.00, 0, notes[3], 80, 0.75); // violin-2 play(0, 0.00, 1, notes[2], 100, 0.5); play(0, 1.00, 1, notes[2], 90, 1.75); // viola play(0, 0.00, 2, notes[1], 100, 0.5); play(0, 1.00, 2, notes[1], 90, 1.75); // cello play(0, 0.00, 3, notes[0], 100, 1.75); play(0, 2.00, 3, notes[0], 90, 1.0); } };
次回はこのフレーズ編集クラスを使って音の設定をしていきます。