yoppa.org


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

音程のあるサウンド – シンセサイザーを使う

TidalCycleでここまで使用してきた方法では、サンプリング(録音)したサウンドファイルを演奏してきました (cp hc bdなど) 。これは楽器に例えるなら、サンプラーを演奏している状態です。TidalCyclesではこの他にシンセサイザーのように音の波形を合成して演奏する「楽器」も用意されています。このシンセサイザーの機能はSuperCollider内で楽器 (Synth) として定義されていて、自分自身でプログラミングすることでオリジナルの楽器を作成することも可能です。今回の授業の前半はこのTidalCyclesのシンセサイザーの機能に着目していろいろ実験していきます。

シンセサイザーを使用するには、SuperColliderにSC3 Pluginsがインストールされている必要があります。下記のリンクから最新版のものをダウンロードして所定の場所にインストールしてください。

参考:

シンセサイザー

Sequential Circuits Prophet 5 (アナログシンセサイザー)
YAMAHA DX-7 (デジタルシンセサイザー)
Eurorack (モジュラーシンセサイザー)

スライド資料

サンプルコード

TidalCycles

-- シンプルにシンセを鳴らしてみる
d1
  $ s "supersaw*4"
  # note 0

-- 音階で指定 シャープ
d1
  $ s "supersaw*4"
  # note "cs5"

-- 音階で指定 フラット
d1
  $ s "supersaw*4"
  # note "df5"

-- シンセの音色の種類を変えてみる
d1
  $ s "supersaw superpwm supersquare superzow"
  # note 0
  
-- シンセの種類
-- supermandolin, supergong, superpiano, superhex, superkick, super808, 
-- superhat, supersnare, superclap, supersiren, supersquare, supersaw, 
-- superpwm, supercomparator, superchip, supernoise, superfork, 
-- superhammond, supervibe, superhoover, superzow, superstatic, 
-- supergrind, superprimes, superwavemechanics, supertron, superreese
  
-- 音階を弾く
d1
  $ s "supersaw*4"
  # note "0 4 5 7"
  
-- ランダムな音階
d1
  $ s "supersaw*8"
  # note (irand 12)

-- 短かい持続
d1
  $ s "supersaw*8"
  # legato "0.5"
  # note (irand 12)

-- 短かい持続と長い持続
d1
  $ s "supersaw*8"
  # legato "<0.5 1.2>*8"
  # note (irand 12)

-- メロディーを生成してみる
d1
  $ s "supersaw(11, 16)"
  # legato "<0.5 1.5>*8"
  # note "{c4 e4 f4 g4 b4}%11"
  |+ note "[0, 7, 12]"

-- メロディーを生成+変形
d1
  $ jux (iter 16)
  $ s "supersaw(11, 16)"
  # legato "<0.5 1.5>*8"
  # note "{c4 e4 f4 g4 b4}%11"
  |-note "0 12"
  |+note "[0, 7, 12]"

-- メロディーを生成+変形+エフェクト
d1
  $ jux (iter 16)
  $ s "supersaw(11, 16)"
  # legato "<0.5 1.5>*8"
  # note "{c4 e4 f4 g4 b4}%11"
  |- note "0 12"
  |+ note "[0, 7, 12]"
  # lpf(range 100 12000 $rand)
  # resonance "0.2"
  # delay "0.5" # delaytime "0.25"
  # delayfeedback "0.7"

Strudel (1行ごとにコピペして使用)

// シンプルにシンセを鳴らしてみる
$: s("supersaw*4").note(60)

// 音階で指定
$: s("supersaw*4").note("c4")

// 半音階、シャープ
$: s("supersaw*4").note("cs4")

// 半音階、フラット
$: s("supersaw*4").note("db4")

// シンセの音色の種類を変えてみる
$: s("supersaw sine square triangle").note(60)

// 音階を弾く
$: s("supersaw*4").note("c d e f")

// ランダムな音階
$: s("supersaw*4").note(irand(12).add(40))

// 短かい持続
$: s("supersaw*4")
note(irand(12).add(40)).legato(0.2)

// 短かい持続と長い持続
$: s("supersaw*4")
.note(irand(12).add(40)).legato("<0.2 1.0>*4")

// メロディーの生成
$: s("supersaw*8")
  .legato("<1.2 0.5>*8")
  .note("<c4 e4 f4 g4 b4>*8"

// メロディーの生成
$: s("supersaw*8")
  .legato("<0.5 1.2>*8")
  .note("<c4 e4 f4 g4 b4>*8"
  .add("0 -12")
  .add("[0, 7, 12]"))

// メロディーの生成2
$: s("supersaw*8")
  .note("{40 44 45 47 49 52}%11".add("[0, <5 7>, 12], 24"))

// メロディー + フィルター + エフェクト
$: s("supersaw*8")
  .note("{40 44 45 47 49 52}%11".add("[0, <5 7>, 12]"))
  .lpf("<400 2000 1200 8000>*8").delay(0.75).delaytime(0.125)

// メロディー + フィルター + エフェクト その2
$: s("supersaw(11, 16)")
  .note("{40 47 52}%21"
  .add("[0, <5 7 -5>]")
  .add("<0 12 -12 24>*4"))
  .lpf(sine.segment(32).range(400, 8000)).resonance(12)
  .delay(0.75).delaytime(0.125).delayfeedback(0.7)

// メロディー + フィルター + エフェクト + リズム
$: s("supersaw(5, 16, [0, 5, 12])")
  .note(
    "<c d e f g a>*2"
    .add("[0, <12 -12>]")
    .add("[0, 7, 12]")
    .add("<-12 -12 -12 0>/8")
  )
  .legato("<0.5 1.7>*2")
  .delay(0.75).delaytime(0.625).delayfeedback(0.5)
  .lpf(sine.segment(32).range(100, 8000)).resonance(10)
$: s("bd(3, 8), [~ hh]*4")
  .bank("RolandTR909")
  .gain(1.3)

コードとスケール

スライド資料: コード (和音) と スケール (旋法)

サンプルコード

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)

アンケート

アンケート