2011-08-18 45 views
-2

可能重複:
How can I play sound in Java?的Java如何播放聲音

我看過很多很多天這個!

我的問題是播放.wav聲音文件的最佳方式是什麼?來源將非常有幫助!我不需要任何花哨的混音或任何其他。只是一個戲劇,也許是一個停止功能。注 - 這是一個應用程序,而不是一個小程序。

對我來說最適合的事情就是Clip方式,因爲代碼量小,易於理解。但是,每次使用clip.open()時都會發生錯誤。

IllegalStateException: Mixer is already open 

和相關代碼 -

String stringFile = "example.wav"; 
File soundFile = new File(stringFile); 
AudioInputStream inputStream = AudioSystem.getAudioInputStream(soundFile); 
AudioFormat format = inputStream.getFormat(); 
DataLine.Info info = new DataLine.Info(Clip.class, format); 
clip = (Clip) AudioSystem.getLine(info); 
clip.open(inputStream); 
clip.start(); 

而另一個相關question- Im相當新的使用多個類,所以這將是可能的TO-有另一個類播放聲音,在該類的構造函數中傳遞文件名。那麼你可以在構造函數方法中播放聲音文件嗎?

+0

複製線程上的大部分答案都是低質量的。只有最後一個答案提到公共API「剪輯」,然後他們使用它錯誤。該線程應該已被刪除,而不是受保護。有關播放聲音的快速示例,請參閱[JavaSound信息。頁面(http://stackoverflow.com/tags/javasound/info)。 –

回答

0

當您使用clip.open()時,您能發佈您的錯誤嗎?

就您是否可以有另一個班級播放聲音而言......最好將班級視爲事物的定義。你理論上可以想象一個音樂播放器的「東西」,所以是的,你可以有一個MusicPlayer類。你可以將文件名傳遞給構造函數;不過,我不會推薦在構造函數中播放歌曲。相反,將名稱存儲在實例變量中,並在名爲playMusic的MusicPlayer類中使用公用方法。然後,你可以做類似的事情。

MusicPlayer player = new MusicPlayer("song.wav"); 
player.playMusic(); 

您可以根據需要多次調用playMusic。你也可以有一個方法來改變歌曲的文件名。

player.changeSong("differentSong.wav"); 
+0

錯誤是IllegalArgumentExeption,堆棧跟蹤來自很多後臺方法,第一個有代碼的是我的代碼,clip.open();.你的建議非常棒,謝謝!我忘了把我想要它作爲一個單獨的課程的原因,所以可以同時播放多個聲音(來自該課程的不同實例) – khyperia

+0

@khyperia我不知道什麼類型的對象剪輯是,但它似乎這個函數可能需要一個'String'參數,並且你傳遞了其他的東西。只是一個猜測,你想要做'clip.open(System.in);'?如果你是,那不行。請張貼所有相關的代碼。 – Daniel

+0

剪輯需要一個inputStream,我正在做。我排序修復它,現在它播放文件,但它仍然會拋出一個IllegalStateException:混音器已經打開。 – khyperia