前橋工科大学 – サウンドプログラミング 2022
Sonic Pi 基本2 – プログラムの構造化とデータ構造
引き続きSonic Piの基本について実際に音を出して確認しながら学習していきます。今回はSonic Piの言語の構造に注目して様々な機能を紹介していきます。Sonic PiはRubyというプログラミング言語をベースにしています。ですのでRubyの様々な構造をSonic Piで使用することが可能です。今回は、プログラムを構成する3つの大きな構造、順次処理 (Sequence)、繰り返し(Iteration)、条件分岐(Selection)をSonic Piで応用して演奏してみます。また後半はリストというデータ構造について紹介します。最後はここまでの知識を総動員して、Steve Reichの “Piano Phase” という曲をSonic Piで再現してみます。
スライド資料
サンプルプログラム
回数を指定した反復
3.times do play 50 sleep 0.5 sample :elec_blup sleep 0.5 play 62 sleep 0.25 end
反復のネスト + ループ
live_loop :live do sample :drum_heavy_kick 2.times do sample :elec_blip2, rate: 2 sleep 0.25 end sample :elec_snare 4.times do sample :drum_tom_mid_soft sleep 0.125 end end
if文による条件分岐
i = 0 live_loop :live do if i % 4 == 0 then sample :drum_heavy_kick else sample :drum_cymbal_closed end sleep 0.125 i = i+1 end
if文とone_inによる確率的な条件分岐
live_loop :live do if one_in(3) sample :drum_heavy_kick else sample :drum_cymbal_closed end sleep 0.125 end
if文とone_in その2
live_loop :live do if one_in(3) sample :drum_heavy_kick sleep 0.25 else sample :drum_cymbal_closed sleep 0.125 end end
複数のリズムの共存
live_loop :live do sample :drum_heavy_kick 4.times do sample :elec_blip2, rate: 2 sleep 1.0/8.0 end sample :elec_snare 4.times do sample :drum_tom_mid_soft sleep 0.125 end end live_loop :live2 do sample :drum_heavy_kick 3.times do sample :elec_blip2, rate: 2 sleep 1.0/8.0 end sample :elec_snare 4.times do sample :drum_tom_mid_soft sleep 0.125 end end
リスト
live_loop :live do play choose([ 52, 55, 59 ]) sleep 0.25 end # 一度に演奏 play [ 52, 55, 59 ] # オプションを指定して一度に演奏 play [ 52, 55, 59 ], amp: 0.3 # 音階で指定 play [ :E3, :G3, :B3 ] # リストの要素にアクセス loop do play [ 52, 55, 59 ][ 1 ] sleep 0.25 end # 55が演奏される
Piano Phase
notes = [:E4, :Fs4, :B4, :Cs5, :D5, :Fs4, :E4, :Cs5, :B4, :Fs4, :D5, :Cs5] use_synth :prophet with_fx :reverb do live_loop :reich1 do i = 0 12.times do play (notes[i]), release: 0.4, pan: 0.8, cutoff: 80 sleep 0.15 i = i + 1 end end live_loop :reich2 do i = 0 12.times do play (notes[i])+12, release: 0.4, pan: -0.8, cutoff: 80 sleep 0.1501 i = i + 1 end end end
アンケート
本日の授業に参加した方は以下のアンケートに答えてください。