7819992616_1dd3514a25_z
(写真:David Grant

先日の記事で以下のように書きました。
このコードを応用すると、音高のセリーのみならず音価やアタックのセリーを得ることもできます。
参照:『セリーの反行形を出力するPHPコード』


この一文についてふと思ったんです。
セリーには反行形や逆行形などがあるわけですが、音価のセリーの反行形っていったいなぁに??

よくわからないから、先日のプログラムを応用してその謎を追ってみます。




まずは、PHPコードの紹介。
先日のコードを少し改造してあります。
セリーの扱いを音価に限定し、原形とその反行形をABC Notationの形式で出力してみます。
ABC Notationについては以下を参照してください。
参照:実用ABC譜

//セリー
$serie = "4,3,10,9,8,7,5,2,1,11,6,12";

//原形配列G
$array = explode(",", $serie);
$count = count($array);
$notation_G = array();
$notation_U = array();

//反行形U計算
$serie_u[] = $array[0];
$distance = $array[0] + $array[0];
if($distance == 2) {$distance = 14;}

foreach($array as $pitch){
	$u = $distance - $pitch;
	if($u > $count) {$u -= 12;}
	if($u <= 0) {$u += 12;}
	if($i>0){array_push($serie_u, $u);}
	$i++;
}

foreach($array as $value_G){
	if($value_G == "1"){array_push($notation_G, "c1");}
	else if($value_G == "2"){array_push($notation_G, "c2");}
	else if($value_G == "3"){array_push($notation_G, "c3");}
	else if($value_G == "4"){array_push($notation_G, "c4");}
	else if($value_G == "5"){array_push($notation_G, "c4- c1");}
	else if($value_G == "6"){array_push($notation_G, "c6");}
	else if($value_G == "7"){array_push($notation_G, "c7");}
	else if($value_G == "8"){array_push($notation_G, "c8");}
	else if($value_G == "9"){array_push($notation_G, "c8- c1");}
	else if($value_G == "10"){array_push($notation_G, "c8- c2");}
	else if($value_G == "11"){array_push($notation_G, "c8- c3");}
	else if($value_G == "12"){array_push($notation_G, "c12");}
}

foreach($serie_u as $value_U){
	if($value_U == "1"){array_push($notation_U, "c1");}
	else if($value_U == "2"){array_push($notation_U, "c2");}
	else if($value_U == "3"){array_push($notation_U, "c3");}
	else if($value_U == "4"){array_push($notation_U, "c4");}
	else if($value_U == "5"){array_push($notation_U, "c4- c1");}
	else if($value_U == "6"){array_push($notation_U, "c6");}
	else if($value_U == "7"){array_push($notation_U, "c7");}
	else if($value_U == "8"){array_push($notation_U, "c8");}
	else if($value_U == "9"){array_push($notation_U, "c8- c1");}
	else if($value_U == "10"){array_push($notation_U, "c8- c2");}
	else if($value_U == "11"){array_push($notation_U, "c8- c3");}
	else if($value_U == "12"){array_push($notation_U, "c12");}
}

//反行形U出力
$notation_G = implode(" ", $notation_G);
$notation_U = implode(" ", $notation_U);
echo <<< EOF
X: 1
M: 
L: 1/32
K: C
$notation_G
$notation_U
EOF;

ここでは、32分音符を最小単位として、32分音符1つ分から12つ分の持続のスケールを扱います。
最小単位を変更したいときは、59行目の"1/32"の部分を"1/16"とか"1/8"とかに変えれば良いです。




さて、上記で与えたセリー、
//セリー
$serie = "4,3,10,9,8,7,5,2,1,11,6,12";
これを実行すると、
X: 1
M: 
L: 1/32
K: C
c4 c3 c8- c2 c8- c1 c8 c7 c4- c1 c2 c1 c8- c3 c6 c12
c4 c4- c1 c8- c2 c8- c3 c12 c1 c3 c6 c7 c8- c1 c2 c8
こんなんなりました。


これを、ABC Notation compilerにかけて楽譜にしてみます。
431098752111612
こうなります。
上の段が原形で、下の段が反行形です。


比較するために、同じセリーを音高に当てはめてみたのが以下です。
反行形は見やすいようにオクターブ下げてあります。
boulez

こうしてみると明らかなように、音高は反行しているのが目で見て「ああ、進行方向がひっくり返って同じ音程分だけ進んでいるんだな」と直感的に理解できます。
それに比べると音価の反行形は何がどう反行なのかいまいちよくわかりません。



順を追って検証してみます。
まずは前提として反行形をプログラムで得る場合の考え方からです。


反行形を得るための計算方法はいくつかあります。
  1. 原形の数列のある値から次の値に進む際の増減数を、増減を逆にして頭から順に一つずつ計算していく。
  2. 原形に対応する反行形の値が、各数列の直前の値からの差を足すと12となる値を求める。
  3. 原形の第一要素を2倍した数値か、それに12を足すか引くかした数になる値を原形の各値に対して求める。

反行形の意味合いに即した正攻法は上記1の方法ですが、今回は上記3の方法を選択しました。
理由は、この方法が最も簡単だからです。


「反行形の第一要素は原形の第一要素と同一値とする」という基本ルールがこの方法の根拠となっています。
 例えば数列の第一要素が「4」だった場合、反行形も「4」から始まります。
そして、原形が1減れば反行形は1増え、逆に原形が1増えれば反行形は1減ります。
ということは、第一要素の原形と反行形の数値的な距離は常に保ち続けられるということになります。

たとえば先ほどの、
//セリー
$serie = "4,3,10,9,8,7,5,2,1,11,6,12";
の反行形は以下となります。
431098752111612-u
数値を見ればわかる通り、原形と反行形の対応する数値を足すと8か20になります。


第一要素は原形も反行形も同じ値ということは、その合計(数値的距離)は原形の第一要素の値の2倍となります。
この値から原形の各値を引けば反行形の値が得られます。
このとき、反行形の値がマイナスになる場合は12を足し、逆に12を超える場合は12を引きます。
注意すべき点は、セリーの要素数が12でない場合でも12を足し引きするということです。
これはセリーの反行形が12音技法のそれに拠っており、転回形を意味しているからです。




以上の前提を元に、
 431098752111612-u
これをグラフ化してみます。

graph01
このようになります。


次に値8のところに線を引きます。
これは先ほど説明した第一要素の2倍の位置です。
どの要素を転回するかの判断基準になります。
graph02



次に、値0から値8までの間が埋まっている棒を値12分下げます。
転回です。
graph03


最上部、値8のところから、空いている部分を棒で埋めます。
graph04
見えてきました。


音価は時間的持続なので、グラフが横向きの方がわかりやすいと思います。
横向きに倒して、さらに原形のグラフも並べてみます。
graph07
右側のピンク色のグラフが原形です。
これを見ると先ほど黄色い棒で埋めた反行形の空き部分が、原形の反転になっていることがわかります。


つまり
『音価の反行形とは、ある一定の持続時間、またはその転回から原形の持続時間を引いた残りの持続時間である』
ということになります。


え?
これがなんの役に立つかって?
ちょ、な、何言ってんのよ!
そんなのあんた次第に決まってるじゃない!