0

多年来,我一直试图弄清楚这一点。该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();
}

期望的结果是用每张卡播放不同的声音。然而,当卡片被扫描时,如果卡片已经在播放一个剪辑,当它再次扫描时,它应该停止播放分配的剪辑,而其余的其他剪辑仍然播放。

4

1 回答 1

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
于 2016-01-11T18:12:17.917 回答