Skip to content

Instantly share code, notes, and snippets.

@mohayonao
Last active July 23, 2018 13:49
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save mohayonao/8048788 to your computer and use it in GitHub Desktop.
Save mohayonao/8048788 to your computer and use it in GitHub Desktop.
CoffeeCollider勉強会用の資料 http://goo.gl/Z2JmZ2

IDE

http://mohayonao.github.io/CoffeeCollider/

  • "Run" でコードを実行
  • "Stop" で停止
  • "Link" でコードをリンク化 (保存)
  • "Compile" コンパイル後のコード(JavaScript)を表示

IDEの機能

  • サンプルコード読み込み

  • Gistコードの張り付け

  • 鍵盤インターフェース

    • コードの中に Message.on "keyboard" があると表示されます
    • 鍵盤操作で MIDI番号(60-83) と gate信号(0,1 押したか離したか) が送信されます
  • 注意

    • 画面をリロードすると書いてるコードは消えてしまいます
    • "Link" ボタンでリンク化しておくと消さずにリロードできます

使えるUGen一覧

https://github.com/mohayonao/CoffeeCollider/wiki/91-List-of-Implemented-UGens

サンプルコード

https://github.com/mohayonao/CoffeeCollider/tree/master/examples

参考資料

コード生成用メソッド

F4.midichord("M7", inversion:0, length:4) # FM7 の音列 [65, 69, 72, 76] 

(->
  chord = F4.midichord("M7")
  Mix SinOsc.ar(chord.midicps()) * 0.25
).play()

引数

  • inversion コードの転回
    • ドミソ (1:ミソド, -1:ソドミ)
  • length コードの音数 (省略できる)
    • C4.midichord(length:4) # [60, 64, 67, 72] ドミソド

コードネーム

- "M"
- "m"
- "7"
- "M7"
- "m7"
- "augmented"
- "a"
- "diminished"
- "i"
- "diminished7"
- "i7"
- "minor"
- "major7"
- "dom7"  
- "minor7"
- "aug"   
- "dim"   
- "dim7"  
- "1"-  
- "5"-  
- "+5"- 
- "m+5"   
- "sus2"  
- "sus4"  
- "6"-  
- "m6"- 
- "7sus2" 
- "7sus4" 
- "7-5"   
- "m7-5"  
- "7+5"   
- "m7+5"  
- "9"-  
- "m9"- 
- "m7+9"  
- "maj9"  
- "9sus4" 
- "6*9"   
- "m6*9"  
- "7-9"   
- "m7-9"  
- "7-10"  
- "9+5"   
- "m9+5"  
- "7+5-9" 
- "m7+5-9"
- "11"- 
- "m11"   
- "maj11" 
- "11+"   
- "m11+"  
- "13"- 
- "m13"   

メッセージング

Message.on "msg", (value)->
  console.log value

WEBコンソールからメッセージ送信できます

cc.send("msg", "Hello, world!!");

パターン

p = Pseq([1, 2, 3], 10)
p.next()   # => 1         (1つ進む、終わると null が返る)
p.nextN(2) # => [ 2, 3 ]  ( 指定した数だけ取り出す、終わったあとは null が続く)

# イテレーション
p.do (content, index)->
  console.log content, index

# タスクの中で使うときは syncblock を使います
Task ->
  p.do syncblock (content, index)->
    console.log content, index
    1.wait()
.start()
  • Pseq(list, n) list を n 回繰り返す
  • Pser(list, n) list の要素を n 個繰り返す
  • Pshuf(list, n) list を ランダムに並び替えて n 回繰り返す
  • Prand(list, n) list の要素をランダムに n個繰り返す
  • Pn(list, n) list を n回繰り返す
  • Pstutter(list, n) list の 要素を n回繰り返す

https://github.com/mohayonao/CoffeeCollider/wiki/22-Pattern

デモ: http://mohayonao.github.io/CoffeeCollider/#pattern.coffee

スケールは 長調 とか 短調 とか

Scale.major.degrees() # 長調の音列 [0, 2, 4, 5, 7, 9, 11] が返る

# ドレミファソラシド
synth = SynthDef (freq)->
  Out.ar(0, SinOsc.ar(freq) * Line.kr(1, 0, dur:1, doneAction:2))
.add()

Task ->
  Scale.major.degrees().do syncblock (i)->
    freq = (60 + i).midicps()
    Synth(synth, freq:freq)
    1.wait()
.start()

https://github.com/mohayonao/CoffeeCollider/wiki/22-Scale

ダブルクォーテーションで囲まれた特定フォーマットの文字列は数値に変換されます

"20Hz"       #-> 20Hz を秒数に変換した 0.05 に変換される
"bpm120 l4"  #-> テンポ120 の四分音符分の秒数 0.5 に変換される
"bpm120 l4." #-> 付点四分音符 0.75 (= 0.5 * 1.5) 

"~0.5ms"     # -> 0.5ミリ秒を周波数に変換 2000
"~bpm120 l4" # -> テンポ120 の四分音符分の周波数 2 に変換される

"A4"  # -> MIDI番号 69
"A#4" # -> シャープ
"A+4" # -> シャープ
"Ab4" # -> フラット
"A-4" # -> フラット

https://github.com/mohayonao/CoffeeCollider/wiki/11-numeric-string

SynthDef は音の設計図 (Synth Definition) を作るための関数です.

# 定義する
synth = SynthDef (freq=440, amp=0.5)->
  Out.ar(0, SinOsc.ar(freq) * amp)
.add()

# 使う
x = Synth(synth).play()

# 引数の値を変える
x.set freq:880, amp:0.25

https://github.com/mohayonao/CoffeeCollider/wiki/22-SynthDef

Task は時間制御のための関数です. Task の中で wait 関数を呼び出すことで指定時間待機できます.

Task ->
  console.log "begin"
  1.wait() # 1秒待つ
  
  # Task内での wait を含む繰り返し処理には do メソッド と synblock を使います
  [ 440, 880, 660, 880 ].do syncblock (freq, i)->
    console.log "#{i}: freq=#{freq}"
    0.5.wait()
  
  console.log "end"
.start()

do メソッドは以下のように定義されています

  • Number#do 0 から n-1 までを繰り返す
Task ->
  10.do syncblock (i)->
    console.log i
    0.5.wait()
.start()
  • Array#do 配列の要素をひとつずつ処理する
Task ->
  [ C4, E4, G4, E4 ].do syncblock (midi, i)->
    console.log midi
    0.5.wait()
.start()
  • Pattern#do Patternの最後までひとつずつ処理する
Task ->
  PSeq([1, 2, 3], Infinity).do syncblock (n, i)->
    console.log n
    0.5.wait()
.start()

Taskは並列することも可能です http://mohayonao.github.io/CoffeeCollider/#reich.coffee

デモ: http://mohayonao.github.io/CoffeeCollider/#fizzbuzz.coffee

@tn800
Copy link

tn800 commented Dec 22, 2013

ENGLISH VERSION is here : https://gist.github.com/hems/8075546

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment