schoenberg_lavagna

あるセリーの反行形を得るなどという関数を備えているプログラミング言語は無いので、PHPでコードを書いてみました。
あまりにもニッチ過ぎて世界中探しても3人ぐらいしか興味のある人はいないかもしれませんが、その3人のために公開しておきます。

このコードを応用すると、音高のセリーのみならず音価やアタックのセリーを得ることもできます。
音程のパラメーターをループで増減させれば12の移調形も簡単に得られます。
さらに、複数声部で移調と開始音を順次ズラしていくと、それらのセリーから得られる莫大な数の組み合わせをサクッとGET出来ちゃいます。

何の役に立つのかは貴方次第です!
というわけで本題です。

berg-g-05232015
例えばこのような音列の反行形を得るコードは以下のようになります。

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

//原型配列G
$array = explode(",", $serie);
$count = count($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++;
}

//反行形U出力
$serie_u = implode(",", $serie_u);
echo "U = ".$serie_u;
これを実行すると、以下のような結果が得られます。
U = 6,7,11,2,4,9,3,10,8,5,1,12

記譜するとこんなんなります。 
berg-u-05232015



このコードは、セリーの要素が12個でなくてもOKというスグレモノです。
7音でも9音でも使えますし、音価などで12を超えるパラメーターにも使用できます。
例えば、以下の8音音列の反行形を得てみます。

上記コード中の2行目、$serie に与えるパラメーターを書き換えます。
//セリー
$serie = "1,7,2,8,3,9,6,12";
これを実行すると以下の結果が得られます。
U = 1,7,12,6,11,5,8,2
記譜すると、
mtl4-05232015
こんなん出ます。


この程度の数であれば手で書いた方が早いですが、複数セリーで1万通りぐらいの組み合わせを作らねばなら無いことも日常的にありますよね。
そんな時はこのコードを利用してサクッと作って、空いた時間をガンプラの組み立てに充ててはいかがでしょうか?

それでは、初夏の爽やかな日差しの中、充実した音列ライフをお過ごし下さい。