SonicPiについてのメモ。

SonicPiとは

http://sonic-pi.net/

SuperColliderのプロセスをバックエンドに、Rubyに似た言語でプロセスにアクセスするソフトウェア。

何故かうちの環境だと3.2が動かないので、3.1を利用してる。

どんなもん作ったか

得られた知見

  • 展開の同期については合わせる部分に対応して sync 命令を置くことで同期可能
  • sync命令を置くときは、あくまで待機状態にしておくこと。
    つまり4つ打ちを1小節の長さに同期させる際は、4つ打ちのフレーズを書いた際、
    sleep命令できっちり4つ打ちの長さを確保しないで、それより短い時間の入力をしたあとsync命令を書く
  • スケール・コードについては配列として構成音を取得することが可能
    もしくはPitch命令を使うと音の高さを変更可能
  • スケール構成音の取得がうまくない場合、カウンタを用意しておいてその剰余からフレーズを分岐させるのが早い
  • 変数にフレーズ再生の内容を格納しておいて、その中身に対してcontrol命令を行うことであとでパラメータを変更可能
    これによってElektronのパラメータロックのような演出が可能
  • 外部でカウンタを初期化して、live_loop内部でカウンタを加算していくことが可能
    これによってフレーズを小節数ごとに分岐させることが可能
  • 1小節の単位は制御が可能。
    4つ打ちがsleep 2 という命令で管理可能なので、これをsleep 1.5もしくはsleep 3にすることで3拍子っぽく管理することが可能。あとはSync命令を駆使することでワルツを作曲可能
  • MIDIメッセージも出力可能。ただ、選択しないと全部の出力先に放出する模様。
    また、MIDIメッセージの発音の方が早いため、同期はレイテンシーを確保しながらじゃないと困難
  • sampleはrateでピッチ変更可能
  • loopは無名関数のループ、live_loopは内部を書き換えつつ再生することを前提としたループ。
    よって、loopはthreadに関する命令を使うが、live_loopはすでに使ってる形になる模様