首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Stackoverflow的javasound标记示例播放音频

使用Stackoverflow的javasound标记示例播放音频
EN

Stack Overflow用户
提问于 2014-10-18 00:51:15
回答 1查看 219关注 0票数 3

今天早些时候,我阅读了有关爪哇标记的内容,尝试实现我们可以在那里看到的简单代码(只进行一些小的修改,比如使用File而不是URL):

代码语言:javascript
复制
File file = new File(System.getProperty("user.dir") + "/sound.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream(file);
clip.open(ais); // exception

但是当我试图打开我们在那里看到的AudioInputStream时,我得到了一个AudioInputStream

但是,当我尝试使用下面的代码时,我从互联网上获得了

代码语言:javascript
复制
File file = new File(System.getProperty("user.dir") + "/sound.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(file);
AudioFormat format = ais.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip clip = (Clip)AudioSystem.getLine(info);
clip.open(ais);
clip.start();

完成了的工作:sound.wav被正确地播放了--但是,对于应该像我们在爪哇标记本身上给出的第一个示例那样简单的东西,我发现它太笨重了。

通过阅读来自剪辑的文档,我承认IllegalArgumentException是在[...] the stream's audio format is not fully specified or invalid时抛出的。然而,它似乎是一种有效的格式。

这里的第一个示例有什么问题?AudioSystem.getAudioInputStream()确实接受一个File作为参数,而且,从第二个示例中可以看到,它确实具有有效的音频文件数据,因为它可以工作。我漏掉了什么明显的东西吗?如果是这样的话,难道不应该在爪哇标签上指出吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-14 15:50:32

经过一些研究,我发现它可能与系统属性有关。在这些属性中,您可以为getLine()方法(getLine()、getClip()、getSourceDataLine()和getTargetDataLine())指定默认值。如果调用这些方法之一,Java执行以下操作(AudioSystem描述):

系统属性javax.sound.sampled.Clip设置为

javax.sound.sampled.Clip = great.Mixer#great.clip.Clap

Mixer类名为great.Mixer,剪辑名为great.clip.Clap

当您请求剪辑时,Java会检查以下内容:

  • 如果找到了混频器great.Mixer并包含剪辑great.clip.Clap,则返回此剪辑
  • 如果找到了混频器great.Mixer,但不包含剪辑great.clip.Clap,则返回在混频器中指定的第一个剪辑。
  • 如果混合器great.Mixer不包含任何剪辑,或者没有找到,则在任何混合器中返回great.clip.Clap的第一个实例。
  • 如果没有混频器包含great.clip.Clap,则返回找到的第一个混合器的第一个剪辑。
  • 如果在任何混合器中没有指定剪辑,则抛出一个IllegalArgumentException

这意味着,如果你得到一个IllegalArgumentException,没有剪辑安装在任何混频器。

使用

代码语言:javascript
复制
DataLine.Info info = new DataLine.Info(Clip.class, format);

您正在定义一个新剪辑。这意味着下一个对getLine()方法的调用将返回这个对象,而不是给出一个错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26435282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档