Java-Sound每个声音只播放一次,然后将不再播放

Java-Sound每个声音只播放一次,然后将不再播放,java,arduino,Java,Arduino,编辑:如果我使用equals()比较字符串,它会播放一次声音,然后崩溃。有人知道为什么循环会越界吗 代码更新 编辑2:我试过插入!现在它不再崩溃了,但它仍然只播放一次每个声音,并且在第一次迭代后不会再播放 当按下按钮的长度等于一定量时,我们试图为玩具播放声音。在打印方面,响应与预期一致(至少对于短时间的按钮按下),它将打印出阵列[1]点等于“S”,但是由于某些原因,这不会触发我们的if函数,当阵列[1]等于“S”时,该函数会发出声音。有什么想法吗 出于某种原因,它也不是阅读“L”或长按钮。这让我

编辑:如果我使用equals()比较字符串,它会播放一次声音,然后崩溃。有人知道为什么循环会越界吗

代码更新

编辑2:我试过插入!现在它不再崩溃了,但它仍然只播放一次每个声音,并且在第一次迭代后不会再播放

当按下按钮的长度等于一定量时,我们试图为玩具播放声音。在打印方面,响应与预期一致(至少对于短时间的按钮按下),它将打印出阵列[1]点等于“S”,但是由于某些原因,这不会触发我们的if函数,当阵列[1]等于“S”时,该函数会发出声音。有什么想法吗

出于某种原因,它也不是阅读“L”或长按钮。这让我们发疯了我们已经搞了三个小时了!你们这些聪明人怎么想

来自处理的Java代码:

 import processing.serial.*; //accepts serial input
import ddf.minim.*; //imports minim sound library
Minim minim;
String [] array;

Serial arduinoPort; //reads serial from arduino
AudioPlayer au_player1, au_player2, au_player3; //initializes sound files, au_player(n)      (n=number of wav files)

void setup() {
  minim = new Minim(this);
  au_player1 = minim.loadFile("comply_not.wav");
  au_player2 = minim.loadFile("go_away.wav");
  String portName = Serial.list()[2];
  arduinoPort = new Serial(this, portName, 9600);
}


void draw() {
  while (arduinoPort.available () > 0) {
    String myString = arduinoPort.readStringUntil('\n');


    if ((myString != null)&&(!myString.isEmpty)) {
//      println(myString);
      printArray(array);
      array = split(myString, ",");
      if (array[1].equals("S")) {
         au_player1.play();
      }
       else if (array[1].equals("L")) {
        au_player2.play();
      }
      delay(100);
    }
  } 
}

void stop() {
  minim.stop();
  super.stop();
}
Arduino代码:

基本上,这只是在按下按钮后读取,然后发送到处理,这都是Java的,所以如果你不知道arduino的东西,那也没什么大不了的。我认为这与Java有关

#define BUTTON_PIN        2  // Button

#define LONGPRESS_LEN    25  // Min nr of loops for a long press
#define DELAY            100  // Delay per loop in ms
    Serial.print("No");
    Serial.print(",");
    Serial.print("No");
    Serial.print(",");
    Serial.println("No");
    break;
  case EV_SHORTPRESS:
    Serial.print(",");
    Serial.print("S");
    Serial.print(",");
    Serial.println("No");
    break;
  case EV_LONGPRESS:
    Serial.print(",");
    Serial.print("L");
    Serial.print(",");
    Serial.println("No");
我想出来了-

由于某些原因,声音需要倒带!!(这对我来说很奇怪,因为它不是vhs哈哈哈,但还行!)

基本上我们加了

soundclip.rewind();
对于每个声音片段,它现在都在工作


谢谢你的帮助

读我的坏消息,在代码中==是正确的,我只是在postoh的标题中写错了,哎哟,等一下,弄乱了equals(),如果我使用equals(),它会播放一次声音,然后崩溃。有人知道为什么循环会越界吗?给我们看看例外情况。在这一点上,一个粗略的猜测是,您试图在数组中存储多个按键,但没有错误消息,您的猜测和我的一样好。