JavaとMIDI:フォリア(2)

スポンサーリンク

次にフレーズを作っていきたいと思います。

繰り返しの導入

前の譜例では16小節そのまま書いてありましたが以下のように繰り返しを使ってコードの量も減らします。

上の繰り返しをコードにすると以下のような形になります。楽譜は1ベースでJavaは0ベースなので読み替えには慣れが必要です。1回目と2回目の場合分けはif文で行います。

for (int i = 0; i < 2; i++) {
  // 6 measure
  if (i == 0){
    // repeat-1
  } else {
    // repeat-2
  }
}

オーケストレーション

オーケストレーションとは音を各パートに振り分けることです。ここではコードが分かっているので、それを2つのヴァイオリン、ヴィオラとチェロに振り分けます。このうち第一ヴァイオリンはメロディを担当するため音は決まっています。チェロもバスを担当するためこちらも決まっているので考慮するのは第二ヴァイオリンとヴィオラです。括弧の中はノート番号です。

Dm A7 C7 F A7sus4 – A7
ヴァイオリン1 D (74) C# (73) E (76) F (77) D (74) – C#(73)
ヴァイオリン2 A (69) G (67) Bb (70) C (72) G (67)
ヴィオラ F (65) E (64) G (67) A (69) E (64)
チェロ D (50) A (45) C (48) F (53) A (45)

実装

まずスケールを用意します。ハーモニックマイナーとメジャーアイオニアンの二つです。

Scale minor = new Scale(0, 2, 3, 5, 7, 8, 11);
Scale major = new Scale(0, 2, 4, 5, 7, 9, 11);

小節数を宣言します。

int measure = 1;

Dmのフレーズを演奏します。前回作った一つ目のフレーズを使っています。基準62は中央Cのすぐ上のDの音です。ヴァイオリンが二つ音を使うので音の数は5になります。

noteメソッドのパラメータは基準の音とオクターブのオフセットと音階を指定してます。最初の音はチェロの音で基準が62で1オクターブ下にさげた0番目の音階なのでD 50になります。次のヴィオラの音は基準62でオクターブ上下はなく0ベースで2番目の音階つまり三度なのでF 65になります。

pe1.playPhrase(measure++, 0,
  minor.note(62, -1, 0),
  minor.note(62, 0, 2),
  minor.note(62, 0, 4),
  minor.note(62, 1, 0),
  minor.note(62, 1, 1));

A7のフレーズです。こちらは二つ目のフレーズでヴァイオリンも音は一つしか使わないので配列は4です。

pe2.playPhrase(measure++, 0,
  minor.note(62, -2, 4),
  minor.note(62, 0, 1),
  minor.note(62, 0, 3),
  minor.note(62, 1, -1));

Dmはまた同じなので省略します。以下はC7とFのフレーズです。使うスケールがマイナーからメジャーに変わり基準の音もD(62)からF(65)に変わっています。

// C7
pe2.playPhrase(measure++, 0,
  major.note(65, -2, 4),
  major.note(65, 0, 1),
  major.note(65, 0, 3),
  major.note(65, 1, -1));

//F
pe1.playPhrase(measure++, 0,
  major.note(65, -1, 0),
  major.note(65, 0, 2),
  major.note(65, 0, 4),
  major.note(65, 1, 0),
  major.note(65, 1, 1));

次回は終了部を作って完成させたいと思います。

スポンサーリンク

シェアする

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

フォローする

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