Created
March 17, 2019 11:49
-
-
Save ShigekiKarita/c57bd98d0a8111a4b1209b37840b4f21 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// # 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