木曜日, 9月 21, 2006

「サクラ」でMML演習5(続き)

今日は、ピアノのための「素敵な即興演奏講座5」の中程の、和音で平行に弾く部分を「サクラ」のMMLで書いてみる。「素敵な即興演奏講座5」の内容については、昨日のエントリーを参照してください。

平行ということで、ずれる音程が同じなので、この部分は関数を作ってみることにした。

SwingS(DF)は、基本の音階からDF分とばした音程を生成する。SwingR(DF)は、DF分とばしたランダムな音程を生成する。

//_______ ここから _______________

Array O5 = ({ド},{ミ},{ファ},{ソ},{シ},{`ド},{`ミ},{`ファ})
Int N Int N1 Int N2 Int PanR=127-20 Int PanL=0+20

Function SwingS(DF){
 STR ML={} [2
  ML=ML+O5(0+DF)+{4.}+O5(1+DF)+{8}+O5(2+DF)+{4.}+O5(3+DF)+{8}
  ML=ML+O5(4+DF)+{4.}+O5(3+DF)+{8}+O5(2+DF)+{4.}+O5(1+DF)+{8}
 ] ML=ML+O5(0+DF)+{1}
 Result=ML
}

Function SwingR(DF){
 #ML1={} #ML2={}[8
 N1=Random(0,5) N2=Random(0,5)
 #ML1=#ML1+O5(N1)+{4.}+O5(N2)+{8}
 #ML2=#ML2+O5(N1+DF)+{4.}+O5(N2+DF)+{8}
 ]
 N=Random(0,5)
 #ML1=#ML1+O5(N)+{1} #ML2=#ML2+O5(N+DF)+{1}
 Result=#ML1
}

#ML1=SwingS(0) #ML2=SwingS(1)
TR(1) P(PanR) o5 [2 #ML1]
TR(2) P(PanL) o4 [2 #ML2]

SwingR(1)
TR(1) P(PanR) o5 [2 #ML1]
TR(2) P(PanL) o4 [2 #ML2]

#ML1=SwingS(0) #ML2=SwingS(3)
TR(1) P(PanR) o5 [2 #ML1]
TR(2) P(PanL) o3 [2 #ML2]

SwingR(3)
TR(1) P(PanR) o5 [2 #ML1]
TR(2) P(PanL) o3 [2 #ML2]

//_______ ここまで _______________



もうちょっと上手く書けそうな気もするのだが、今日のところはこの辺にしておきます。最後の部分(それでも沖縄をピアノでオシャレに弾きたいときは・・・)は明日に続きます。