【问题标题】:Processing - Minim Audio Player - Player not stopping inside if statement处理 - 最小音频播放器 - 播放器不在 if 语句内停止
【发布时间】:2016-01-10 21:31:39
【问题描述】:

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

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

【问题讨论】:

  • 您认为 if 语句中的 else 部分何时会被输入?
  • 当bool播放为真时将进入else部分,即当声音已经播放时,所以下次我播放该声音时,它会进入else,反正我是这么想的

标签: java processing minim


【解决方案1】:

您似乎认为Play() 函数中的if/else 语句将被触发两次:一次是在您开始播放剪辑时,一次是在您播放另一个剪辑时。

但是,情况并非如此:您似乎只对Card 的每个实例调用一次Play() 函数。换句话说,即使您可能要创建多个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

【讨论】:

  • 对不起,我的问题应该更清楚,期望的结果是用每张卡播放不同的声音。但是,当卡片被扫描时,如果卡片已经在播放剪辑,当再次扫描它时,它应该停止播放分配的剪辑,而其余的其他剪辑仍在播放
  • 您如何扫描卡片?可以发MCVE吗?
  • 嗨。我正在使用 RFID 阅读器扫描卡片,因此当扫描每张卡片时,都会有一个 if 语句来找出已扫描哪张卡片以及何时播放相应的剪辑
  • 我们仍然需要看看您如何确定应该播放或停止哪个现有 Card 实例。考虑创建一个使用鼠标单击而不是 RFID 扫描仪的小示例。
  • 嗨,对不起,我刚刚发布了一个代码示例,但是我读到这个太晚了。我对处理不是很熟悉,我只是在帮助朋友解决一些逻辑问题,我只是想知道为什么停止不起作用,我希望我已经提供了足够的信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多