Возвратите истинное утверждение назад к ложному в Обработке - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь воспроизвести аудиосэмпл, когда Kinect обнаруживает объект в прямоугольной области.Проблема в том, что я сейчас настроил его так, чтобы он воспроизводил семпл один раз, а затем менял регион, чтобы не воспроизводить другой семпл, если я выхожу за пределы региона.

Как мне сделать так, чтобы он воспроизводил его каждый раз, когда я перемещаюсь в регионе, и сбрасывал его после того, как я снова переключался на переключение?

Я пытался использовать отдельные логические функции, такие как:

else if (region1 = true){ 
region1 = false;
}

но это не похоже на работу.Я думаю, что мне нужно работать внутри этой функции, а не создавать новую, чтобы сбросить ее на false.

Вот что я получил:

boolean region1 = false;

       if (blob.getRect().intersects(screenRects.get(0)) && !region1){
         println("region1-"+millis());
           String filename = dataPath("sample.wav");
               SamplePlayer sp = new SamplePlayer(ac, SampleManager.sample(filename));
               ac.out.addInput(sp);
         region1 = true;
       } 

Ответы [ 3 ]

0 голосов
/ 11 апреля 2019

Может быть, все это происходит из-за многопоточности?Если внесенные вами изменения и запросы выполняются в двух разных потоках, вам придется принять дополнительные меры предосторожности.например, определите логическое значение, которое вы проверяете, как volatile.

0 голосов
/ 11 апреля 2019

Предполагая, что вы реализовали предложения в комментариях, и ваш код теперь выглядит следующим образом:

   if (blob.getRect().intersects(screenRects.get(0)) && !region1){
     println("region1-"+millis());
       String filename = dataPath("sample.wav");
           SamplePlayer sp = new SamplePlayer(ac, SampleManager.sample(filename));
           ac.out.addInput(sp);
     region1 = true;
   } 
   else if (region1 == true){ 
     region1 = false;
   }

В результате обнаружения объекта в регионе воспроизводится звук, и region1 устанавливается в значение true. В следующем кадре, else if запускается и region1 снова устанавливается в значение false. Это означает, что после этого кадра, если объект все еще присутствует, звук воспроизводится снова.
Переменная region1 означает «объект вошел в область» и должна быть сброшена только в том случае, если в области нет объекта. Попробуйте это:

boolean isObjectInRegion;

   isObjectInRegion= blob.getRect().intersects(screenRects.get(0));
   if (isObjectInRegion && !region1){
     println("region1-"+millis());
       String filename = dataPath("sample.wav");
           SamplePlayer sp = new SamplePlayer(ac, SampleManager.sample(filename));
           ac.out.addInput(sp);
     region1 = true;
   } 
   else if (!isObjectInRegion && region1 == true){ 
     region1 = false;
   }

Значение: если в регионе был объект, но его больше нет, сбросьте значение region1. Затем он включит звук при повторном входе объекта в регион.

0 голосов
/ 11 апреля 2019

Измените else if(region1 = true) на else if(region1 == true). = является оператором присваивания.

...