我一直在努力解决这个问题。 Stop()
函数不能在if语句中起作用(歌曲只是在彼此之上播放而不是暂停和倒带)。如果我将Stop()
函数调用置于if语句之外,它似乎可以正常工作(即根本没有播放任何预期行为的文件)想知道是否有人可以解决这些问题?
--------------代码示例-------------------------
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();
}

期望的结果是每张卡片播放不同的声音。但是,当扫描卡片时,如果卡片已经在播放片段,当再次扫描时,它应该停止播放指定的片段,而剩余的其他片段仍在播放。
答案 0 :(得分:0)
您似乎认为if/else
函数中的Play()
语句会被触发两次:一次开始播放剪辑,一次播放另一个剪辑。
然而,事实并非如此:您似乎只为Play()
的每个实例一次调用Card
函数。换句话说,即使您可能正在创建Card
的多个实例并在每个实例上调用Play()
函数,但每个实例仍然只有一次!让我们更明显一点:
Card card1 = new Card("one", "clip1.wav");
card1.Load(); //load the first clip
card1.Play(); //play the first clip
Card card2 = new Card("two", "clip2.wav");
card2.Load(); //load the second clip
card2.Play(); //play the second clip
请注意,当您拨打card2.Play()
时,没有任何内容正在呼叫card1.Play()
或card1.Stop()
,因此第一个剪辑会继续播放!
如果您希望它们在播放新剪辑之前停止播放,您必须专门调用任何播放剪辑的Stop()
功能:
Card card1 = new Card("one", "clip1.wav");
card1.Load(); //load the first clip
card1.Play(); //play the first clip
Card card2 = new Card("two", "clip2.wav");
card1.Stop(); //stop the first clip
card2.Load(); //load the second clip
card2.Play(); //play the second clip