SonicPiについてのメモ。
SonicPiとは
http://sonic-pi.net/
SuperColliderのプロセスをバックエンドに、Rubyに似た言語でプロセスにアクセスするソフトウェア。
何故かうちの環境だと3.2が動かないので、3.1を利用してる。
どんなもん作ったか
医者いったあと機材いじり。#sonicpi というソフトでプログラム書いて曲つくってました。 pic.twitter.com/Z9lMZKL2F8
— MachiaWorks@C100土曜西さ02b (@MachiaWorx) April 4, 2020
得られた知見
- 展開の同期については合わせる部分に対応して 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はすでに使ってる形になる模様