Audio 处理:如何使触发的声音停止?

Audio 处理:如何使触发的声音停止?,audio,processing,Audio,Processing,当女人的照片移动到一个移动的六边形上时,会发生一些事情。我有一个声音(警察),当她触摸其中一个时会触发。问题是,即使她不再站在六边形上,声音也会持续。另外,如果她再次触碰六边形,第一个声音会再次触发。所以现在我有一个混乱的相同的声音播放对方 我要她在六边形上移动,声音被触发了。当她离开六边形时,声音立即停止,直到她再次越过六边形。 代码如下: 导入ddf.minim.*; 进口ddf.微量分析。*; 进口ddf.最小影响。*; 输入ddf最小信号。*; 进口ddf.minim.spi.*; 进

当女人的照片移动到一个移动的六边形上时,会发生一些事情。我有一个声音(警察),当她触摸其中一个时会触发。问题是,即使她不再站在六边形上,声音也会持续。另外,如果她再次触碰六边形,第一个声音会再次触发。所以现在我有一个混乱的相同的声音播放对方

我要她在六边形上移动,声音被触发了。当她离开六边形时,声音立即停止,直到她再次越过六边形。 代码如下:

导入ddf.minim.*;
进口ddf.微量分析。*;
进口ddf.最小影响。*;
输入ddf最小信号。*;
进口ddf.minim.spi.*;
进口ddf.minim.ugens.*;
极小极小;
警察;
十六进制下的颜色=颜色(255,0,0);
皮美杰妇女;
浮动水头X=50,水头Y=50;
浮点数ss=0;
浮动淡入度=30,淡入度=9;
P形六边形、梯形、梯形2;
float[]hspeed={2.4,2.8,3.2,3.6,4,4.4,4.8};
float[]g={0,0,0,0,0,0,0};
无效设置(){
尺寸(900600,P3D);
背景(250);
仰泳();
最小值=新的最小值(本);
police=minim.loadSample(“PoliceSiren.mp3”,1024);
六边形=创建形状(组);
PShape梯形=createShape(四边形,100,50,325,50,375,180,50,180);
PShape梯形2=createShape(四边形、50、180、375、180、325、320、100、320);
六边形刻度(0.25);
六边形(梯形);
六边形。addChild(梯形2);
六边形填充(颜色(255,0,0,50));
woman=loadImage(“woman.png”);
}
作废提款(){
背景(250);
图像(女性,头晕,头晕,70,81);
对于(int p=0;p<5;p++){
pushMatrix();
翻译(g[p],120*p);
underhex=get(int(g[p])+30,int(120*p)+30);
形状(六边形,0,0);
//椭圆(宽/2,高/2,50,50);
popMatrix();
g[p]+=hspeed[p];
如果(int(g[p])>830 | | int(g[p])<0{
hspeed[p]*=-1;
}
如果(红色(下六角)<20和绿色(下六角)<20和蓝色(下六角)<20){
println(“她在这里”+随机(5));
填充(0240);
rect(0,0900600);
冲程重量(30);
填充(0、0、255、渐变);
笔划(0,0,255,淡入淡出);
椭圆(250200100100);
填充(255,0,0,渐变);
笔划(255,0,0,淡入淡出);
椭圆(290330100100);
填充(0、0、255、渐变);
笔划(0,0,255,淡入淡出);
椭圆(6802001000);
填充(255,0,0,渐变);
笔划(255,0,0,淡入淡出);
椭圆(640330100100);
仰泳();
警察。扳机();
fade+=fade2;
如果(fade255){
fade2*=-1;
}
}
}
如果(按键){
if(keyCode==UP){
头晕-=随机(2,6);
}else if(keyCode==向下){
headY+=随机(2,6);
}else if(keyCode==左){
人头X-=随机(2,6);
}else if(keyCode==右){
人头X+=随机(2,6);
}
}

}
尝试使用
AudioPlayer
而不是
AudioSample
。它提供了便于检查声音是否已经播放的功能。 e、 g

更新

听起来循环就是你想要的:

import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
Minim minim;
AudioPlayer police;
color underhex = color(255, 0, 0);

PImage woman;

float headX = 50, headY = 50;
float ss = 0;
float fade=30, fade2=9;

PShape hexagon, trapezoid, trapezoid2;
float[] hspeed = {2.4, 2.8, 3.2, 3.6, 4, 4.4, 4.8};
float[] g = {0, 0, 0, 0, 0, 0, 0};

void setup() {
  size(900, 600, P3D);
  background(250);
  noStroke();
  minim = new Minim(this);
  //police = minim.loadSample("PoliceSiren.mp3", 1024);
  police = minim.loadFile("PoliceSiren.mp3");

  hexagon = createShape(GROUP);
  PShape trapezoid = createShape(QUAD, 100, 50, 325, 50, 375, 180, 50, 180);
  PShape trapezoid2 = createShape(QUAD, 50, 180, 375, 180, 325, 320, 100, 320);
  hexagon.scale(0.25);
  hexagon.addChild(trapezoid);
  hexagon.addChild(trapezoid2);
  hexagon.setFill(color(255, 0, 0, 50));

  woman = loadImage("woman.png");
}

void draw() {
  background(250);

  image(woman, headX, headY, 70, 81);

  for (int p = 0; p < 5; p++) {
    pushMatrix();
    translate(g[p], 120*p);

    underhex = get(int(g[p])+30, int(120*p)+30);

    shape(hexagon, 0, 0);
    //ellipse(width/2,height/2,50,50);
    popMatrix();
    g[p]+=hspeed[p];

    if (int(g[p]) > 830 || int(g[p]) < 0) {
      hspeed[p] *= -1;
    }

    if (red(underhex) < 20 && green(underhex) < 20 && blue(underhex) < 20) {
      println("she's here"+random(5));
      fill(0, 240);
      rect(0, 0, 900, 600);
      strokeWeight(30);
      fill(0, 0, 255, fade);
      stroke(0, 0, 255, fade);
      ellipse(250, 200, 100, 100);

      fill(255, 0, 0, fade);
      stroke(255, 0, 0, fade);
      ellipse(290, 330, 100, 100);

      fill(0, 0, 255, fade);
      stroke(0, 0, 255, fade);
      ellipse(680, 200, 100, 100);

      fill(255, 0, 0, fade);
      stroke(255, 0, 0, fade);
      ellipse(640, 330, 100, 100);
      noStroke();
      if(!police.isPlaying()){
        police.loop();
      }
      fade += fade2;
      if (fade<0 || fade>255) {
        fade2 *= -1;
      }
    }else{
      if(police.isLooping()){
        police.pause();
      }
    }
  }

  if (keyPressed) {
    if (keyCode == UP) {
      headY-=random(2, 6);
    } else if (keyCode == DOWN) {
      headY+=random(2, 6);
    } else if (keyCode == LEFT) {
      headX-=random(2, 6);
    } else if (keyCode == RIGHT) {
      headX+=random(2, 6);
    }
  }
}
导入ddf.minim.*;
进口ddf.微量分析。*;
进口ddf.最小影响。*;
输入ddf最小信号。*;
进口ddf.minim.spi.*;
进口ddf.minim.ugens.*;
极小极小;
有声播放器警察;
十六进制下的颜色=颜色(255,0,0);
皮美杰妇女;
浮动水头X=50,水头Y=50;
浮点数ss=0;
浮动淡入度=30,淡入度=9;
P形六边形、梯形、梯形2;
float[]hspeed={2.4,2.8,3.2,3.6,4,4.4,4.8};
float[]g={0,0,0,0,0,0,0};
无效设置(){
尺寸(900600,P3D);
背景(250);
仰泳();
最小值=新的最小值(本);
//police=minim.loadSample(“PoliceSiren.mp3”,1024);
police=minim.loadFile(“PoliceSiren.mp3”);
六边形=创建形状(组);
PShape梯形=createShape(四边形,100,50,325,50,375,180,50,180);
PShape梯形2=createShape(四边形、50、180、375、180、325、320、100、320);
六边形刻度(0.25);
六边形(梯形);
六边形。addChild(梯形2);
六边形填充(颜色(255,0,0,50));
woman=loadImage(“woman.png”);
}
作废提款(){
背景(250);
图像(女性,头晕,头晕,70,81);
对于(int p=0;p<5;p++){
pushMatrix();
翻译(g[p],120*p);
underhex=get(int(g[p])+30,int(120*p)+30);
形状(六边形,0,0);
//椭圆(宽/2,高/2,50,50);
popMatrix();
g[p]+=hspeed[p];
如果(int(g[p])>830 | | int(g[p])<0{
hspeed[p]*=-1;
}
如果(红色(下六角)<20和绿色(下六角)<20和蓝色(下六角)<20){
println(“她在这里”+随机(5));
填充(0240);
rect(0,0900600);
冲程重量(30);
填充(0、0、255、渐变);
笔划(0,0,255,淡入淡出);
椭圆(250200100100);
填充(255,0,0,渐变);
笔划(255,0,0,淡入淡出);
椭圆(290330100100);
填充(0、0、255、渐变);
笔划(0,0,255,淡入淡出);
椭圆(6802001000);
填充(255,0,0,渐变);
笔划(255,0,0,淡入淡出);
椭圆(640330100100);
仰泳();
如果(!police.isPlaying()){
police.loop();
}
fade+=fade2;
如果(fade255){
fade2*=-1;
}
}否则{
if(police.isLooping()){
警察。暂停();
}
}
}
如果(按键){
if(keyCode==UP){
头晕-=随机(2,6);
}else if(keyCode==向下){
headY+=随机(2,6);
}else if(keyCode==左){
人头X-=随机(2,6);
}else if(keyCode==右){
人头X+=随机(2,6);
}
}
}

同时检查
mute()
unmute()
ismute()
:也许你可以保持声音循环,但保持静音,只有在发生碰撞时才取消静音

这会阻止声音相互播放,但当女性不再靠近六边形时,声音不会停止播放。它只是继续播放,直到声音结束,我无法再次激活它。@ebonydoa
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
Minim minim;
AudioPlayer police;
color underhex = color(255, 0, 0);

PImage woman;

float headX = 50, headY = 50;
float ss = 0;
float fade=30, fade2=9;

PShape hexagon, trapezoid, trapezoid2;
float[] hspeed = {2.4, 2.8, 3.2, 3.6, 4, 4.4, 4.8};
float[] g = {0, 0, 0, 0, 0, 0, 0};

void setup() {
  size(900, 600, P3D);
  background(250);
  noStroke();
  minim = new Minim(this);
  //police = minim.loadSample("PoliceSiren.mp3", 1024);
  police = minim.loadFile("PoliceSiren.mp3");

  hexagon = createShape(GROUP);
  PShape trapezoid = createShape(QUAD, 100, 50, 325, 50, 375, 180, 50, 180);
  PShape trapezoid2 = createShape(QUAD, 50, 180, 375, 180, 325, 320, 100, 320);
  hexagon.scale(0.25);
  hexagon.addChild(trapezoid);
  hexagon.addChild(trapezoid2);
  hexagon.setFill(color(255, 0, 0, 50));

  woman = loadImage("woman.png");
}

void draw() {
  background(250);

  image(woman, headX, headY, 70, 81);

  for (int p = 0; p < 5; p++) {
    pushMatrix();
    translate(g[p], 120*p);

    underhex = get(int(g[p])+30, int(120*p)+30);

    shape(hexagon, 0, 0);
    //ellipse(width/2,height/2,50,50);
    popMatrix();
    g[p]+=hspeed[p];

    if (int(g[p]) > 830 || int(g[p]) < 0) {
      hspeed[p] *= -1;
    }

    if (red(underhex) < 20 && green(underhex) < 20 && blue(underhex) < 20) {
      println("she's here"+random(5));
      fill(0, 240);
      rect(0, 0, 900, 600);
      strokeWeight(30);
      fill(0, 0, 255, fade);
      stroke(0, 0, 255, fade);
      ellipse(250, 200, 100, 100);

      fill(255, 0, 0, fade);
      stroke(255, 0, 0, fade);
      ellipse(290, 330, 100, 100);

      fill(0, 0, 255, fade);
      stroke(0, 0, 255, fade);
      ellipse(680, 200, 100, 100);

      fill(255, 0, 0, fade);
      stroke(255, 0, 0, fade);
      ellipse(640, 330, 100, 100);
      noStroke();
      if(!police.isPlaying()){
        police.loop();
      }
      fade += fade2;
      if (fade<0 || fade>255) {
        fade2 *= -1;
      }
    }else{
      if(police.isLooping()){
        police.pause();
      }
    }
  }

  if (keyPressed) {
    if (keyCode == UP) {
      headY-=random(2, 6);
    } else if (keyCode == DOWN) {
      headY+=random(2, 6);
    } else if (keyCode == LEFT) {
      headX-=random(2, 6);
    } else if (keyCode == RIGHT) {
      headX+=random(2, 6);
    }
  }
}