首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java的声音API并不适用于所有的.WAV文件?

Java的声音API并不适用于所有的.WAV文件?
EN

Stack Overflow用户
提问于 2015-04-18 13:35:32
回答 2查看 1.9K关注 0票数 1

我目前在使用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文件,如果由于某些原因,他们没有适当的编码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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通常不支持。

票数 5
EN

Stack Overflow用户

发布于 2015-04-18 14:25:16

如果您查找UnsupportedAudioFileException,您会注意到当文件是不受支持的类型或不受支持的格式时,它会被抛出。格式就是你想要的。

Java Sound能够支持各种不同的格式,但具体哪种格式通常取决于系统。您可以找出支持哪些格式:

DataLine.Info.getFormats();

该方法返回一个AudioFormat对象数组,每个对象都描述了您的Java实现可以使用的一种音频语言。

考虑到您可以在其他播放器上播放文件,系统的某些部分很可能完全能够理解每种wav格式;但您可以考虑检查它是通过哪条数据线传送的,因为这并不意味着它们得到了普遍的支持。

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

https://stackoverflow.com/questions/29713371

复制
相关文章

相似问题

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