2011-08-18 72 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