【问题标题】:Playing audio in java using Sun.audio使用 Sun.audio 在 Java 中播放音频
【发布时间】:2014-01-23 11:32:37
【问题描述】:

我只想执行一个简单的任务。 (我是一个java新手)。我想在单击按钮时播放音频剪辑。 这是我的代码的一部分(我完全是通过从 Youtube 复制教程来完成的。)

private void btnPlayActionPerformed(java.awt.event.ActionEvent evt) {                                         
InputStream in;
try{
      in=new FileInputStream(new File("C:\\Users\\Matt\\Documents\\dong.wav"));
      AudioStream timeupsound=new AudioStream(in);
      AudioPlayer.player.start(timeupsound);

}
catch(Exception e){
    JOptionPane.showMessageDialog(null, e);
}

}                                     

但问题是,这行不通。 它抛出并 IOException 说:“无法从输入流创建音频流”。 我的问题是,我做错了什么? (因为我清楚地看到该代码在该 youtube 视频中有效,并且我使用了相同的代码。请帮助。再次,我是新手);

【问题讨论】:

  • 谢谢。我去看看。
  • @Andrew,是的。你说的对。这是wav文件的问题。不是代码。我用几个 wav 文件对其进行了测试,它只适用于其中一个。
  • 我将 cmets 计算为一个可能会让您走得更远的答案。
  • 我发现如果 wav 文件不是 16 位,而是 24 位或 32 位编码,Java 会出现问题。另一个常见的“问题”是字节顺序。 Java 可能更喜欢 little-endian,但我可能是错的,Java 实际上可能同时支持 little-endian 和 bit-endian(但并非适用于所有编码或速率)。还支持一些低于 44100 fps 的 fps 速率,但并非所有这些都可以找到。对我来说最常见的挂断是 24 位和 32 位,而不是 16 位。

标签: java audio media-player javasound sun


【解决方案1】:

sun 包类应该在编译时引起一些信息警告。注意他们。不要使用该包层次结构中的类。它们未记录在案,无法保证从一个 Java 版本到下一个版本,并且可能在非 Oracle JRE 中根本不可用。

改为使用基于Clip 的Java Sound 来播放音频。有关工作示例,请参阅 info. page

注意

可能是 WAV 以 Java Sound 不支持的格式编码。媒体格式通常是“容器格式”,可以使用任意数量的不同编解码器进行编码。 WAV 很可能在内部使用了更压缩的编解码器,例如 MP3 或 OGG。

我不知道 OGG 格式的服务提供者接口,但如果它们被编码为 MP3,您也许可以使用 MP3 SPI 使其工作。查看信息。上面链接的页面以获取详细信息。

提示

还要修改表单的代码:

catch (Exception e) { .. 

catch (Exception e) { 
    e.printStackTrace(); // very informative! ... 

【讨论】:

  • sun.audio 自 JDK 9 起已被删除。
猜你喜欢
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 2022-07-19
  • 2018-05-19
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多