yoppa.org


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

TidalCycles応用 2 – コード (和音) とスケール (旋法)

コード(和音)は、複数の音が同時に鳴り響く音の組み合わせであり、音楽の調和や感情を生み出す重要な要素です。基本的なコードは、音階(スケール)の特定の音を組み合わせて作られます。例えば、Cメジャースケール(ド・レ・ミ・ファ・ソ・ラ・シ)を基に、1番目(C)、3番目(E)、5番目(G)の音を重ねることでCメジャーコードが形成されます。

一方、スケール(旋法)は、特定の音階に基づいた音の並びであり、音楽の「枠組み」や「雰囲気」を決定します。メジャースケール(長音階)は明るく、マイナースケール(短音階)は暗く感じられる特徴を持ちます。また、モード(教会旋法)など多様なスケールが存在し、それぞれ独自の個性を持っています。

TidalCyclesやStrudelでは、コードネーム (コードの名前) やスケールネーム (旋法の名前) によって和音やスケールを構成する音列を取り出すことが可能です。この機能を使用することで、和音やスケールを指定してその枠組みの中で即興演奏を行うことが可能となります。

参考:

スライド資料

アンケート

本日の講義を履修した方は以下のアンケートに回答してください。

※ 旧カリ「サウンドプログラミング」「環境情報デザイン」で履修の方はこちら

サンプルコード

TidalCycles

-- TidalCycles 応用3 - コード (和音) とスケール (旋法)

-- 同時に音を鳴らす
d1
  $ s "superpiano*4" 
  # note "[c, e, g]"

-- コード (Chord = 和音) ---------------------

-- コードを演奏する
d1
  $ s "superpiano*4" 
  # note "c'maj"

-- いろいろなコードを試してみる
d1
  $ s "superpiano" 
  # note "<c'maj f'maj g'maj c'maj>"

-- よりきれいにボイシング
d1
  $ s "superpiano"
  # note "<c5'maj f4'maj'ii g4'dom7'ii c5'maj'i>"

-- カノン進行
d1
  $ s "superpiano*2" 
  # note "<c'maj g'maj a'min e'min f'maj c'maj f'maj g'maj>"

-- カノン進行よりきれいにボイシング
d1
  $ s "superpiano*2" 
  # note "<c4'maj'ii g4'maj a3'min'ii e4'min f4'maj c4'maj f4'maj g3'dom7'iii>"  

-- 王道進行 (J-Pop風?)
d1 
  $ s "superpiano*4" 
  # note "<f'maj7 g'dom7 e'min7 a'min>"

-- 王道進行アンサンブル
do
  d1
    $ s "supersaw(11, 16)"
    # note "<f5'maj7 g4'dom7'ii e5'min7 a4'min'ii>"
    # lpf (range 2000 8000 $ slow 16 $ sine)  
    # resonance 0.2
    # room 0.5 # size 0.8
  d2
    $ s "supersaw(9, 16)" 
    # note "<f2 g2 e2 a2>"
    |+ note "<0 12>*8"
    # lpf (range 1000 8000 $ slow 12 $ sine)
    # resonance 0.2
    # gain 1.5
  d3
    $ s "[bd(3, 8), hc(4, 8, 1)]"
    # gain 1.5

-- 王道進行アンサンブル + 分数コード
do
  d1
    $ s "supersaw(11, 16)"
    # note "<f5'maj7 g4'dom7'ii e5'min7 a4'min'ii>"
    # lpf (range 1000 8000 $ slow 16 $ sine)  
    # resonance 0.2
    # room 0.5 # size 0.8
  d2
    $ s "supersaw(9, 16)"
    # note "<f2 e2 d2 c2>/2"
    |+ note "<0 12>*8"
    # lpf (range 1000 8000 $ slow 12 $ sine)
    # resonance 0.2
    # gain 1.5
  d3
    $ s "[bd(3, 8), hc(4, 8, 1)]"
    # gain 1.5

-- カノン進行 (クリスマス!)
do
  d1
    $ s "superpwm*2"
    # note "<c4'maj'ii g4'maj a3'min'ii e4'min f4'maj c4'maj f4'maj g3'dom7'iii>"  
    # legato 1.2
    # delay 0.5 # delaytime (5/8) # lock 1
    # lpf (range 2000 4000 $ slow 8 $ sine) # resonance 0.1
    # room 0.7 # size 0.9
  d2
    $ s "supersaw*4"
    # note "<c3 b2 a2 g2 f2 e2 d2 g2>"  
    |+ note "<0 0 12 -12>*4"
    # lpf 600 # resonance 0.2
    # room 0.7 # size 0.9
    # gain 1.2
  d3
    $ s "bd(2, 8)"
    # room 0.7 # size 0.9
    # gain 1.2

