見出し画像

ポルタメント/グライド


ポルタメントのような機能について発見したので!書いておきます。

Lagというクラスを使います。

ポルタメントの表現を実現できるのは、
・ Pmonoでシーケンスさせた時、または
・ PmonoArticでレガート演奏をさせたときだけです。


Lag


Lagは、下記のようなパラメータを持ってます。

Lag.kr(in: 0.0, lagTime: 0.1, mul: 1.0, add: 0.0)

inに入ってくる数値に対して、lagTimeぶんのタイムラグを発生させます。
ポルタメントは、ピッチの移り変わりにラグタイムを持たせたい表現なので、inにピッチをあてて、あとはlagTimeには入れたい数値を入れるだけです。


早速使ってみます。

[ex1]

//まずブートサーバー(command+B)しておきます。
(
SynthDef(\syn1, {
	arg freq=220, gate=1;
	var sig, env, amp=0.3;
	env = EnvGen.kr(Env.adsr(0.01, 0.3, 0.5, 0.1), gate, doneAction:2);
	freq = Lag.kr(freq, 0.3);
	sig = Saw.ar(freq);
	sig = RLPF.ar(sig, MouseX.kr(3000, 20).poll, 0.5);
	sig = Pan2.ar(sig, 0);
	Out.ar(0, sig * amp * env);
}).add;
)

前回使ったSynthDefのfreqの部分にLagを使っています。
0.3という数値は好きな数値でOKなので、色々と変えてみて実験できます。

では、これをPmonoで鳴らします。
前回と同じコードですが、ポルタメントの効果がわかりやすいようにテンポだけ変えています。

[ex2]

(
Pmono(
	\syn1,
	\midinote, Pseq([36, 48, 72, 48], inf),
	\dur, Pseq([0.5], inf),
).play(TempoClock(90/60));
)

どうでしょうか。
気持ちよくポルタメント表現してくれてますよね。

前回使ったPmonoArticでも鳴らしてみます。

[ex3]

(
PmonoArtic(
	\syn1,
	\midinote, Pseq([36, 48, 72, 48], inf),
	\dur, Pseq([0.5], inf),
	\sustain, Pseq([0.1, 0.1, 0.1, 0.1, 0.6, 0.6, 0.6, 0.6], inf),
).play(TempoClock(90/60));
)

レガート部分にだけポルタメントがかかります。


[ex3]の演奏を、普通のシンセの手弾き演奏に例えると・・・

\sustainが0.1の時の[36, 48, 72, 48]

 1音ずつ鍵盤を押して音を出している。

\sustainが0.6の時の[36, 48, 72, 48]

 最初の36(低いド)の時だけ鍵盤を押しっぱなしにして、あとはピッチベンドで音程を変えている。


・・・というイメージだと言えないでしょうか。

それで、Lagは、そのピッチベンドを傾ける速さをコントロールしている。

なのでLagの効果を得るには「鍵盤を押しっぱなしの状態」が必要、つまりPmonoやPmonoArticのようなシーケンスでだけ使える、ということになります。


VarLag


VarLagというクラスがあって、

VarLag.kr(in: 0.0, time: 0.1, curvature: 0, warp: 5, start, mul: 1.0, add: 0.0)

どうやらポルタメントのカーブを設定できるようなんですが、ヘルプのドキュメントに警告が書かれてあって、その最後に「自己責任で使ってください」とあるので、これは使うのコワイです。(警告の内容を完全に理解してないので...)
もう少し研究が必要です。

VarLag



今日は以上です。

いやぁ...ホント長いことポルタメントについては調べてたんですけどねー。「探すのをやめたときに見つかる」とはよく言ったもので、前回「知ってる方がいたら教えてくださいー」と書いた途端に発見してしまいました。不思議なものですね。
Lagについても、調べに調べてはいたんですけど、これまで僕の使い方が間違ってたんでしょうねぇ。それかPbindで実験してたとか。。


<目次へ>
https://note.com/sc3/n/nb08177c4c011

いいなと思ったら応援しよう!