前回フレース演奏のためのクラスを作ったのでこれを利用します。
最初の4小節のフレーズを実装する
前回作ったPhraseEditorの継承クラスを作ります。まずチェロ組曲第一番の前奏曲の最初の8音のフレーズを作ります。
シーケンスエディターを作成してそれをPhraseEditorのコンストラクターに渡してあります。実際に実装するところはplayPhraseメソッドでテンポの設定と演奏設定です。ノート番号は引数で与えられた配列を指定するように作っています。このため同じアーティキュレーションの音の高さ違いのものを何回も作り出すことができます。
これまでの実装では同じ音が何度も出てくる場所はnotesの配列のなかから同じものを利用して配列数を少なくしていました。ここでは汎用に使えるように8音全部別々な音を指定できるようにしました。
double tempo = 65; SequenceEditor se = new SequenceEditor(2, 4, tempo); PhraseEditor pe1 = new PhraseEditor(se) { @Override public void playPhrase(int[] notes) { setTempo(0, 0, tempo * 0.78); setTempo(0, 0.25, tempo * 0.91); setTempo(0, 0.5, tempo); setTempo(0, 1, tempo * 0.96); play(0, 0.00, 0, notes[0], 100, 0.3); play(0, 0.25, 0, notes[1], 90, 0.3); play(0, 0.50, 0, notes[2], 90, 0.28); play(0, 0.75, 0, notes[3], 80, 0.24); play(0, 1.00, 0, notes[4], 90, 0.13); play(0, 1.25, 0, notes[5], 70, 0.18); play(0, 1.50, 0, notes[6], 70, 0.15); play(0, 1.75, 0, notes[7], 60, 0.15); } };
フレーズエディターを呼び出す
8音単位のフレーズのため1小節に2回呼び出す必要があります。4小節目の最後の音だけイレギュラーです。最初の二つのパレメータは小節と拍です。そのあと8音のノート番号が並んでいます。
pe1.playPhrase(1, 0, 43, 50, 59, 57, 59, 50, 59, 50); pe1.playPhrase(1, 2, 43, 50, 59, 57, 59, 50, 59, 50); pe1.playPhrase(2, 0, 43, 52, 60, 59, 60, 52, 60, 52); pe1.playPhrase(2, 2, 43, 52, 60, 59, 60, 52, 60, 52); pe1.playPhrase(3, 0, 43, 54, 60, 59, 60, 54, 60, 54); pe1.playPhrase(3, 2, 43, 54, 60, 59, 60, 54, 60, 54); pe1.playPhrase(4, 0, 43, 55, 59, 57, 59, 55, 59, 55); pe1.playPhrase(4, 2, 43, 55, 59, 57, 59, 55, 59, 54);
以下の楽譜と見比べてるとわかるとおもいますが、曲の構造に即した部分のみ記述できるようになりました。
次回曲全部の実装をします。