私は何年もの間、これを理解しようとしてきました。このStop()
関数は if ステートメントでは機能しません (一時停止や巻き戻しではなく、曲を重ねて再生するだけです)。関数呼び出しを if ステートメントの外に置くと、Stop()
動作するように見えます (つまり、期待される動作であるファイルはまったく再生されません)。
-------------- コードのサンプル --------------------------
import processing.serial.*;
import ddf.minim.*;
String id;
Card Card1 = new Card();
Minim minim;//audio context;
AudioPlayer Backgroundplayer;
public class Card{ // CARD OBJECT so can set up each card.
String id;
String FileToPlay;
boolean Playing = false;
AudioPlayer player;
public Card(){}
public Card(String ID, String FILETOPLAY){
id = ID;
FileToPlay = FILETOPLAY;
}
void Load(){
player = minim.loadFile(FileToPlay);
}
void Play(){
if(Playing == false){
player.play();
Playing = true;
println("PLaying");
}else if(Playing == true){
Playing = false;
Stop();
}
}
void Stop(){
println("Stopping");
player.pause();
player.rewind();
}
}
void setup() {
size(400, 300);
}
void draw() {
}
void mouseClicked() {
Card1.id = id;
Card1.FileToPlay = "drumploop.wav";
Card1.Load();
Card1.Play();
}
望ましい結果は、各カードで異なるサウンドを再生することです。ただし、カードがスキャンされ、カードが既にクリップを再生している場合、再度スキャンすると、その割り当てられたクリップの再生が停止し、残りの他のクリップは引き続き再生されます。