0

我正在尝试用java制作音乐播放器。我已经访问了许多网站并查看了资源以了解它是如何工作的,但是 AudioInputStream 在我最不期望的地方给了我一个 nullPointerException !似乎以前没有人问过这个问题(此外,我没有足够的代表发表评论,所以我不得不将它作为一个单独的问题),所以我将向您展示出错的代码:

Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getInputStream(new File("mywav.wav"));
clip.open(ais);
clip.start();

我用 Thread 包围了它并启动了 Thread,所以它应该可以充分发挥作用。但是,我在“AudioInputStream ais = AudioSystem.getInputStream(...."

4

2 回答 2

1

1) 你可以从任何地方加载你的声音。名为“声音”的文件夹只是一种方便,例如用于艺术图形的名为“图像”的文件夹。

2)我认为,如果您使用 URL 而不是文件作为输入源,您的运气会更好。

因此:

URL url = this.getClass().getResource("mywav.wav");
AudioInputStream aiStream = AudioSystem.getAudioInputStream(url);   

出现的一个晦涩难懂的问题(我已经帮助了大约十几个人犯了同样的错误)是,当您按照自己的方式进行操作时,您会创建一个存在 InputStream 的中间步骤。如果您检查 JavaDocs 中的 AudioSystem.getAudioInputStream(url) 与 AudioSystem.getAudioInputStream(inputStream),您将看到 InputStream 必须是“可标记”文件,并且不能保证这一点。使用 URL 表单,没有这样的测试或要求。

以下是链接,方便阅读。 http://docs.oracle.com/javase/6/docs/api/javax/sound/sampled/AudioSystem.html#getAudioInputStream(java.net.URL ) http://docs.oracle.com/javase/6/ docs/api/javax/sound/sampled/AudioSystem.html#getAudioInputStream(java.io.InputStream )

似乎在 Java 7 之前,由于某种原因,系统“知道”如何处理 wav 文件有一个默认值,但是这个默认值不再存在,许多人使用你的方式从 InputStream 获取他们的 AudioInputStream突然发现他们的声音密码坏了。甚至还有一个官方的 Oracle 错误报告:#7095006

于 2012-11-25T09:16:12.727 回答
0

试试这个

private AudioClip clip;
clip = getAudioClip(getCodeBase(), "sounds/mywav.wav");
clip.loop();

您将需要创建一个名为声音的新文件夹。然后将您的声音文件放在文件夹中。请注意,您所有的声音都必须是 .wav

于 2012-11-24T18:02:46.877 回答