見出し画像

Pmonoでモノモードに


***一番下に追記2件あります(2023.06.11)***


SynthDefの音源をモノモードでレガートに演奏したい時、ありますよね。
一般的なシンセにはよくついている機能なので、SuperColliderでも同じような演奏をしたいと思ってしまいます。



まず、SC3を起動したらブートサーバー(command+B)して、以下のような音源をサーバにaddしておきます。

[ex1]

(
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);
	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;
)

シンプルなノコギリ波にローパスフィルターをかけています。
フィルターのカットオフ周波数をマウスのX軸にしているので、音を鳴らすときはマウスの位置にご注意です。(音の再生中にマウスを動かすとフィルターが動きます。)

ノコギリ波にエンベロープをかけているので、Pbindなどでシーケンスさせると、以下のような感じで1音1音にアタック感を感じる音色になっています。
[ex2]

Env.adsr(0.01, 0.3, 0.5, 0.1).plot;

実際にPbindで鳴らしてみます。

[ex3]

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

\durを0.5にしているので、全ての音が8分音符で鳴ります。
(シーケンスを止めるには、command+.(コマンド+ピリオド)です。)

\sustainコマンドを使って音価(音の長さ)を短くしてやると、歯切れ良く鳴ります。
[ex4]

(
Pbind(
	\instrument, \syn1,
	\midinote, Pseq([36, 48, 72, 48], inf),
	\dur, Pseq([0.5], inf),
	\sustain, Pseq([0.1], inf),
).play(TempoClock(150/60));
)

※0.1の部分を逆に0.5より長くすると、それぞれの音の長さが長くなるので、音がかぶって再生されます。


さて、このシーケンスをレガートにさせるには(正確には「スラー」させる、ですかね…)、Pmonoというパターンクラスを使います。
以下のような感じです。鳴らしてみると、エンベロープのアタック感が効いているのは最初の一発目だけで、それ以降の音は滑らかに繋がっていくことがわかります。

[ex5]

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

Pmonoを使う時の注意点としては、書式の中に、\instrumentというコマンドが無いことです。
なのでPmono(の次に、いきなりSynthDef名の\syn1を書いています。

試しに
Pmono(
\instrument, \syn1,
のように書いて実行してみてください。エラーになってしまいます。

それとPmonoの注意点としてもう一つ、Pmonoで演奏させると、発生するノートオンは最初の一回だけということです。
なので、Pbindなら演奏中にSynthDef内の例えばエンベロープをいじって(鳴らしながら)調整とかできますが、Pmonoだと、一発目でエンベロープを発動してしまっているので、いじったエンベロープを確認するにはリトリガーさせる(つまり一度シーケンスを止めて再生しなおす)必要があります。

それと、あとひとつ。(まだあるんかー)
次のPmonoを実行してみてもらえますか?

[ex6]

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

これ、\sustainを短くしたんだから、スタッカート気味に鳴ってほしいですよね。[ex4]のPbindみたいに。
だけどPmonoは\sustain効かないんですよ〜。


PmonoArtic


さて、そんな時に出番なのがPmonoArticです。
PmonoArticだと、モノモードでありながら同じフレーズの中にスタッカートとレガート(スラー)をミックスできます。

[ex7]

(
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(150/60));
)

(PmonoArticも書式の中に\instrumentというコマンドが無いです。)

\sustainが\durよりも短ければスタッカート気味に、
\dur以上ならレガート(スラー)に演奏されます!


休符


Pbindならば、休符にしたい\midinoteや\durを「\」にすることで休符になりますが、Pmonoはエンベロープの一発発動という仕様のためか、「\」では休符を入力できないです。(該当部分のみ音が伸びてしまいます。)

[ex8]

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


PmonoArticの方は、休符させたい音符の\sustainを「\」にすることで休符の表現を実現することができます。

または、休符させたい音符の\sustainをゼロにすることでも同じ効果を得ることができます。

[ex8]

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



ポルタメント


さぁここまで来たら、ポルタメントが欲しくなりますよねぇ。
・・・・なのですが、ボルタメントの設定の仕方が僕わからなくて。。
たまに調べるんですけど未だ実現できたことないです。今後、判明したらここに書いておきます。
(どなたか知ってる方がいたら教えてくださいー!)



今日はモノモードについて書きました。
SuperColliderで音を鳴らす時、こういったPmonoやPbindなどを並列に(同時に)鳴らしたいと思うこと多々ありますよね。次回はそういったことについて書きたいと考えています。


[2023.06.10追記]
モノモードで使えるポルタメント機能を発見したので、書いておきました!
次の記事「ポルタメント/グライド」です。


[2023.06.11追記]
Pmonoを使う上で注意する点、もうひとつありました。
この記事の真ん中あたりで「Pmonoで演奏させると、発生するノートオンは最初の一回だけ」と書きました。つまり、最初に発生させたノートの持続音の音程を変えていくことでメロディーに聞こえるようになってます。なので、SynthDefで使うエンベロープは持続音系でないと成り立たないです。

試しに、この記事のSynthDefのエンベロープの部分
Env.adsr(0.01, 0.3, 0.5, 0.1)
を、
Env.perc(0.01, 3)
などに書き換えてPmonoで演奏してみるとわかります。
フレーズを演奏しながら、だんだん音が小さくなります。これは発生したノートオンのエンベロープがだんだん減衰していってるからです。
(この効果を狙って、あえて、こんな感じの演奏をさせるのはアリだと思います。フェードアウトみたいになりますね。)




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

この記事が気に入ったらサポートをしてみませんか?