我目前在使用javax.sound.sampled
库时遇到了麻烦。下面是我用来播放音频文件的MCV代码:
import javax.sound.sampled.*;
import java.io.File;
public class Foo
{
public static void main(String[] args)
{
try
{
File f = new File("alarm.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(f);
Clip clip = AudioSystem.getClip();
clip.open(ais);
clip.start();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
此代码有时会抛出UnsupportedAudioFileException
。
基本上,我有5个.WAV文件,我知道它们没有损坏,因为当我在我的音乐播放软件中打开它们时,它们播放得非常好。然而,Java程序只使用其中的3个。
Oracle mentions support for this file format here.如何确保我所有的.WAV文件都与Java的audio API兼容?有没有一种万无一失的方法来播放.WAV文件,如果由于某些原因,他们没有适当的编码?
发布于 2015-04-18 14:04:27
您可以使用以下代码来获取支持的播放格式列表:
public static List<AudioFormat> getSupportedAudioFormats() {
List<AudioFormat> result = new ArrayList<>();
for (Line.Info info : AudioSystem.getSourceLineInfo(
new Line.Info(SourceDataLine.class))) {
if (info instanceof SourceDataLine.Info) {
Collections.addAll(result, ((SourceDataLine.Info) info).getFormats());
}
}
return result;
}
AudioFormat.Encoding
列出了javax.sound.sampled
支持的编码。
安全的WAV音频格式是16位PCM,频率为44100 is。
您可以使用以下命令发现特定文件的格式:
File file = new File("path_to_file.wav");
AudioFormat fmt = AudioSystem.getAudioFileFormat(file).getFormat();
例如,这将比尝试获取一行要宽松一些,但如果WAV文件包含例如mp3数据,它仍然会抛出。WAV文件是一个容器,可以存储超出PCM的编码,其中一些javax.sound.sampled
通常不支持。
发布于 2015-04-18 14:25:16
如果您查找UnsupportedAudioFileException,您会注意到当文件是不受支持的类型或不受支持的格式时,它会被抛出。格式就是你想要的。
Java Sound能够支持各种不同的格式,但具体哪种格式通常取决于系统。您可以找出支持哪些格式:
DataLine.Info.getFormats();
该方法返回一个AudioFormat对象数组,每个对象都描述了您的Java实现可以使用的一种音频语言。
考虑到您可以在其他播放器上播放文件,系统的某些部分很可能完全能够理解每种wav格式;但您可以考虑检查它是通过哪条数据线传送的,因为这并不意味着它们得到了普遍的支持。
https://stackoverflow.com/questions/29713371
复制相似问题