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で演奏してみるとわかります。
フレーズを演奏しながら、だんだん音が小さくなります。これは発生したノートオンのエンベロープがだんだん減衰していってるからです。
(この効果を狙って、あえて、こんな感じの演奏をさせるのはアリだと思います。フェードアウトみたいになりますね。)
この記事が気に入ったらサポートをしてみませんか?