Обработка: звуковой файл в цикле, но хотите воспроизвести только один раз - PullRequest
0 голосов
/ 11 мая 2018

Я очень новичок в кодировании, и я впервые спрашиваю о переполнении стека!

Я пытаюсь воспроизвести 3 разных звуковых файла в трех разных условиях: когда угол талии <195,звуковой файл "high" должен воспроизводиться, а два других не должны воспроизводиться и т. д. </p>

Я использую import processing.sound. *;и объявили звуковые файлы в void setup ().

Проблема в том, что угол талии постоянно обновляется, поэтому звуковой файл запускается несколько раз и вылетает.

Может кто-нибудьпомочь мне с этим?

if (waist != null){
       if(waist.angle<195){
          text("waist too high", waist.getCenter().x, waist.getCenter().y);
           low.stop();
           correct.stop();
           high.play();
       } else if(waist.angle>205){
         text("waist too low", waist.getCenter().x, waist.getCenter().y);
           high.stop();
           correct.stop();
           low.play();
       } else text("you're doing well", waist.getCenter().x, waist.getCenter().y);
           high.stop();
           low.stop();
           correct.play();
     }

1 Ответ

0 голосов
/ 11 мая 2018

Вы должны установить ограничение скорости для вашей функции.

Предположим, что вы обернули свою функцию в playSound(waist), который принимает waist экземпляр и воспроизводит / останавливает звук правильно.

ТогдаВы можете ограничить его скорость вызова простым таймером, подобным этому:

long lastTimestamp = 0; // Init this in your void setup() or in your constructor
static final THRESHOLD = 2000; // Process event at most once per 2s

А в обработчике событий:

long currentTimestamp = System.currentTimeMillis();
if (currentTimestamp - lastTimestamp >= THRESHOLD) {
   // Process the event
   playSound(waist);
} 
...