【问题标题】:How to play only one audio file at a time in minim如何一次只播放一个音频文件
【发布时间】:2013-07-10 22:12:04
【问题描述】:

这是我所拥有的:

2 个按钮

2 个声音

当按下按钮 1 时,我想播放声音 1 当按下按钮 2 时,我只想播放声音 2。

我的代码:

import ddf.minim.*;

RadioButtons r;
boolean showGUI = false;

Minim minim;
AudioPlayer player_1;
AudioPlayer player_2;

PImage img, img2;  
PShape img1;

void setup() {
  size(1024,735);
  String[] radioNames = {"Button1", "Button2"};
  r = new RadioButtons(radioNames.length, 20,700,50,30, HORIZONTAL);
  r.setNames(radioNames); 
  img = loadImage("img.jpg");
  img1 = loadImage("img1.png");
  img2 = loadShape("img1.svg");

  minim = new Minim(this);
  //sound1
  player_1 = minim.loadFile("sound1.wav");
  //sound2
  player_2 = minim.loadFile("soun2d2.wav");
}

void draw() {
  //background(0);
  //println (mouseX +"," + mouseY);
  // Draw the image to the screen at coordinate (0,0)
  //sound1
  image(img,0,0);
  if(r.get() == 0)
    shape(img1,695,106);
    if(mousePressed){
    if(mouseX>695 && mouseX <695+190 && mouseY>106 && mouseY <106+180){
    fill(0,0,0,0);
    image(img2,300,150);
    player_1.cue(0);
    player_1.play(); 
}
}
  //sound2
  if(r.get() == 1)
    shape(img1,695,106);
    if(mousePressed){
    if(mouseX>695 && mouseX <695+190 && mouseY>106 && mouseY <106+180){
    fill(0,0,0,0);
    image(img2,300,150);
    player_2.cue(0);
    player_2.play(); 
    }
    }
    if(showGUI)
    {
       r.display();
    }      
}    
void mouseReleased()
{
  if(showGUI){
    if(mouseY> height-60)
      r.mouseReleased();
    else
      showGUI = false;
  }
  else{
    showGUI = true;
  }  
}

此时两种声音同时播放。

我错过了什么?

【问题讨论】:

  • 你用什么做按钮?是图书馆吗?哪一个?

标签: audio processing minim


【解决方案1】:

您必须先停止当前示例,然后才能开始另一个示例。
如果你想玩 player_2,你必须调用:

player_1.pause();
player_1.rewind();

在您致电 player_2.play(); 之前,反之亦然。

【讨论】:

  • Pwdr 谢谢你,我像你说的那样试过了,但是不管我做什么它都只能播放玩家二?您还有什么可以建议的吗?
【解决方案2】:

更新::

我解决了这个问题

添加 IF 和 ELSE IF 语句。

以下示例。

void draw() {
 //background(0);
  //println (mouseX +"," + mouseY);
  // Draw the image to the screen at coordinate (0,0)
  //sound1
  image(img,0,0);
  if(r.get() == 0)
    {
  code...
}
}
}
  //sound2
  else if(r.get() == 1)
    {
    code...
    }
    }
    }
    if(showGUI)
    {
       r.display();
        }      
    }    

【讨论】:

    【解决方案3】:

    我做了这个非常愚蠢的例子,有什么帮助吗?这很愚蠢,特别是按钮类和事件处理,但由于我不知道您使用的是哪些 RadioButtons,所以我将这些行放在一起......也许它可以激发您的灵感。

    import ddf.minim.*;
    
    PVector pOne, pTwo;
    Button one, two;
    
    Minim minim;
    AudioPlayer player_1;
    AudioPlayer player_2;
    
    void setup() {
      size(300,300);
      pOne = new PVector(50, 150);
      pTwo = new PVector(150, 150);
      one = new Button (pOne, "one");
      two = new Button (pTwo, "two");
      minim = new Minim(this);
      //sound1
      player_2 = minim.loadFile("down_in_the_hole.mp3");
      //sound2
      player_1 = minim.loadFile("emotional_rescue.mp3");
    }
    
    void draw() {
      background(220);
      one.display();
      one.update();
      two.display();
      two.update();
    
      if(one.pressed){
      player_2.pause();
      player_1.rewind();
      player_1.play();
      ellipse(30,30,10,20);
     // two.pressed = false;
      }
    
    
      if(two.pressed){
      player_1.pause();
      player_2.rewind();
      player_2.play();
      ellipse(130,30,10,20);
      //one.pressed = false;
      }
    
    
    }
    
    void mouseReleased(){
      one.pressed = false;
      two.pressed = false;
    }
    
    class Button{
    
      String name;
      PVector pos;
      boolean pressed = false;
      int xsz = 40;
      int ysz = 20;
    
      Button(PVector _pos, String _name ){
        pos = _pos;
        name = _name;
      }
    
      void display(){
        color c = isOver()? 255:120;
        fill(c);
        rect(pos.x, pos.y, xsz, ysz);
        fill(0);
        text(name, pos.x+5, pos.y +ysz/2);
      }
    
      void update(){
        if(isOver() && mousePressed)
        pressed = true;
      }
    
      boolean isOver(){
        return mouseX > pos.x && mouseX < pos.x + xsz &&
               mouseY > pos.y && mouseY < pos.y + ysz; 
      }
    
    }
    

    【讨论】:

    • 谢谢你,这或多或少是我用的。
    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多