Tidalcycles and Processing カオスなhiphop風beatと映像の制作

TidalcyclesでドラムフレーズやRHODESの音をスライスして、カオスなhiphop風のbeatを制作しました。

またProcessingを使用して、オーディオに反応する映像をプログラミングしました。

そのコードを紹介します。

動画

Tidalcycles code

d1 $ sometimesBy 0.1 (stut' 4 0.065 (# speed 0.5))
$ every 16 (# hpf (range 100 2000 sine))
$ every 13 (# lpf (fast 4 $ range 200 2000 saw))
$ every 11 (# speed (range 0.5 2 sine))
$ every 7 (# cps (range 1 0.5 sine))
$ sometimesBy 0.2 ((# room 0.9).(# sz 0.8))
$ whenmod 24 18 (const $ slice (choose[2]) "16 15*4 8 <28 [26 20] 24*3>  0 [1 [5 7]] 6 7*<16 2 1>" $ s "jrhodes:1" # cut 1)
$ slice (choose[8,32]) "3 <12 14*2 3?> [24 22? 23 1] [31 1*5] <4 7 3*2> 5 6*3 <7 [0 2*4]>" $ s "jrhodes:1"
# shape 0.7 # cps 0.375 # cut 1 # leslie 0.5 # room 0.8 # speed "-1" # delay 0.5 # delayt (3/16) # lock 1

d2
$ every 16 (# hpf (range 100 2000 sine))
$ every 13 (# lpf (fast 4 $ range 200 2000 saw))
$ every 11 (# speed (range 0.5 2 sine))
$ every 7 (# cps (range 1 0.5 sine))
$ every 8 (# gain 0)
$ whenmod 16 14 (const $ slice 8 "0 1 2 3 4 5 6 7" $ s "jdrums:1")
$ whenmod 8 6 (const $ slice 32 "0 <12 14*2 3?> [24 22? 23 1] [31 1*5] <4 7 3*2> 5 6*3 <7 [0 2*4]>" $ s "jdrums:1")
$ slice 32 "0*<1 1 3> <12 14*2 3?> [24 22? 23 1] [31 1*5] <4 7 3*2> 5 6*3 <7 [0 2*4]>"
$ s "Drums:0" # shape 0.7 # hpf 60 # hpq 0.2 # speed 0.8
# nudge "<-0.05 -0.03> 0 0.02 0 <0.03 0.01> -0.02 0.01 0.02 <0.03 0>"

d3 $ s "SFX/4" # n (irand 8 + 3) # room 0.7 # speed "-0.6"

Tidalcyclesのデフォルト音源は全く使用していません。

以下音源をsliceしたりして使用しています。

jrhodes:Rhodesのフレーズ。

jdrums:数小節のドラム。

Drums:数小節のドラム。

SFX:特殊な音。Native instrumentsの音源。

以下のようなsliceパターンの数字は、あまり深い意味はありません。

最初は適当に羅列しておいて、音を聞きながら調整していく、というやり方にしています。

パターンが8個のまとまりになるようにだけ気をつけています。

$ slice 32 "0*<1 1 3> <12 14*2 3?> [24 22? 23 1] [31 1*5] <4 7 3*2> 5 6*3 <7 [0 2*4]>"

Processing code

// 参考サイト  https://tech-camp.in/note/technology/45369/

import ddf.minim.*;  //minimライブラリのインポート

Minim minim;  //Minim型変数であるminimの宣言
AudioInput in;  //マイク入力用の変数
int waveH = 100;  //波形の高さ

void setup() {

  size(840, 480, P2D);

  minim = new Minim(this);  //初期化

  //バッファ(メモリ上のスペース。この場合は512要素のfloat型の配列)を確保し、マイク入力用の変数inを設定する。
  in = minim.getLineIn(Minim.STEREO, 512);

  colorMode(HSB, 360, 100, 100);
}

void draw() {

  background(0);
  stroke(255);
  strokeWeight(3);
  //波形を描く
  //left.get()とright.get()が返す値は-1から+1なので、見やすくするために、
  //waveH(初期値は100)を掛けている。
  for (int i = 0; i < in.bufferSize()-1; i++) {

    //    point(i, 50 + in.left.get(i)*waveH);  //左の音声の波形を画面上に描く
    //   point(i, 150 + in.right.get(i)*waveH);  //右  〃

    float x1 = map(i, 0, in.bufferSize(), 0, width);
    float x2 = map(i+1, 0, in.bufferSize(), 0, width);
    float y1 = height / 3;
    float y2 = height / 3 * 2;
    line( x1, y1+in.left.get(i)*100, x2, y1+in.left.get(i+1)*100);
    line( x1, y2+in.right.get(i)*100, x2, y2+in.right.get(i+1)*100);
  }

noStroke();
  for (int i = 0; i < in.bufferSize()-1; i++) {
    float w = i*(width/in.bufferSize());
    fill(100, 0, 100, in.left.get(i)*50);
    rect(w, height*1/6, w, height*2/6);
    fill(100, 0, 100, in.right.get(i)*50);
    rect(w, height*3/6, w, height*2/6);
    translate( (sin(i))*second(), (sin(i))*second());
  }
}

コードのコメントなどは整理していないので、不要なコード・コメントが混じっていますのでご注意ください。

Processingは、minimライブラリを使用してオーディオを処理しています。

詳細はよくわかっておらず解説できないので、minim processing とかで検索してみてください。

コメントを残す

CAPTCHA