Воспроизведение звука скачка движения в функции обновления (openframework)

Я использую скачкообразное движение для воспроизведения инструментальных нот, и я использую palmPosition, чтобы включить воспроизводимый звук, но это не то, что я хочу, palmPosition находится в функции обновления, звук будет воспроизводиться на основе частоты кадров снова и снова. Слишком быстро, я хочу, чтобы прыжковое движение точно так же, как мышь вверх и мышь вниз … Проигрывайте звуки при изменении положения ладони.
Вот мой код,

    void ofApp::update(){
...
if (hands[i].palmPosition().z < 50) {
isTouch = true;
if ((hands[i].palmPosition().x > -240)&& (hands[i].palmPosition().x < -160)) {
pianoE.setVolume(1);
pianoE.play();
}

if ((hands[i].palmPosition().x >-120)&& (hands[i].palmPosition().x <-60)) {
pianoE.setVolume(1);
pianoE.play();
}

if ((hands[i].palmPosition().x >-20)&& (hands[i].palmPosition().x < 20)) {
pianoC.setVolume(1);
pianoC.play();
}

if ((hands[i].palmPosition().x > 90)&& (hands[i].palmPosition().x < 120)) {
pianoC.setVolume(1);
pianoC.play();
}

if ((hands[i].palmPosition().x >180)&& (hands[i].palmPosition().x < 240)) {
pianoC.setVolume(1);
pianoC.play();
}
}else{
isTouch = false;

}
...
}

0

Решение

Вы проверите, если звук isPlaying() и играть в нее, только если она этого еще не делает.

например

if (hands[i].palmPosition().z < 50) {
isTouch = true;
if ((hands[i].palmPosition().x > -240)&& (hands[i].palmPosition().x < -160)) {
pianoE.setVolume(1);
if(!pianoE.isPlaying()) pianoE.play();
}

if ((hands[i].palmPosition().x >-120)&& (hands[i].palmPosition().x <-60)) {
pianoE.setVolume(1);
if(!pianoE.isPlaying()) pianoE.play();
}

if ((hands[i].palmPosition().x >-20)&& (hands[i].palmPosition().x < 20)) {
pianoC.setVolume(1);
if(!pianoC.isPlaying()) pianoC.play();
}

if ((hands[i].palmPosition().x > 90)&& (hands[i].palmPosition().x < 120)) {
pianoC.setVolume(1);
if(!pianoC.isPlaying()) pianoC.play();
}

if ((hands[i].palmPosition().x >180)&& (hands[i].palmPosition().x < 240)) {
pianoC.setVolume(1);
if(!pianoC.isPlaying()) pianoC.play();
}
}else{
isTouch = false;

}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]