gpt4 book ai didi

java - UnsupportedAudioFileException 的解决方法?

转载 作者:行者123 更新时间:2023-11-29 08:18:03 24 4
gpt4 key购买 nike

我正处于用 Java 编写小型音乐/节奏游戏的早期阶段(通过 Slick 框架,它又使用 OpenAL,但这可能与此无关)。游戏需要读取(和播放)多个 WAV 格式的声音文件,但一些文件抛出 [javax.sound.sampled.UnsupportedAudioFileException] 异常。

at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1102)
at org.newdawn.slick.openal.WaveData.create(WaveData.java:123)
at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:713)
at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:683)
at org.newdawn.slick.Sound.<init>(Sound.java:33)

这些文件可以在 Winamp 或 Foobar2000 中播放得很好,所以这意味着 Java 无法识别文件格式的某些变体。此时我有什么选择?

注意:有问题的文件是用户提供的,所以我不能事先转换它们(使用诸如 audacity 之类的东西)。任何转换步骤都必须在运行时完成。

最佳答案

关于 WAV 需要认识到的一件事文件是,它是一种容器格式——它可以保存许多不同格式的数据,包括 uncompressed PCMMP3 .

在这种情况下,我猜测正在使用的库正在连接到 Java Sound API ,并且 API 的实现不支持 WAV 文件中包含的数据格式,导致 UnsupportedAudioFileException异常。

The files can be played back just fine in Winamp or Foobar2000, so this means Java just don't recognize some variants of the file format.

Winamp 等程序之所以能播放WAV 文件是因为它可能使用Windows Audio Compression Manager或者(如果我理解正确的话)DirectShow , 用于管理不同类型的 audio codecs .

Winamp 本身不需要知道如何解码WAV 文件中的音频数据;它要求 ACM 或 DirectShow 返回它可以处理的原始音频数据。 (或者也可能,数据直接发送到音频输出。)

What are my options at this point?

替代方案似乎以 Java Media Framework 的形式存在,似乎有 support many multimedia formats .

据说在使用“JMF 2.1.1 Windows Performance Pack”时它会挂接到 Windows ACM,因此它可能能够播放无法播放的 WAV 文件通过 Java Sound API。

关于java - UnsupportedAudioFileException 的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2843847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com