前橋工科大学 – サウンドプログラミング 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
アンケート
本日の授業に参加した方は、下記のアンケートに答えてください。