Tech Racho エンジニアの「?」を「!」に。
  • 開発

ライブコーディング入門:Sonic Pi篇パート1

はじめに

バイトの片山です。久しぶりにBPSに来たら仕事が全く無かったので仕方なく記事を書いています。

最近ミリシタをやり始めました。スマホゲーはこれまで全部三日坊主でなかなか続かなかったのですが、ミリシタに関しては大学生活最後の夏休みをほとんど持っていかれてます。

大学生の夏休みといえばビーチでキャッキャウフフなイメージですが、今年も僕はご縁がありませんでした。自室で独り、ふと知り合いのInstargramを見てみるとカレシカノジョでナイトプール行ったり、旅館でアラアラウフフタイムだったりしてしょんぼりするわけです。

ちなみに僕はこの前青春18きっぷで京都・大阪まで行ってきました。JRには藤沢から乗ったのですが、台風の影響で大垣で立ち往生してしまい、結局10数時間かかってしまいました。
去年の夜行バスもそうでしたが、結構キツかったので二度とやりたくありません。


↓宇治の大吉山です

daikichiyama

↓某ベンチです。座りたかったのですが、お兄さんたちが釣りしてたので断念しました。

kumiko

↓大阪のどっかの夕焼けです

osaka

↓伏水酒蔵小路に行ってきました。17種で1700円

sake


......さて、前置きが長くなりましたが、今回はSonic Piでライブコーディングに挑戦してみようと思います。

あ、書き忘れていましたが桜守歌織ちゃん推しです。

Sonic Piに入門

音楽におけるライブコーディングというと、HaskellベースのTidalCyclesやLISPベースのExtemporeあたりが有名ですが、関数型ベースでちょっと分かりにくかったり導入が面倒くさかったりで取っ付きにくい印象があります。
その点、Sonic Piは導入が超簡単でRubyベースなので入門にうってつけ(らしい)です。

ケンブリッジ大学のSam Aaron氏によって教育用に作られた環境で、ラズパイ、Mac、Windows、Linuxで動きます。

インストール

まずは公式サイトで使用OSに合わせてディスクイメージを入手します。

Macの場合は最初に立ち上げる時に開発元がうんたらで開けませんと言われて開けないと思いますので、Dockとかに入れて右クリックからの開くをやるといけます。

無事起動出来るとこんな感じの画面が出てくると思います。

sonicpi

最初からなんか書いてあります。左上のRunボタンを押してみるとアンビエントな感じの音が出てくるはずです。

入門

上記コードの数値を変えてRunボタンを押してみるとなんとなく雰囲気が出るのではないでしょうか(適当)

Sonic Piには開発環境の左下に教材が付いています。ご丁寧なことに日本語版が表示されています。さすが教育用です。

sonicpi

このチュートリアルに沿って試していきたいと思います。

1.1 ライブコーディング

心を解き放てと書いてありますがよくわかりません。

それはさておき、以下のコードをコピペしてRunしろとあるのでとりあえずやってみます。

live_loop :flibble do
 sample :bd_haus, rate: 1
 sleep 0.5
end 

bd haus(バスドラム)というサンプルが鳴った後に0.5秒間待機する、という感じに上から順番に処理されていって、それがループされてる感じですね。流れはけっこうイメージし易いかなと思います。
rateをいじると少し音が変わる感じがします。

ちょっとだけ応用して以下のようにしてみると、bd_haus >> 0.5sec待機 >> ambi_choir >>0.8sec待機 >> bd_haus >> 0.5sec待機 >>...........という感じになります。

live_loop :flibble do
 sample :bd_haus, rate: 1
 sleep 0.5
 sample :ambi_choir, rate: 1
 sleep 0.8
end 

sampleの名前わかんなきゃ書けないじゃないか!という方、安心してください。sampleと入力すると候補が一杯表示されます。

sonicpi

また、コメントアウトもちゃんと出来るようで、#を使います。

live_loop :flibble do
 sample :bd_haus, rate: 1
 sleep 0.5
# sample :ambi_choir, rate: 1
end 

複数行コメントはどうすんねん!?と思いましたが、Rubyベースなのを思い出して試しにやってみたらSonic PiでもRubyと同じく、=begin=endで囲めばオッケーでした。

live_loop :flibble do
 sample :bd_haus, rate: 1
 sleep 0.5
=begin
 sample :ambi_choir, rate: 1
 sleep 0.5
=end
end 

次は、空いているバッファに次のコードをコピペしてRunしろとあります。僕の場合はBuffer0からBuffer3までデフォルトでコードが入っていたのでBuffer4を選択しました。

live_loop :guit do
 with_fx :echo, mix: 0.3, phase: 0.25 do
   sample :guit_em9, rate: 0.5
 end
#  sample :guit_em9, rate: -0.5
 sleep 8
end
live_loop :boom do
 with_fx :reverb, room: 1 do
   sample :bd_boom, amp: 10, rate: 1
 end
 sleep 8
end 

パッと見よくわかりませんが、コメントアウトを外したり、mixの値を0~1で動かしてみろとのことなので色々とやってみます。

コメントアウトを外すとギターの音が逆再生されるみたいですが、これはrateがマイナスの値になっているからなのかな? おそらくrateはサンプルファイルの再生スピードなのでしょう。(この辺の界隈ではマイナスの値を入れると逆再生という仕組みはよくあることなので)

mixをいじるとエフェクトのかかりが変わっている感じがしますね。phaseとあるのでフェイザーをどれだけミックスして音を出すかということを調整しているのだと思います。

1.2 インターフェースの探索

ここの項目は直にチュートリアルを見てもらったほうがわかりやすいと思いますので割愛しますが、一つ気になったのがスコープビューアです。

画面右上のScopeというところをクリックすると音の波形が見られるようになります。下図赤枠部分をクリックすると波形を表示してくれる青枠のボックスが出現します。

sonicpi

まぁ波形が見られるからなんてことはないんですが、鳴ってる音がどんな感じの波形なのかわかると音響合成の感覚が身につくかもしれません。さすが教育用です。

1.3 遊びを通した学び

なんか心意気について書いてあります。よく読んでおきましょう。

おわりに

キリが良いので今回はここまでということにします。

関連記事(サウンドとコンピュータ)

python-oscを使ってみる:前編

python-oscを使ってみる:後編

応用編1: pythonとopenFrameworksをOSCで接続する

応用編2: PythonとopenFrameworksとPuredataをOSCで接続する

iPhoneとopenFrameworksをOSCで接続する


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。