-- スケール (scale = 旋法) ----------------
-- イオニアンスケール
d1
  $ s "supersaw*8"
  # note (scale "ionian" "[0..7]")

-- スケールいろいろ
minPent majPent ritusen egyptian kumai hirajoshi iwato chinese indian pelog prometheus scriabin gong shang jiao zhi yu whole augmented augmented2 hexMajor7 hexDorian hexPhrygian hexSus hexMajor6 hexAeolian major ionian dorian phrygian lydian mixolydian aeolian minor locrian harmonicMinor harmonicMajor melodicMinor melodicMinorDesc melodicMajor bartok hindu todi purvi marva bhairav ahirbhairav superLocrian romanianMinor hungarianMinor neapolitanMinor enigmatic spanish leadingWhole lydianMinor neapolitanMajor locrianMajor diminished diminished2 chromatic

-- スケール内の音をランダムに演奏
d1
  $ s "superpiano*8"
  # note (scale "hirajoshi" (irand 12))

-- スケールを使用した即興演奏
do
  let mode = "minPent"
  let root = "c"
  d1
    $ jux (("[10, 5]"/8)<~)
    $ s "superhammond(7, 8, [0, 5])"
    # voice 4
    # note "c2"
    |+ note (scale mode (irand 24))
    |+ note root
    # room 0.8 # size 0.9
    # lock 1 
  d2
    $ s "superhammond*16"
    # voice 3
    # note "c5"
    |+ note (scale mode (irand 7))
    |+ note root
    # room 0.8 # size 0.9
    # lock 1  

Strudel

// 音を同時に鳴らす
$: sound("piano*4")
  .note("[c, e, g]")

// --------------------------------------------
// コード (Chord = 和音)
// コードを演奏する
$: sound("piano*4")
  .n("[1, 2, 3]")
  .chord("C").voicing()

// いろいろなコードを試してみる
$: sound("piano*4")
  .n("[1, 2, 3]")
  .chord("<C F G>").voicing()

// カノン
$: sound("piano*4")
  .n("[1, 2, 3, 4]")
  .chord("<C G Am Em F C F G>").voicing()

// 王道進行
$: sound("piano*2")
  .n("[1, 2, 3, 4, 5]")
  .chord("<FM7 G7 Em7 Am>").voicing()

// 王道進行アンサンブル
$: sound("supersaw(11, 16)")
  .n("[1, 2, 3, 4, 5]")
  .chord("<FM7 G7 Em7 Am>").voicing()
  .lpf(sine.slow(32).range(1000, 8000)).resonance(10)
  .room(0.9)
$: sound("supersaw(9, 16)")
  .note("<F2 G2 A2 E2>".add("<-12 0 12>*4"))
  .lpf(sine.slow(24).range(1000, 8000)).resonance(8)
  .room(0.9).gain(1.8)
$: sound("bd(3, 8), hh(4, 8, 1)").bank("RolandTR909")
  .gain(1.2)

// 王道進行アンサンブル + 分数コード
$: sound("supersaw(9, 16, 3)")
  .n("[1, 2, 3, 4, 5]")
  .chord("<FM7 G7 Em7 Am>").voicing()
  .lpf(sine.slow(32).range(1000, 8000)).resonance(10)
  .room(0.9)
$: sound("supersaw(9, 16)")
  .note("<F2 E2 D2 [C2 A1]>/2".add("<-12 0 12>*4"))
  .lpf(sine.slow(24).range(1000, 4000)).resonance(10)
  .gain(1.8)
$: sound("bd(4, 8), hh(4, 8, 1)").bank("RolandMC303")
  .delay(0.5).delaytime(3/8)
  .gain(1.3)

// --------------------------------------------
// スケール (scale = 旋法)
// イオニアンスケール
$: sound("piano*8")
  .n("0 1 2 3 4 5 6 7")
  .scale("C:ionian")

// スケール内の音をランダムに演奏する
$: sound("piano*8")
  .n(irand(12))
  .scale(“C:hirajoshi")

// スケールによる即興
$: sound("supersaw(5, 8)")
  .n(irand(19))
  .scale("C1:pentatonic").jux(rev).room(0.8)
  .delay(0.7).delaytime(3/8)
  .lpf(rand.range(400, 5000)).resonance(12).legato(1.2)
$: sound("supersaw*16")
  .n(irand(19))
  .scale("C3:pentatonic").jux(rev).room(0.8)
  .lpf(rand.range(400, 4000)).resonance(8)
  .delay(0.7).delaytime(5/8).legato(0.75)