yoppa.org


前橋工科大学 - サウンドプログラミング(環境情報デザイン) 2019

Sonic Pi 基本3 – コード (和音) とスケール (旋法)

前回「データ構造」で解説したリストは、複数の値をひとつにまとめることができる機能でした。リストをplayのnote(音程)に用いることで、複数の異なる音階の音を同時に演奏することができました。つまり和音(chord)を演奏することが可能です。

Sonic Piでは、コードネームからその和音に含まれる音をリストとして生成する「chord」という関数が搭載されています。この機能を用いることで、コードネームを指定するだけで複雑なコード進行をプログラムで指定することが可能となります。

またchord関数とよく似た機能として、scale関数があります。scaleはスケール(旋法)を指定する関数です。スケール名を指定することで複数の音階から構成される音列を生成することが可能です。

スライド資料

サンプルプログラム

base = :C3

live_loop :drums do
  sample :bd_haus, cutoff: 80, amp: 2.5
  sleep 0.25
  if one_in (4)
    4.times do
      sample :drum_cymbal_closed, rate: 1.2
      sleep 0.25/4.0
    end
  else
    2.times do
      sample :drum_cymbal_closed, rate: 1.2
      sleep 0.25/2.0
    end
  end
end

live_loop :random_bd do
  if one_in (3)
    sample :bd_haus,
      rate: choose([1, 2, 4]), amp: 1.5
  end
  sleep 0.125
end

live_loop :harmony do
  with_fx :panslicer, phase: 0.25 do
    use_synth :dsaw
    play chord(base, :m7, num_octaves: 4),
      release: 3.0, cutoff: 95, amp: 1.5
    sleep 4
  end
end

live_loop :live do
  with_fx :echo , decay: 0.5, phase: 0.75 do
    use_synth :prophet
    play scale(base, :dorian, num_octaves: 4).shuffle.take(3),
      cutoff: rrand(60, 120), release: 0.5
    sleep 0.125
  end
end

live_loop :live2 do
  with_fx :echo , decay: 0.5, phase: 0.615 do
    use_synth :fm
    play scale(base + 12, :dorian, num_octaves: 4).shuffle.take(2),
      release: 0.07, cutoff: rrand(80, 100), pan: rrand(-1, 1)
    sleep 0.125
  end
end