Skip to content

Instantly share code, notes, and snippets.

@ShigekiKarita
Created March 17, 2019 11:49
Show Gist options
  • Save ShigekiKarita/c57bd98d0a8111a4b1209b37840b4f21 to your computer and use it in GitHub Desktop.
Save ShigekiKarita/c57bd98d0a8111a4b1209b37840b4f21 to your computer and use it in GitHub Desktop.
/// # Part I. BASICS 基礎
/// ## 1. Hello World
/// 下の行にカーソルをおき, [ctrl+Enter] すると右下のPost windowに出力
"Hello World".postln;
/// ## 2. サーバと言語
/// SuperColliderは二つのアプリケーション「サーバ」と「言語」からなる .サーバ(scsynth)は音の生成を担っている.言語(sclangまたはクライエント,インタープリタ)はサーバの制御に使う.「ステータスバー」はこの2つのステータスを表示している.
/// ## 2.1 サーバの起動
/// [ctrl+B] で起動.ステータスバーをクリックして"Boot Server"を選んでも起動する.
/// ## 3. 最初のサイン波
/// サイン波を鳴らすというのが,コンピュータ音楽言語のHello Worldだ.下の行にカーソルを起き [ctrl+Enter] を押す.ボリュームに気をつけましょう.
{SinOsc.ar}.play;
/// 音を止めるには [ctrl+.]
/// TIP: 全体ボリュームの調節
s.volume.gui;
/// 面白いサイン波.
({SinOsc.ar(
// サンプリング周波数で正規化された乱数列
freq: LFNoise0.kr(freq: 500).range(500, 1500),
// サイン波の大きさ
mul: 0.1
)}.play;)
/// TIP: サイン波の周期(周波数)が動いているのがわかる
s.scope;
s.freqscope;
/// ## 4. エラーメッセージ
/// 音が出ないときなどPost windowを確認するとスペルミスなどのエラーが表示されている
/// TIP: SuperColliderの学習方法は,外国語の学習と同じで,ただ喋ろうと試みて,語彙を増やし,文法に注意して,ミスから学ぶことである.最悪の場合でも,SuperColliderがクラッシュするだけだ.サンパウロで発音を間違えて変なバスに乗るよりはマシである.
/// ## 5. パラメータの変更
/// SuperCollider Book の例.数字を変更して遊ぼう.
// Resonant Low Pass Filterの略
({RLPF.ar(
// [0, 1] のランダムなインパルス
// densityを大きくすると間隔が狭まる
in: Dust.ar(density: [1, 5]),
// サンプリング周波数で正規化,線形補間された乱数列
// freqの値を大きくすると高くなる
freq: LFNoise1.ar(freq: [0.3, 0.2]).range(100, 3000),
// レゾナントが大きくなる.
rq: 0.2)}.play;)
/// TIP: plotメソッドで表示してみよう
({LFNoise1.ar(freq: [30, 2])}.plot(duration: 0.1);)
/// ## 6. コメント
// C言語と同じで一行コメントや
/*
複数行のコメントが
できる
*/
/// ## 7. 優先順序
/// 常に左から右へ評価される.掛け算も足し算も優先順序はない.
5 + 2 * 2; // (5 + 2) * 2 = 14
5 + (2 * 2); // 9
/// ## 8. 最後の値が返り値
/// ## 9. コードブロック
(
/// () で囲むと複数行を [ctrl+Enter] で評価できる.コードブロックと呼ぶ
"First Line"; // こっちはでてこない
"Second Line"; // Post windowに出力される
)
/// ## 10. Post windowのクリーンアップ方法
/// [ctrl+shift+P] でまっさらになる
/// ## 11. SuperColliderの出力を録音
/// クイックレコード.変数sはサーバが割り当てられている
s.record;
{Saw.ar(LFNoise0.kr([2, 3]).range(100, 2000), LFPulse.kr([4, 5]) * 0.1)}.play;
s.stopRecording; // post windowにファイル名がでてくる
/// GUIからも操作できる (record) ボタンを押す.
s.makeWindow;
/// ## 12. 変数
/// a-zの一文字小文字変数はグローバルな定義
/// ただしsはもともとサーバに割り当てられている
/// グローバル変数を定義
a = "Hello, World"; // string
b = [0, 1, 2, 3, 5]; // list
/// こいつは次の章で説明します
c = Pbind(\note, Pwhite(0, 10), \dur, 0.1);
/// グローバル変数を使ってみる
a.postln;
b + 100; // [100, 101, 102, 103, 105]
c.play;
d = b * 5; // 新しい変数に代入
/// ちゃんとした名前のグローバル変数は ~ をつける
// これはエラー: myFreqs = [415, 220, 440, 880, 220, 990];
~myFreqs = [415, 220, 440, 880, 220, 990];
~myDurs = [0.1, 0.2, 0.2, 0.5, 0.2, 0.1];
Pbind(\freq, Pseq(~myFreqs), \dur, Pseq(~myDurs)).play;
/// ### 12.1 "グローバル" vs. ローカル
/// グローバル変数はSuperCollider全体で読み書きできるので嫌なときがある.たとえば他のよく知らないファイルからもアクセスできる.
/// ローカル変数はスコープ内だけで使える変数なのでそういう問題がない.
( // コードブロックはスコープになる
var apples = 4;
~apples = 3;
)
~apples.postln;
// エラー,ローカルなので見つからない: apples.postln;
/// ### 12.2 再代入
x = 10;
x = x + 1; // 11に書き換わる
x.postln;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment