zxg*_*ear 1 java audio exception
我目前在使用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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
此代码有时会抛出一个UnsupportedAudioFileException.
基本上,我有5个.WAV文件,我知道这些文件没有损坏,因为当我在我的音乐播放软件中打开它们时它们完全没问题.但是,Java程序仅适用于其中的3个.
Oracle在此提及对此文件格式的支持.如何确保所有.WAV文件都与Java的音频API兼容?是否有一种万无一失的播放.WAV文件的方式,如果由于某种原因他们没有适当的编码?
您可以使用以下代码获取支持的播放格式列表:
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;
}
Run Code Online (Sandbox Code Playgroud)
AudioFormat.Encoding列出支持的编码javax.sound.sampled.
安全的WAV音频格式是44位的16位PCM.
您可以使用以下方法发现特定文件的格式:
File file = new File("path_to_file.wav");
AudioFormat fmt = AudioSystem.getAudioFileFormat(file).getFormat();
Run Code Online (Sandbox Code Playgroud)
例如,这比尝试获取一行更宽松,但如果WAV文件具有例如mp3数据,它仍会抛出.WAV文件是一个容器,可以存储超出PCM的编码,其中一些javax.sound.sampled通常不支持.
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |