2017-04-26 74 views
0

我使用leap motion來播放樂器音符,並使用palmPosition來觸發播放的聲音,但它不是我想要的,palmPosition在更新函數中,聲音將一遍又一遍地播放幀率。太快了,我希望跳起動作就像鼠標向上和鼠標向下一樣...在palmPosition更改時播放聲音。 這裏是我的代碼,更新功能中的跳躍運動播放聲音(openframework)

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

你應該能夠檢查聲音['IsPlaying模塊()'](http://openframeworks.cc/documentation/sound/ofSoundPlayer/#show_isPlaying)且僅當它沒有這樣做 –

+0

玩@George Profenza,謝謝你的提示,作品~~~ – Eleanor

+0

甜美!我已將評論添加爲將來參考的答案。隨意投票/標記它是否有用;) –

回答

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; 

       }