更新功能中的跳跃动作播放声音(openframework)

时间:2017-04-26 00:42:07

标签: c++ audio openframeworks leap-motion

我使用跳跃动作来演奏乐器音符,我使用palmPosition来触发播放的声音,但它不是我想要的,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;

                }
...
    }

1 个答案:

答案 0 :(得分:0)

您检查声音isPlaying()是否只有在没有这样做时播放。

e.g。

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;

                }