以前質問をさせていただいてprocessingでの鍵盤の作り方を教えていただきました。そこにmp3ファイルの再生をしようと考えています。再生だけはできたのですが、何かキーを押して再生や停止をすることは可能でしょうか?また、それと同時にレコードのようなものを画面に映し出し、mp3ファイルが再生されると回転し、停止すると回転が止まるようなプログラムは作れるのでしょうか。わかる方がいらっしゃいましたら教えていただきたいです。
import ddf.minim.spi.;
import ddf.minim.signals.;
import ddf.minim.;
import ddf.minim.analysis.;
import ddf.minim.ugens.;
import ddf.minim.effects.;
Minim minim;
AudioOutput out;
AudioPlayer player;
HashMap<String, Keyboard> pressedKeys = new HashMap<String, Keyboard>();
void setup() {
size(600, 400);
minim = new Minim(this);
player = minim.loadFile("y2mate.com - flamingo_OjdMFqnSybw_320kbps.mp3");
player.play();
out = minim.getLineOut();
}
void draw() {
}
void keyPressed() {
String pitchName = getPitchName();
if (pitchName == null) return;
Keyboard k = pressedKeys.get(pitchName);
if (k == null) {
k = new Keyboard(pitchName);
pressedKeys.put(pitchName, k);
}
k.noteOn();
}
void keyReleased() {
String pitchName = getPitchName();
if (pitchName == null) return;
pressedKeys.get(pitchName).noteOff();
}
String getPitchName() {
switch (key) {
case '1': return "G3";
case '2': return "A3";
case '3': return "A#3";
case '4': return "D4";
case '5': return "A#3";
case '6': return "C4";
case '7': return "A3";
case '8': return "A#3";
case '9': return "A3";
case '0': return "G3";
case 'q': return "G3";
case 'w': return "A3";
case 'e': return "A#3";
case 'r': return "F3";
case 't': return "D3";
case 'y': return "D4";
case 'u': return "A#3";
case 'i': return "C4";
case 'o': return "A3";
case 'p': return "A#3";
case '@': return "A3";
case '[': return "G3";
case 'a': return "C3"; case 's': return "D3"; case 'd': return "E3"; case 'f': return "F3"; case 'g': return "G3"; case 'h': return "A3"; case 'j': return "B3"; case 'k': return "C4"; case 'l': return "D4"; case ';': return "E4"; case ':': return "F4"; case ']': return "G4"; case 'z': return "C#3"; case 'x': return "D#3"; case 'v': return "F#3"; case 'b': return "G#3"; case 'n': return "A#3"; case ',': return "C#4"; case '.': return "D#4";
}
return null;
}
class Keyboard {
Oscil osc;
boolean pressed;
Keyboard(String pitchName) {
osc = new Oscil(Frequency.ofPitch(pitchName), 0.1, Waves.SAW);
}
void noteOn() {
if (pressed) return;
osc.patch(out); pressed = true;
}
void noteOff() {
osc.unpatch(out);
pressed = false;
}
}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。