processingのライブラリにminimというものがあり、これでは音に関することが簡単に実装することができるようになります。
今回はその中でもOscilという機能を使っていろいろな波を鳴らす方法です。
デフォルトでならせる波は6種類あります。それそれ下図の左上から

今回はその中でもOscilという機能を使っていろいろな波を鳴らす方法です。
デフォルトでならせる波は6種類あります。それそれ下図の左上から
- 正弦波
- 三角波
- ノコギリ波
- 矩形波
- 1/4パルス波
- フェーザ波
です。

それぞれ音を鳴らしたときの音色が違うので、目的にあった音を鳴らすことになります。
これらの音をキーボードの1~6キーで買えられるようにしたテストプログラムを↓に書いておきます。実行すると画面に↑と同じ画面が現れそれぞれの440Hzの音が流れます。
これらの音をキーボードの1~6キーで買えられるようにしたテストプログラムを↓に書いておきます。実行すると画面に↑と同じ画面が現れそれぞれの440Hzの音が流れます。
- 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 oscil;
- void setup(){
- size(1920, 1080);
- minim = new Minim(this);
- out = minim.getLineOut();//ここまでおまじない
- oscil = new Oscil(440, 0.5, Waves.SINE);//oscilという変数に440Hzで大きさ0.5のsin波を挿入
- oscil.patch(out);//oscilという変数を出力する".unpatch(out)"で出力を停止
- noFill();
- }
- void draw(){
- background(0);
- stroke(0, 0, 255);
- strokeWeight(5);
- beginShape();
- for(int i = 0; i < width; i++){
- vertex(i / 2, height / 2 - oscil.getWaveform().value(float(i) / (width)) * 100);//波形を描写(左半分)
- }
- for(int i = 0; i < width; i++){
- vertex(width / 2 + i / 2, height / 2 - oscil.getWaveform().value(float(i) / (width)) * 100);//波形を描写(右半分)
- }
- endShape();
- stroke(255);
- strokeWeight(1);
- line(0, height / 2, width, height / 2);
- }
- void keyPressed(){//キーが押された時そのキーによってoscilの中の波形データを書き換える
- switch(key){
- case '1':
- oscil.setWaveform(Waves.SINE);
- break;
- case '2':
- oscil.setWaveform(Waves.TRIANGLE);
- break;
- case '3':
- oscil.setWaveform(Waves.SAW);
- break;
- case '4':
- oscil.setWaveform(Waves.SQUARE);
- break;
- case '5':
- oscil.setWaveform(Waves.QUARTERPULSE);
- break;
- case '6':
- oscil.setWaveform(Waves.PHASOR);
- break;
- }
- }