読者です 読者をやめる 読者になる 読者になる

Daily Creative Coding

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

MinimでLFOをかける

f:id:aa_debdeb:20151205203526j:plain

キー入力で元の波形,LFOの波形を変更できる

  • 1: 元の波形をサイン波にする
  • 2: 元の波形を三角波にする
  • 3: 元の波形を矩形波にする
  • 4: 元の波形をノコギリ波にする
  • q: LFOの波形をサイン波にする
  • w: LFOの波形を三角波にする
  • e LFOの波形を矩形にする
  • r: LFOの波形をノコギリ波にする

マウスのx座標でLFOの周波数を変更できる.

/**
* Low Frequency Oscillater
* 
* @author aa_debdeb
* @2015/12/18
*/

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 src;
Oscil lfo;

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

void draw(){
  background(0);
  
  stroke(60);
  strokeWeight(1);
  line(mouseX, 0, mouseX, height);
  line(0, mouseY, width, mouseY);

  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);
  }
  
  textSize(12);
  text("lfo frequency:" + lfo.frequency.getLastValue(), 15, 15);

}

void mouseMoved(){
  float lfoFreq = map(mouseX, 0, width, 20, 0.1);
  lfo.setFrequency(lfoFreq);
}

void keyPressed(){
  switch(key){
    case '1':
      lfo.setWaveform(Waves.SINE);
      break;
    case '2':
      lfo.setWaveform(Waves.TRIANGLE);
      break;
    case '3':
      lfo.setWaveform(Waves.SQUARE);
      break;
    case '4':
      lfo.setWaveform(Waves.SAW);
      break;
    case 'q':
      src.setWaveform(Waves.SINE);
      break;
    case 'w':
      src.setWaveform(Waves.TRIANGLE);
      break;
    case 'e':
      src.setWaveform(Waves.SQUARE);
      break;
    case 'r':
      src.setWaveform(Waves.SAW);
      break;
  }  
}