yoppa.org


前橋工科大学 – サウンドプログラミング 2022

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

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

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

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

スライド資料

参考資料:

サンプルコード

Chooseによるリストから要素の選択

live_loop :list 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

コード (和音, chord)

# コードいろいろ
live_loop :chord do
  play chord(:C4, :major)
  sleep 1.0
  play chord(:C4, :major7)
  sleep 1.0
  play chord(:C4, :minor)
  sleep 1.0
  play chord(:C4, :minor7)
  sleep 1.0
  play chord(:C4, :dim)
  sleep 1.0
  play chord(:C4, :dim7)
  sleep 1.0
  play chord(:C4, :sus2)
  sleep 1.0
  play chord(:C4, :sus4)
  sleep 1.0
  play chord(:C4, :augmented)
  sleep 1.0
end

カノン進行

live_loop :chord do
  use_synth :fm
  play chord(:C5, :M)
  sleep 1.5
  play chord(:G4, :M)
  sleep 1.5
  play chord(:A4, :m)
  sleep 1.5
  play chord(:E4, :m)
  sleep 1.5
  play chord(:F4, :M)
  sleep 1.5
  play chord(:C4, :M)
  sleep 1.5
  play chord(:F4, :M)
  sleep 1.5
  play chord(:G4, :M)
  sleep 1.5
end

王道進行 (IV△7–V7–iii7–vi progression)

live_loop :chord do
  use_synth :fm
  play chord(:F4, :M7)
  sleep 1.5
  play chord(:G4, '7')
  sleep 1.5
  play chord(:E4, :m7)
  sleep 1.5
  play chord(:A4, :m)
  sleep 1.5
end

TK進行

# TK進行
live_loop :chord do
  use_synth :fm
  play chord(:A4, :m)
  sleep 1.5
  play chord(:F4, :M)
  sleep 1.5
  play chord(:G4, :M)
  sleep 1.5
  play chord(:C4, :M)
  sleep 1.5
end

コードの応用いろいろ

# カノンアルペジオ
live_loop :chord do
  play_pattern_timed chord(:C5, :major), 0.25
  sleep 0.5
  play_pattern_timed chord(:G4, :major), 0.25
  sleep 0.5
  play_pattern_timed chord(:A4, :minor), 0.25
  sleep 0.5
  play_pattern_timed chord(:E4, :minor), 0.25
  sleep 0.5
  play_pattern_timed chord(:F4, :major), 0.25
  sleep 0.5
  play_pattern_timed chord(:C4, :major), 0.25
  sleep 0.5
  play_pattern_timed chord(:F4, :major), 0.25
  sleep 0.5
  play_pattern_timed chord(:G4, :major), 0.25
  sleep 0.5
end
# カノンアルペジオ2
live_loop :chord do
  play_pattern_timed chord(:C5, :major), [0.25, 0.5]
  sleep 0.5
  play_pattern_timed chord(:G4, :major), [0.25, 0.5]
  sleep 0.5
  play_pattern_timed chord(:A4, :minor), [0.25, 0.5]
  sleep 0.5
  play_pattern_timed chord(:E4, :minor), [0.25, 0.5]
  sleep 0.5
  play_pattern_timed chord(:F4, :major), [0.25, 0.5]
  sleep 0.5
  play_pattern_timed chord(:C4, :major), [0.25, 0.5]
  sleep 0.5
  play_pattern_timed chord(:F4, :major), [0.25, 0.5]
  sleep 0.5
  play_pattern_timed chord(:G4, :major), [0.25, 0.5]
  sleep 0.5
end

スケール (旋法, scale)

# いろいろなスケール (旋法)
live_loop :scale do
  play_pattern_timed scale(:C5, :major), 0.25
  sleep 0.5
  play_pattern_timed scale(:C5, :minor), 0.25
  sleep 0.5
  play_pattern_timed scale(:C5, :iwato), 0.25
  sleep 0.5
  play_pattern_timed scale(:C5, :ritusen), 0.25
  sleep 0.5
  play_pattern_timed scale(:C5, :diatonic), 0.25
  sleep 0.5
  play_pattern_timed scale(:C5, :augmented), 0.25
  sleep 0.5
  play_pattern_timed scale(:C5, :bartok), 0.25
  sleep 0.5
end

7つのモード (mode)

# モード
live_loop :live do
  play_pattern_timed scale(:C4, :ionian), 0.25
  sleep 0.5
  play_pattern_timed scale(:D4, :dorian), 0.25
  sleep 0.5
  play_pattern_timed scale(:E4, :phrygian), 0.25
  sleep 0.5
  play_pattern_timed scale(:F4, :lydian), 0.25
  sleep 0.5
  play_pattern_timed scale(:G4, :mixolydian), 0.25
  sleep 0.5
  play_pattern_timed scale(:A4, :aeolian), 0.25
  sleep 0.5
  play_pattern_timed scale(:B4, :locrian), 0.25
  sleep 0.5
end

旋法 (scale) を用いた即興

# スケールによる即興 1
live_loop :live do
  use_synth :prophet
  play choose(scale(:c3, :mixolydian, num_octaves: 3)),
    cutoff: rrand(60, 100)
  sleep 0.25
end
# スケールによる即興 2
live_loop :live do
  use_synth :prophet
  play scale(:C2, :ionian, num_octaves: 5).shuffle.take(4),
    cutoff: rrand(60, 100), release: 3.0,
    pan: rrand(-1, 1), amp: rrand(1.0, 2.0)
  sleep 0.5
end
## 複数のパートによる即興
live_loop :live do
  use_synth :prophet
  play scale(:C3, :ionian, num_octaves: 4).shuffle.take(3),
    cutoff: rrand(60, 100)
  sleep 0.25
end

live_loop :live2 do
  use_synth :fm
  play scale(:D5, :dorian, num_octaves: 2).shuffle.take(1),
    release: 0.1, cutoff: rrand(40, 100)
  sleep 0.125
end
# エフェクトをつける + 転調可能に
base = :D3
live_loop :live do
  with_fx :echo , decay: 2.0, phase: 0.75 do
    use_synth :prophet
    play scale(base, :dorian, num_octaves: 4).shuffle.take(2),
      cutoff: rrand(60, 120), release: 0.3
    sleep 0.125
  end
end

live_loop :live2 do
  with_fx :echo , decay: 2.0, phase: 0.25 do
    use_synth :fm
    play scale(base + 24, :dorian, num_octaves: 2).shuffle.take(1),
      release: 0.1, cutoff: rrand(80, 110)
    sleep 0.125
  end
end
## コードパートを付加
base = :E3
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 :melo1 do
  with_fx :echo , decay: 1.0, phase: 0.75 do
    use_synth :prophet
    play scale(base, :dorian, num_octaves: 4).shuffle.take(2),
      cutoff: rrand(60, 120), release: 0.5
    sleep 0.125
  end
end
live_loop :melo2 do
  with_fx :echo , decay: 1.0, phase: 0.625 do
    use_synth :fm
    play scale(base + 24, :dorian, num_octaves: 2).shuffle.take(1),
      release: 0.1, cutoff: rrand(60, 90), amp: 0.7
    sleep 0.125
  end
end

アンケート

本日の授業に参加した方は、下記のアンケートに答えてください。