16.Extensions(SC3の機能拡張)
サードパーティ製のクラスを追加できる方法があります。
もともと使いきれないくらいクラスが揃っているのですが、Extensionsファイルをダウンロードするとさらに増やすことができます。
例えばFilterカテゴリだけ見ても・・・
https://doc.sccode.org/Browse.html#UGens%3EFilters
このドキュメントの各クラス名の右側に「+CLASSES」と書かれているのがExtensions追加によって使うことができるようになるクラスです。
(ページ上部のinclude extensionsのチェックボックスを外すとSC3純正クラスのみの表示になります。)
ざーっと見渡すとMoogVCFとかありますね。興味あります。
あとで使ってみようと思います。
Extensionsの導入方法
公式のページからダウンロードします。
https://supercollider.github.io/downloads
↑このページの下の方、
SC3 Plugins
のところのリンクです。
https://supercollider.github.io/sc3-plugins/
zipをダウンロードして解凍したら、
SC3pluginsという “フォルダごと” ここ↓に置きます。
Macintosh HD/
ユーザ名/Library/Application Support/SuperCollider/Extensions
(※)
Windowsの場合はここ↓にSC3pluginsという “フォルダの中身” を置きます。
C:\Users<USERNAME>\AppData\Local\SuperCollider\Extensions
置いたら、SuperColliderを起動します。
それだけでOKです。
(※)
SC3pluginsフォルダを置いた直後のサーバ起動は、とても時間がかかる場合があります。根気よく待ちます。
SC3が起動したら、試しにMoogVCFと書いてみます。
(Mooまで書いたら予測で候補が出てきますね。)
MoogVCFをcommand+Dすると、ヘルプウィンドウにもちゃんと表示されます。
Extensionsのクラスを使ってみる
まずは03.フィルターの回などで使ったRLPFを使ってみます。
(
SynthDef(\filters, {
var sig, mod, line, flt;
sig = Pulse.ar(48.midicps);
line = XLine.kr(3000, 10, 8, doneAction:2);
mod = LFPulse.ar(2, 0, 0.5, 1, 0.5);
flt = RLPF.ar(sig, line*mod, 0.2);
Out.ar(0, flt!2 * 0.3)}
).play;
)
次にMoogVCFです。
(
SynthDef(\filters, {
var sig, mod, line, flt;
sig = Pulse.ar(48.midicps);
line = XLine.kr(3000, 10, 8, doneAction:2);
mod = LFPulse.ar(2, 0, 0.5, 1, 0.5);
flt = MoogVCF.ar(sig, line*mod, 0.8);
Out.ar(0, flt!2 * 0.6)}
).play;
)
少し出力が小さいのでOut.arで0.6掛けて音量を上げました。
RLPFと比べるとキャラクターが違いますね。
また、RLPFのレゾナンスパラメータは1→0と数値が小さくなるほどレゾナンスが強くなるのに対して、MoogVCFは0→1と数値が大きくなるほどレゾナンスが強くなっていきます。(上のコードの0.8のところを変えて実行してみるとわかります。)
他にもMoogのシミュレーション系のものがいくつかあります。
BMoogを使ってみます。
(
SynthDef(\filters, {
var sig, mod, line, flt;
sig = Pulse.ar(48.midicps);
line = XLine.kr(3000, 10, 8, doneAction:2);
mod = LFPulse.ar(2, 0, 0.5, 1, 0.5);
flt = BMoog.ar(sig, line*mod, 0.8);
Out.ar(0, flt!2 * 0.3)}
).play;
)
TB303のシミュレーションというものもあります。
(
SynthDef(\filters, {
var sig, mod, line, flt;
sig = Pulse.ar(48.midicps);
line = XLine.kr(3000, 10, 8, doneAction:2);
mod = LFPulse.ar(2, 0, 0.5, 1, 0.5);
flt = RLPFD.ar(sig, line*mod, 0.8, 1.0);
Out.ar(0, flt!2 * 0.6)}
).play;
)
distというパラメータがあります。上のコードでは1.0にしてみました。
(hiカットオフ、hiレゾナンス、hiディストーションの組み合わせだとフィードバックを起こすので注意、とヘルプに書いてありました。)
ネットでコードをいろいろとあさっていると、普通にExtensionsを使ったコードを見つけます。
(フィルターをいくつか紹介しましたが、Generator(オシレーター)など他のカテゴリにもたくさんExtensionsクラスがあります。)
導入も簡単ですし、Extensionsを入れておくのをオススメします。