先日12/11~12/12で開催されましたTokyo Demo Fest(以下TDF)のShader Showdownセミファイナル第1戦にてBGMをSonicPiによる演奏を使用して担当させていただきました。
以下は実際に行われたTDFの様子になります。
SonicPiの画面のみを確認したい方はこちらをご覧ください。
今回はこちらで使用していたSonicPiのコードの小技的な部分をさっくりと解説したいと思います。
なお、実際に動画内に乗っているコードと今回の記事内で記述されているコードに差異がある場合でも機能的には大差ありません。
##16小節の把握
自分はオードソックスな四つ打ちをメインにしたテクノっぽい方向に寄せて書くのが基本です。
となると、変化はおおよそ16小節などで区切ってかけていきたいところですが、いちいちログに吐かせるための無駄な行の追加などは省いてしまいたいし、折角なのでなにがしかの要素に使いたいところ。
なので、自分は以下のような形でクラッシュシンバルを鳴らすことで、16小節の間隔を耳と体で認識できるように実装しています。
live_loop :hi do
16.times do
tick
#trは自分が使用しているサンプルフォルダまでのパスを定義してある変数です
#以下の記述ではtrのパスにあるフォルダ内でcrashと名前に入っているサンプルファイルが鳴ります
sample tr,'crash',amp:2 if(spread,1,256).look
sleep 0.25
end
end
##ブレイクもどきの手軽な作り方
一瞬だけ高音/低音だけを残して他の音を切ることで多少展開に近い何かを作れるようにしています。
例として挙げると、以下のコードのうちhpfの数値を一瞬だけ120~130程度まで上げて実行し、音が変わり始めたのを認識した瞬間に0に戻して再実行することで一瞬だけ低音を切る、などになります。
set_mixer_control! hpf:0,hpf_slide:0.75
set_mixer_control! lpf:130,lpf_slide:16
##負荷をかけないエフェクトの使い方
公式フォーラムに記述があったはず(現在目下捜索中)なのですが、SonicPiの仕様として以下のような書き方をした場合1ループごとにエフェクトを生成している状態になります。
この状態だと毎ループ毎にエフェクト生成処理が挟まるため、どんどん処理が重くなっていきます(特にreverbなどの処理が重めのエフェクトだと顕著です。)
live_loop :synth do
with_fx :reverb do
tick
#ここにシンセやサンプルを記述
sleep 0.25
end
end
そのため、以下のようにlive_loop内に繰り返し処理を入れて記述をすることでエフェクト生成処理の回数を抑え、かかる負荷を少なくするようにしています。
ただし、この繰り返し処理を入れて実行するとループ内を書き換えて実行した後反映されるまでワンテンポ掛かる(実行中のループでは反映されず、次のループから反映される)ため、その点には注意が必要です。
自分は上記で書いた16小節把握用のクラッシュシンバルの間隔を体で覚えて、おおよそ同タイミングで反映されるように実行しているときが多いです。
live_loop :synth do
with_fx :reverb do
16.times do ##以下16回繰り返し
tick
#ここにシンセやサンプルを記述
sleep 0.25
end
end
end
おおよそ以上が自分が使っているちょっとしたtipsになります。
他の記述は基本的に公式チュートリアルに記載のあるものばかりですので、ぜひ実際にSonicPiをインストールしてチュートリアルに触れてみてください。
##Shader Showdown出演感想
注:以下ポエムに似た何かですので読み飛ばしたい方は読み飛ばしてください。
今回幸運にもオーガナイザーの一人からお声がけをいただきShader Showdownのイベントに音源だけとはいえ参加させていただくことができました。
自分の腕で足りるのか不安なところはありましたが、実際に自分の音が鳴る中がむさんやかもしかさんがゴリゴリにかっこいい絵を作り出していくのを見ていくのは本当に興奮しました。
実際に終わった後も音を褒めていただき、特にがむさんから直接自分の音を聞いて書くものを決めたという話を聞いたときは飛び上がるほど嬉しかったです。
また、配信をご覧になられていた方々もコメントなどで積極的に音源褒めていただきまして本当にありがたかったです。
まだまだつたないところもありますが、今後ともSonicPiなどを使用してlive codingを頑張っていこうと思います。
本当に今回はありがとうございました!