チューニングシステムを作ってみる2

前回、独自チューニングシステムを作って音を鳴らしてみた続きで、今回は色んなチューニングで和音を鳴らして響きを聴いてみようとおもいました。

でパターンを作成するPbindでポリフォニーを鳴らす方法を調べていたところ、Pbindのパラメータに\scaleというのがあって、ここに自分で作ったScaleをセットすればそのチューニングで簡単に音が鳴らせるよという事に気が付きました。Pbind便利な機能がめっちゃある。

//オリジナルのスケールを作成する
(
~myScale = Scale.chromatic(
    Tuning(#[0, 30, 220, 330, 420, 520, 628, 702, 792, 926, 996, 1126]/100));
)

//パターンを生成して音を鳴らす
(
Pbind(
	\instrument, \chord,
	\scale, ~myScale,
	\root, Pseq([
		"B4".notemidi - 60,
		"A5".notemidi - 60,
		"D5".notemidi - 60,
		"E5".notemidi - 60,
	],inf),
	\degree, Pseq([[0,3,6,10],[0,3,7,10],[0,3,7,10],[0,3,6,10]],inf),

	\dur, 1,
).play
)

//シンセ
(
SynthDef(\chord, {
    var sn, freq, env;
    env = Env([0,1,0.8,0],[0.01, 0.3, 0.5],[1, -4]).kr(2);
    sn = Saw.ar(\freq.kr(440) +.t [0,0.5]) * \amp.kr(0.5);
    sn = RLPF.ar(sn, 700);
    Out.ar(0, sn * env);
}).add;
)

コード進行はその日のDaily Chord Progression Generatorからお借りして、「Bm7♭5, Am7, Dm7, Em7♭5」になっています。

\scaleで自分で作った~myScaleを指定して、\rootではコードのルートを指定しています。C5(midiノート番号は60)が基準で0になっているのでそこから+-整数で指定する形ですが、視認性のためにアルファベット表記から変換する形にしてみました。

\degreeでルートに対する度数を指定するのですが、ここを配列で渡すと和音で鳴ってくれます。前回はScale側のメソッドで度数から周波数に変換して~というやり方をとっていたんですが、Pbind使うなら\degreeで鳴らした方が早いですね。

ちなみにSynthDef内の周波数を指定してるとこで、440 +.t [0,0.5]とやってますが、 これを実行すると結果として[ 440, 440.5 ]という配列になります。

とあるサンプルコードにあったのでそのまま使ったのですが、J言語記法っていうらしい。使うとオシャレに配列操作ができるっぽいですね。見た目を短くできるので、すぱこコードをtwitterに投稿するチャレンジみたいなことをやるときに役立ちそうです。

最後に、実際鳴らしてみた音がこちら。

rucochanmanのtwitter

感想

7thコードとか多用されてるややジャズ系のコード進行を使っちゃったので、あんまりチューニングの妙が生きないって感じがありました。ちょっとdetuneされてる感を演出ぐらいが使いどころで、それ以上平均律から離れるともはや別のコードって感じになりますね。それはそれで面白いかもですが。

特に色のあるチューニング/スケールの場合、モノフォニックな使い方したほうが味が出そうだなあと思いました。