18.サーバブートって?(SuperCollider内部構造)
今日はSuperColliderの内部の構造に少し触れたいと思います。
SuperColliderが動作しているその裏側には「Aという役割を担う部分」と「Bという役割を担う部分」、のふたつの”部分”があり、それぞれお互いに連携を取り合っています。
ではAとBの役割とは?(AとBという記号は僕が説明のためにつけたものです。)
AとBそれぞれの役割を図に書き加えました。
こんな感じで、
・オーディオを担う部分(音を出したりする部分)と
・我々が書いたコードを理解する部分(そしてオーディオ以外の処理をする部分)
に分かれています。
それぞれの呼び名を「サーバ」と「クライアント」と呼びます。
さて。
SuperColliderを起動したときには、内部的には図の右側の部分(クライアント)しか機能しません。
音を扱うには左側の部分(サーバ)が必要なので、SuperColliderを起動しただけでは音の処理はできない状態です。
そこで、音を扱うためにやらなくちゃいけないのが「サーバブート」です。
はい。いつもやってるやつです。
ServerメニューからBootServerを選択
s.boot;を実行
command + bをタイプする
このどれかの方法でサーバを起動します。
我々がコードを書いて音を出すとき、
クライアントがコードを理解する
↓
クライアントがサーバに依頼する
(「音出して」とか「止めて」とか「ピッチ上げて」とか)
↓
サーバが音を処理する・音を出したり止めたりする。
という流れ作業がSuperCollider内で発生しています。
ところで。
サーバ側はオーディオ処理の役割を担っています。逆に言うとオーディオ処理が不要な使い方であれば、サーバブートをしなくてもSuperColliderを使えます。
例えばこんなコードです。
それぞれ1行ずつ実行すると、post windowに結果が表示されます。
// 2に3を足す。
2+3;
// 5を2乘する。
5.squared;
// 11を3で割った余りを求める。
11%3;
// 数列に2をかける。
[1, 2, 3]*2;
また、シーケンスさせるときにおなじみのPbindも、実はクライアント側の機能です。
試しにサーバブートしない状態で下記のコードを実行するとわかります。
(
Pbind(
\midinote, Pseq([60, 62, 64], 2).trace,
).play;
)
post windowに60,62,64が2回表示されるはずです。
サーバが起動していないので(サーバに依頼することができないため)音は出ません。ですがPbindは動いています。
ちなみにtraceというメソッドはPbind内で上記のように使います。
僕はPseqがどのタイミングで何を出力しているのかチェックしたいときによく使います。
(作る途中のチェックのために使うので、最終的なコードには大抵残らないです。)
*「フィルター聴き比べ」のコードで使っていました。
実行するとpost windowに数値が表示されます。これはレゾナンスの値の確認と、Selectに渡すtypeのナンバーを(今何番が渡されているのか)確認するために使いました。
豆知識なのですが
この状態からブートサーバして、同じPbindを再生させるとどうなりますか?
音が出ますよね。
いつもならばPbind内に(\instrument,と書いて)鳴らすSynthDefの名前を書きますが、このコードにはSynthDefの名前は書かれておらず、あるのは\midinoteだけです。
(もっと言うと、音を鳴らすためのSynthDefすら作っていません。)
実は、特定のSymthDef名を書かない場合は、SuperColliderのサーバ内にあるデフォルト音源が鳴らされるしくみになっています。
なので「音色に関係なく音程(メロディー)だけを確認したい」などの場合は、わざわざSynthDefを作ったりしなくても、Pbindだけでそれが出来てしまいます。
以上、簡単ですが、SuperCollider内のサーバとクライアントについて書きました。
次回はPdefn, Pbindefについて書きます。
SuperColliderで簡易的なライブコーディングを実現できるクラスです。今回の話を頭の片隅に置いて次回の記事を読んでいただくと理解が深まるのではないかなぁと思います。
おわりに。
SuperColliderはプログラミング言語であり、めちゃめちゃフレキシブルに音作りできるツール(ソフトシンセ)です。「シンセをいじるのが好き」な人や「音について実験するのが好き」な人は、その奥深さにハマってしまいますよね。
ただテキストベースなのでちょっとハードルが高そうに見えます。日本語の情報もそう多くはありません。そこでこのnoteでは、僕のようにプログラミングに接したことのない人でも「SuperCollider入門」として読んでいけるような記事を目指しています。
特に<目次>の中の、各タイトルの頭に2桁のナンバーがついている記事については「基本的なチュートリアル」の意味合いを込めていまして、ナンバー付きの記事を読み終えた頃には「ヘルプドキュメントや他の人のコードを見ながら自分なりの実験をやっていける状態」になるような内容にしたいなと考えています。
(僕自身たまに読み返して、わかりづらい表現などをこっそり書き換えたりしています。内容に変更・修正がある場合は「訂正」などのコメントを残しています。)
今日はナンバー18として、SuperColliderの内部構造について書きました。
読んでいただいてありがとうございました。
<目次へ>
https://note.com/sc3/n/nb08177c4c011