2014-07-20 44 views
0

我有一個功能,每次用戶點擊時都會調用這個功能,如果屏幕發生變化,將會啓動音樂。它現在唯一的問題是它不會停止。我發現這是因爲clip = AudioSystem.getClip();將不會返回當前播放的剪輯,它每次都會返回一個隨機位置。我如何確保剪輯獲取當前正在播放的剪輯的值,以便我可以阻止它?音頻 - 剪輯不會停止

的「StartBGMusic」功能

public void startBGMusic() throws LineUnavailableException, IOException 
    { 
     clip = AudioSystem.getClip(); 
     System.out.println(clip); 
     try 
     { 
      if(SCREEN_CHECK != Screen) 
      { 
       clip.stop(); 

       clip.close(); 

       if(Screen != 14 && Screen != 19 && Screen != 16 && Screen != 15 && Screen != 17) 
       { 
        clip.open(AudioSystem.getAudioInputStream(getClass().getResource("UpbeatFunk.wav"))); 
        clip.loop(99999); 
       } 
       else 
       { 
        clip.open(AudioSystem.getAudioInputStream(getClass().getResource("Background Music.mid"))); 
        clip.loop(99999); 
       } 
      } 

      SCREEN_CHECK = Screen; 
     }catch (Exception e) 
     { 
      e.printStackTrace(System.out); 
     } 
    } 
+0

他們說JavaScript與Java很像,所以你可以使用這個視頻系列來弄清楚它:http:// www .developphp.com/list_javascript_video.php#Audio_Workshop –

+1

@IGotRoot誰是「他們」? (相關問題)(http://stackoverflow.com/questions/245062/whats-the-difference-between-javascript-and-java) –

+0

他們:從程序員誰說,如果你可以學習Java,你可以學習JavaScript 。 –

回答

1

According to oracle documentation, getClip()不返回當前正在播放的聲音,但可以使用一個剪輯對象播放音頻文件。

您需要將引用傳遞給用於啓動音頻文件的剪輯。這可以通過返回/傳遞它作爲參數或通過使用全局變量/ getter方法來完成

+0

謝謝!但爲什麼當剪輯變成另一個聲音文件時,它會「凍結」一秒? – user3672378

+0

由於您在加載下一個文件之前停止了音樂,因此稍有延遲。這可以通過在已經加載正確文件的2個剪輯對象之間交替來避免(不是整齊,但更快的歌曲改變) – Matt

+0

非常感謝!超級有用! – user3672378