Tidalcycles+Processing オーディオリアクティブ映像のコード

概要

TidalCyclesで音楽を作り、その音に反応する映像をProcessingで作りました。コードを公開します。筆者はMac環境です。

完成動画

TidalCyclesのコード

TidalCyclesのデフォルトサンプル音源は使用していないので、サンプルは適当に用意して頂く必要があります。

 let
  speedx  = "1.0 1.0 1.0 1.0    1.0 0.8 1.0 1.6   1.0 1.0 2.0 1.0   0.8 0.9 1.0 1.3"
  delayx  = "0.0 0.0 0.0 0.0    0.0 0.0 0.8 0.7   0.8 0.0 0.0 0.9   0.0 0.0 0.8 0.8"
  delaytx = "0.0 0.0 0.0 0.0    0.0 0.0 0.0 0.0   0.0 0.0 0.0 0.0   0.0 0.0 0.0 0.0"
  gainx   = "1.3 0.0 0.0 1.0    0.0 1.0 1.0 1.0   0.0 1.0 0.0 0.0   0.0 0.7 0.9 0.7"
  gainx2  = "1.0 0.0 0.0 1.0    0.0 1.0 1.0 1.0   0.0 1.0 1.0 1.0   0.0 0.4 1.0 0.7"
  roomx   = "0.5 0.0 0.0 0.0    0.0 0.0 0.8 0.0   0.8 0.0 0.0 0.0   0.0 0.0 0.8 0.8"
  szx     = "0.7 0.0 0.0 0.0    0.0 0.0 0.1 0.0   0.8 0.0 0.0 0.0   0.0 0.6 0.8 0.8"
  lpfx    = "100 1000 20000 _   500 20000 2000 ~    5000 _ 200 _   20000 2000 2000 20000"
  nx      = "1 1 2 3    5 1 0 1   1 5 3 4   1 1 1 6"
  nx2     = "0 0 0 0    0 1 0 1   1 0 1 1   1 1 1 0"
  coarsex = "16 3 16 32    2 2 64 64    2 16 12 16    2 128 32 64"
  hpffx   = ((# hpf (range 200 2000 sine)).(# hpq 0.4))
  lpffx   = ((# lpf (slow 8 $ rangex 300 20000 saw)).(# lpq 0.3))
  panfx   = (# pan (fast 4 $ range 0 1 square))
  juxfx   = jux (choose[0.125,0.25] ~>)
  delayfx = (within (0.5, 1) ((# delayfb 0.95).(# delayt 0.065)))
  speedfx = (# speed "2 0.5")
  revfx   = (# room (slow 4 $ range 0.2 0.9 saw))

 d1
 $ sometimesBy 0.2 juxfx
 $ sometimesBy 0.1 speedfx
 $ every 1 ((# speed speedx).(|* gain gainx).(# n nx))
 $ every 4 (# coarse coarsex)
 $ s "[jbd*16]" # cut 1 # shape 0.6 |* gain 1.2

 d2
 $ sometimesBy 0.05 juxfx
 $ whenmod 32 24 revfx
 $ every 1 ((# speed speedx).(# gain gainx).(|+ n nx))
 $ whenmod 32 24 (# n (irand 5))
 $ s "[Hihat*16,Snare(3,8,1)]" # shape 0.5

d3
$ sometimesBy 0.1 (hurry (irand 3))
$ whenmod 32 24 lpffx
$ whenmod 32 24 rev
$ someCyclesBy 0.05 hpffx
$ someCyclesBy 0.1 revfx
$ every 1 ((|* speed speedx).(|* gain gainx2).(|+ n nx2))
$ every 2 ((# delay delayx).(|+| delayt (3/16)).(# lock 1))
$ every 3 ((# lpf lpfx).(#lpq 0.4))
$ s "[jchord*16]" # cut 3 |+ n 7 # shape 0.3 |* speed (3) |> gain 1.3

 setcps(140/60/4)

 hush

Processingのコード

minimライブラリを使ってオーディオに合わせた波形を表示させています。Tidalcyclesの音をaudioinputに入力する必要がありますが、環境によって設定が異なるので、何かしら設定しないと動かないかもしれません。私の場合はオーディオインターフェースのLoopback機能をつかったらうまく入力できました。

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

import ddf.minim.*;  //minimライブラリのインポート
 
Minim minim;  //Minim型変数であるminimの宣言
AudioInput in;  //マイク入力用の変数

 float rot =0;

void setup(){

size(1280, 720,P3D);

  minim = new Minim(this);  //初期化
  
  surface.setLocation(0,0);   //スクリーン上の左上に位置付ける
  
 frameRate(30);
 rectMode(CENTER);
 smooth();

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

void draw(){

  background(70*sin(rot)+10,100,100);
  stroke(255);
  strokeWeight(random(5));
camera(sin(rot)*height,height/2, height, width / 2.0, height / 2.0, 0, sin(rot), sin(rot/2), sin(rot/3));
  
    //円と四角を描く
    
   for(int i=0;i<30;i++){
       stroke(255);
          if (in.left.get(0) > 0.3){
       stroke(in.left.get(0)*1000,100,100);
          }
    noFill();
    rotate(in.left.get(0)/10+0.01);
    rect(0,0,200+i*20,200+i*20);
     }
     
      if (in.left.get(0) > 0.3){
       stroke(in.left.get(0)*1000,100,100);
          }
          sphereDetail(second()/2+5);
         sphere(in.left.get(0)*1500);
    //角度を更新
    rot += 0.03;
    
    
  //波形を描く
  for(int j = 0; j< 100;j++){
    stroke(second()*1.2,60,100);
  for(int i = 0; i < in.bufferSize()-1; i++){
              if (in.left.get(0) > 0.1){
//       stroke(in.left.get(0)*10+second()*10,0,0);
       stroke(255);
          }

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,j*20,x2,y1+in.left.get(i+1)*100,j*20);
line( x1,y2+in.right.get(i)*100,j*20,x2,y2+in.right.get(i+1)*100,j*20);



  }
}
}

コメントを残す

CAPTCHA