Daily Creative Coding

元「30 min. Processing」。毎日、Creative Codingします。

Minimでサウンドファイルの再生速度をGUIで制御する

f:id:aa_debdeb:20161112145444j:plain
/**
* control playback speed 
*
* @author aa_debdeb
* @date 2016/11/17
*/

import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;

import controlP5.*;

Minim minim;
AudioOutput out;

Sampler kick;
Sampler snare;
Sampler hihat;

ControlP5 cp5;

void setup(){
  size(600, 300);
  minim = new Minim(this);
  out = minim.getLineOut();
  kick = new Sampler("kick.wav", 4, minim);  
  kick.rate.setLastValue(10.0);
  kick.patch(out);
  snare = new Sampler("snare.wav", 4, minim);
  snare.rate.setLastValue(0.3);  
  snare.patch(out);
  hihat = new Sampler("hihat.wav", 4, minim);
  hihat.rate.setLastValue(10.0);  
  hihat.patch(out);

  float knobRadius = 40;
  cp5 = new ControlP5(this);
  cp5.addKnob("setKickRate")
     .setLabel("kick rate")
     .setRange(-2.0, 2.0)
     .setValue(0.0)
     .setPosition(width / 4.0 * 1.0 - knobRadius, height / 2.0 - knobRadius)
     .setRadius(knobRadius);
  cp5.addKnob("setSnareRate")
     .setLabel("snare rate")
     .setRange(-2.0, 2.0)
     .setValue(0.0)
     .setPosition(width / 4.0 * 2.0 - knobRadius, height / 2.0 - knobRadius)
     .setRadius(knobRadius);
  cp5.addKnob("setHihatRate")
     .setLabel("hihat rate")
     .setRange(-2.0, 2.0)
     .setValue(0.0)
     .setPosition(width / 4.0 * 3.0 - knobRadius, height / 2.0 - knobRadius)
     .setRadius(knobRadius);
}

void setKickRate(float value){
  kick.rate.setLastValue(pow(10.0, value));
}

void setSnareRate(float value){
  snare.rate.setLastValue(pow(10.0, value));
}

void setHihatRate(float value){
  hihat.rate.setLastValue(pow(10.0, value));
}

void draw(){

}

void keyPressed(){
  switch(key){
  case 'z':
    kick.trigger(); 
    break;
  case 'x':
    snare.trigger();
    break;
  case 'c':
    hihat.trigger(); 
    break;
  }
}