Daily Creative Coding

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

MInimでいろいろな波形の音を鳴らす

f:id:aa_debdeb:20151201130929j:plain
  1. サイン波
  2. 三角波
  3. ノコギリ波
  4. 矩形波
  5. QUARTERPULSE
  6. PHASOR

マウスの縦位置が音量,横位置が音の高さに対応している.

/**
* Minim Sound Wave
*
* @author aa_debdeb
* @date 2015/12/04
*/

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;
Oscil wave;

void setup(){
  size(512, 200);
  minim = new Minim(this);
  out = minim.getLineOut();
  
  wave = new Oscil(440, 0.5, Waves.SINE);
  wave.patch(out);
}

void draw(){
  background(255);

  stroke(255, 0, 0);
  strokeWeight(3);
  noFill();
  beginShape();
  for(int i = 0; i < width; i++){
    vertex(i, height / 2 - wave.getWaveform().value((float)i / width) * 100);
  }
  endShape();
  
  stroke(0);
  strokeWeight(1);
  noFill();
  beginShape();
  for(int i = 0; i < out.bufferSize(); i++){
    vertex(i, height / 2 + out.mix.get(i) * 100);
  }
  endShape();
  

}

void mouseMoved(){
  float amp = map(mouseY, 0, height, 1, 0);
  wave.setAmplitude(amp);
  float freq = map(mouseX, 0, width, 0, 15000);
  wave.setFrequency(freq);
}

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

void keyPressed(){
  switch(key){
    case '1':
      wave.setWaveform(Waves.SINE);
      break;
    case '2':
      wave.setWaveform(Waves.TRIANGLE);
      break;
    case '3':
      wave.setWaveform(Waves.SAW);
      break;
    case '4':
      wave.setWaveform(Waves.SQUARE);
      break;
    case '5':
      wave.setWaveform(Waves.QUARTERPULSE);
      break;
    case '6':
      wave.setWaveform(Waves.PHASOR);
      break;
  }
}

参考