見出し画像

01.基本的なこと色々(SuperCollider)


僕のようにプログラマーではない人のために、SuperColliderをフレキシブルなシンセとして扱う方法を書き残しておきたいと思っています。

※ここではmac版での操作を書いています。Windows版の人は「commandキー」を「ctrlキー」と読み替えてください。

ダウンロード

SuperCollider3のダウンロードはこちらから。

※SuperColliderのページがリニューアルしたようで、ダウンロード先が変わっていましたので編集しました。(2022.03.26)

使っているOSのバージョンに合ったものをダウンロード。
zipファイルを展開してインストールします。
アプリケーションを起動すればすぐに使うことができます。

ウィンドウの説明

左側の白い部分(エディタ)
コードを書く場所です。

右側のHelp browser
各音源の内容やデフォルトパラメータを確認するウィンドウです。
ここで情報を参照しながら音作りしていきます。

その下のPost window
SuperColliderからのメッセージが表示されるウィンドウです。
エラーメッセージもこちらに表示されます。

音を出す準備

ServerメニューからBoot Serverを選択します。(又はcommand + b)
SC Serverは、SuperColliderがオーディオ信号を処理すためにアプリの裏側で起動させておくものです。
(例えるなら、車を走らせるためにエンジンをかけておく、みたいなものです。)

SC Serverが起動するとウィンドウ右下の文字が緑色に変わります。


サイン波

さて、例として単純なサイン波を鳴らしてみます。

{ SinOsc.ar(220, 0, 0.3) }.play;

エディタ部分にこのように書いて
カーソルをこの行(のどこでも)に持ってきて
「command + enter」を押すと…

220ヘルツのサイン波が、0.3の音量で鳴ります。
※左スピーカーからのみ出力されます。

post windowにエラーが表示されて音が出ない場合、
ピリオドかカンマか、コロンかセミコロンか、間違っていないかチェックします。
(カッコ)か{波カッコ}かも重要です。それぞれの意味はのちのち説明しますね。

音の止め方。

「command + .(コマンド&ピリオド)」です。

一度音を止めて、今度は220の部分をいろんな数字に変えて実行する(command+enterする)と、数字(ヘルツ)に見合った音程のサイン波が鳴ることがわかります。
同時に0.3を他の数字に変える実験も行なってOKですが、ひとつ注意が必要です。

SuperColliderでは1.0がマックスの音量です。なので1以上の数値を入れて実行すると歪んだ音が出てしまいますし、大きすぎる数値の入力はスピーカーや耳(鼓膜)を痛めてしまう恐れがあります。

僕は入力ミスの大音量でキンキンの耳鳴りを何度も経験しました。

各パラメータ

220の部分がピッチで、0.3の部分がボリュームだということはわかってきましたが、真ん中のゼロの部分は何でしょうか。

{ SinOsc.ar(220, 0, 0.3) }.play;
の行の、SinOscのどこかにカーソルを置いて「command+d」すると、右側のヘルプブラウザにSinOscについてのヘルプが表示されます。
少しだけスクロールダウンして
Class Methods
の項目を見ると…

1番目のパラメータはfreq(frequency)で、ピッチ
2番目のパラメータはphaseで、位相
3番目のパラメータはmul(multiply)で、音量
※(max volumeの1.0に対して何を掛け算するかという意味でmultiplyです。)
と書かれています。

phaseは、サイン波をどの位相から始めるか、の数値です。

下の図はphaseが0の時と、3の時との比較例です。

見た目は少し違いますがどの位相から始まっていても出音自体は同じなので、通常ここの数値はゼロでかまいません。

どういうときにゼロ以外を使うのか…SinOscをモジュレータとして使う時です。LFOとして使う時は、この数値をエディットしたい場合があります。

ところで、4番目にaddというパラメータがありますね。

振幅に対して「足す」数値を入れるのですが、これもSinOscをモジュレータとして使う時に役立ちます。普通にサイン波を鳴らすときは特に数値を入れる必要は無いです。

パラメータのルール①「書かなければデフォルト数値になる」

パラメータは、指定しなければデフォルトの数値が採用されます。
{ SinOsc.ar(220, 0, 0.3) }.play;
このコードで、パラメータが3つまでしか書かれていなかったのは「4つ目はデフォルトで鳴らしていいよ」という意味なのでした。

※デフォルト値についても、やはりヘルプで確認できます。
ヘルプのClass Methodsの項目の一番上です。

freq: 440.0, phase: 0.0, mul: 1.0, add: 0.0

