Daily Creative Coding

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

MInimのInstrumentインターフェースを使ってみる

f:id:aa_debdeb:20151201172830j:plain

キーを押すとサイン波が2秒間鳴る.

/**
* Using Minim Instrument
*
* @author aa_debdeb
* @date 2015/12/06
*/

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

Minim minim;
AudioOutput out;
MyInstrument myInstrument;

void setup(){
  size(512, 200);
  minim = new Minim(this);
  out = minim.getLineOut();
  myInstrument = new MyInstrument();
}

void draw(){
  background(0);
  
  stroke(255);
  strokeWeight(1);
  for(int i = 0; i < out.bufferSize() - 1; i++){
    line(i, 50 + out.left.get(i) * 50, i + 1, 50 + out.left.get(i + 1) * 50);
    line(i, 150 + out.right.get(i) * 50, i + 1, 150 + out.right.get(i + 1) * 50);
  }
}

void mousePressed(){
  saveFrame("images/image.jpg");
}

void keyPressed(){
  out.playNote(0.0, 2.0, myInstrument);
}

class MyInstrument implements Instrument {

  Oscil sineWave;
  
  MyInstrument(){
    sineWave = new Oscil(Frequency.ofPitch("A4"), 0.5, Waves.SINE);
  }
  
  void noteOn(float duration){
    sineWave.patch(out);
  }
  
  void noteOff(){
    sineWave.unpatch(out);
  }
}