yoppa.org


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

TidalCycles応用 2 – シンセサイザーを使う / コードとスケール

TidalCycleでここまで使用してきた方法では、サンプリング(録音)したサウンドファイルを演奏してきました (cp hc bdなど) 。これは楽器に例えるなら、サンプラーを演奏している状態です。TidalCyclesではこの他にシンセサイザーのように音の波形を合成して演奏する「楽器」も用意されています。このシンセサイザーの機能はSuperCollider内で楽器 (Synth) として定義されていて、自分自身でプログラミングすることでオリジナルの楽器を作成することも可能です。今回の授業の前半はこのTidalCyclesのシンセサイザーの機能に着目していろいろ実験していきます。後半は、TidalCyclesでコード(和音)とスケール(旋法)を使う方法について取り上げます。Sonic Piと同様にTidalCyclesではコード名やスケール名を指定することで音列を生成することが可能で、この機能を活用することでアルゴリズミックにメロディーやコードを生成していくことが可能となります。

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

参考:

スライド資料

アンケート

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

サンプルコード

-- シンプルにシンセを鳴らしてみる
d1
  $ s "supersaw*4"
  # note 0
  
-- シンセの音色の種類を変えてみる
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"
  # sustain "0.05"
  # note (irand 12)
  
-- 短かい持続と長い持続
d1
  $ s "supersaw*8"
  # sustain "{0.05 0.2}%8"
  # note (irand 12)
  
-- メロディーを生成してみる
d1
  $ s "supersaw(11, 16)"
  # sustain "{0.1 0.3}%4"
  # note "{0 4 5 7 9 12}%11"
  |-| note 12
  |+| note  "[0, 7, 12]"
  
-- メロディーを生成+変形
d1
  $ jux (iter 16)
  $ s "supersaw(11, 16)"
  # sustain "{0.1 0.3}%4"
  # note "{0 4 5 7 9 12}%11"
  |-| note 12
  |+| note "[0, 7, 12]"
  
-- メロディーを生成+変形+エフェクト
d1
  $ echo 4 0.625 0.5
  $ jux (iter 16)
  $ s "supersaw(11, 16)"
  # sustain "{0.1 0.3}%4"
  # note "{0 4 5 7 9 12}%11"
  |-| note 12
  |+| note "[0, 7, 12]"
  # lpf(range 100 12000 $ rand)
  # resonance "0.2"
  
-- コード(C Major)
d1
  $ s "supersaw*4"
  # note "c5'maj"
  
-- コードネーム一覧
-- major maj minor min aug dim major7 maj7 dom7 minor7 min7 
-- dim7 one 1 five 5 plus sharp5 msharp5 sus2 sus4 six 6 m6 
-- sevenSus2 7sus2 sevenSus4 7sus4 sevenFlat5 7f5 m7flat5 
-- m7f5 sevenSharp5 7s5 m7sharp5 m7s5 nine m9 m7sharp9 
-- m7s9 maj9 nineSus4 ninesus4 9sus4 sixby9 6by9 m6by9 
-- sevenFlat9 7f9 m7flat9 m7f9 sevenFlat10 7f10 nineSharp5 9s5 
-- m9sharp5 m9s5 sevenSharp5flat9 7s5f9 m7sharp5flat9 eleven 
-- 11 m11 maj11 elevenSharp 11s m11sharp m11s thirteen 13 m13
  
  
-- コード(C Major, G Minor 7)
d1
  $ s "supersaw*4"
  # note "c5'maj g5'min7"
  
-- コードネームをいろいろ変化させてみる!
d1
  $ jux (iter 16)
  $ s "supersaw(11, 16)"
  # note "{c5'maj7 c5'sus4 a4'min7 c5'sus2}%3"
  |+| note "[0, 12]"
  # sustain "0.2 0.08"
  # pan (rand)
  # lpf (range 100 8000 $ rand)
  #resonance "0.3"
  
-- コードネームを変数で指定
do
  let chord = "c4'sus4"
  d1
    $ jux (iter 16)
    $ s "supersaw(11, 16)"
    # note chord
    |+| note "[0, 12]"
    # sustain "0.2 0.08"
    # pan (rand)
    # lpf (range 100 8000 $ rand)
    # resonance "0.3"
  
-- スケール基本 (旋律)
d1
  $ s "supersaw(16, 16)"
  # note (scale "ionian" "[0 1 2 3 4 5 6 7]*2")
  # sustain "0.15"
  
-- スケール一覧
-- 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
  $ echo 4 0.625 0.5
  $ jux (iter 16)
  $ s "supersaw(14, 16)"
  # sustain "0.05 0.3"
  # note (scale "iwato" "{0 .. 7}%9")
  |+| note "[-12, 7, 0]"
  # pan (rand)
  # lpf (range 100 4000 $ rand)
  # resonance "0.3"
  
-- スケールを変数で指定
do
  let sc = "yu"
  d1
    $ echo 4 0.625 0.5
    $ jux (iter 16)
    $ s "supersaw(14, 16)"
    # sustain "0.05 0.1"
    # note ((scale sc "{0 .. 7}%9"))
    |+| note "[-12, 7, 0]"
    |+| note "[-12, 0]"
    # pan (rand)
    # lpf (range 100 4000 $ rand)
    # resonance "0.3"