極端な話、最初のコードを
{ SinOsc.ar() }.play;
こう書くと、デフォルト数値のままのサイン波が鳴ります。
(ピッチが440Hzで位相が0でボリュームがMAXの1.0)

パラメータのルール②「パラメータを書く順番を守る」

それならば、
{ SinOsc.ar(220, 0, 0.3) }.play;
このコードでphaseはデフォルト値で鳴らしていいんだから、phaseの「0」も省いていい?・・・いいえ、答えはNoです。
phaseの「0」を省いて
{ SinOsc.ar(220, 0.3) }.play;
と書いてしまうと、SuperColliderは、

freqが220
phaseが0.3

と捉えてしまいます。
その上、mulとaddはデフォルトと捉え、つまりmulを1.0のまま鳴らしてしまいます。

そういうわけで、各パラメータの順番を守ることはとても大切です。

※実は好きな順番に書くことができる方法もあるのですが、今説明するとややこしくなってしまいそうなので、別の機会に書こうと思います。ちなみに僕は大抵の場合この順番通りに書く方法でやっています。

さて、
{ SinOsc.ar(220, 0, 0.3) }.play;
の中で、カンマのあとにスペースが入っていますが、スペースは入れても入れなくてもかまいません。スペースはSuperColliderにはスルーされる(なんの意味も持たない)仕組みになってます。

僕はスペースが入ったほうが見やすいと思いいつも上記のように書くのですが、極端な例を挙げると…
{SinOsc.ar(220,0,0.3)}.play;
{    SinOsc.ar(    220,     0,     0.3    )    }.play;
どちらでもOK、実行すると音は鳴ります。

ヘルプのExample

せっかくSinOscのヘルプが開いているので、一番下までスクロールしてExamplesの音を聴いてみることをおすすめします。

ヘルプ画面内で直接実行する(音を出す)ことができます。
聴きたいサンプルの行をマウスクリックしてcommand+enterです。
音を止めるにはcommand+.(コマンド&ピリオド)です。

コードをコピーしてエディタにペーストして、数値を色々と変えて実行してみるのも勉強になります。

ところで、ヘルプウィンドウ内って英語で書かれていますよね。
僕はいつもWebの翻訳サービスで翻訳しながら読んでいます。
それでも全然意味わからないものも多いです。なのでExampleを眺めてみたり、Example内の数値を変えてみて実験したりすると発見があります。
※そういう時に入力ミスで爆音を鳴らしてしまったりするのでホント注意です。

ノコギリ波

ノコギリ波を鳴らしてみることにします。

{ Saw.ar(220, 0.3) }.play;

220Hzのノコギリ波が0.3の音量で鳴ります。
phaseパラメータの指定が無いですね。そのわけはヘルプを見るとわかります。
Sawと書かれている部分にカーソルを置いてcommand+dします。

Saw.ar(freq: 440.0, mul: 1.0, add: 0.0)

Sawはphaseのパラメータを持っていませんでした。
このように、鳴らす音によって持ってるパラメータが違います。
慣れるまでは、その音がどんなパラメータを持っているのか調べながらやっていくのがよいと思います。

今日はこのへんで終わります。

最終的にはエンベロープやモジュレーションやフィルターなどを使って音源を作って、それをシーケンスさせるところまで行きたいと思っていますので、まだまだこれから長くなりそうです。

また続きを書きます。

興味ある方は
LFTri.ar(220, 0, 0.3)
LFPulse.ar(220, 0, 0.5, 0.3)
これらも同じような感じで音を出せますのでヘルプを見ながら色々と実験してみてはいかがでしょうか。

それと

{ SinOsc.ar(220, 0, 0.3)!2 }.play;

最初のコードをこう書くと、左右のスピーカーから音が出ます。
※Sawも同じくです。細かい説明は後日に。


今日のまとめ

・SC3の”オーディオ信号を処理する機能”(SC Server)を起動
ServerメニューからBoot Serverを選択
・コードの実行(音を出す)
マウスカーソルをコードの行(のどこでも)に持ってきて「command + enter」
・音を止める
「command + .(コマンド&ピリオド)」
・サイン波
{ SinOsc.ar(freq, phase, mul) }.play;
・ノコギリ波
{ Saw.ar(freq, mul) }.play;
・音量は1.0が最大
・ヘルプブラウザで調べるには
調べたい部分にマウスカーソルを置いて「command+d」
・パラメータは「書かなければデフォルト数値になる」
・パラメータは「書く順番を守る」
・ヘルプのExample
ヘルプウィンドウ内でそのまま実行できる


以上です。
ありがとうございました。


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


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