Module  java.desktop
软件包  javax.sound.sampled

Class AudioSystem



  • public class AudioSystem
    extends Object
    AudioSystem类作为采样音频系统资源的入口点。 此类允许您查询和访问系统上安装的混音器。 AudioSystem包括用于在不同格式之间转换音频数据以及用于在音频文件和流之间进行转换的多种方法。 它还提供了一种从AudioSystem直接获取AudioSystem而不用混合器明确处理的方法。

    属性可用于指定特定行类型的默认调音台。 考虑系统属性和属性文件。 “sound.properties”属性文件从实现特定的位置读取(通常它是Java安装目录中的conf目录)。 如果属性既作为系统属性又在属性文件中存在,则系统属性优先。 如果没有指定,则在可用设备中选择合适的默认值。 属性文件的语法在Properties.load指定。 下表列出了可用的属性键和哪些方法考虑:

    Audio System Property Keys Property Key Interface Affected Method(s) javax.sound.sampled.Clip Clip getLine(javax.sound.sampled.Line.Info), getClip() javax.sound.sampled.Port Port getLine(javax.sound.sampled.Line.Info) javax.sound.sampled.SourceDataLine SourceDataLine getLine(javax.sound.sampled.Line.Info), getSourceDataLine(javax.sound.sampled.AudioFormat) javax.sound.sampled.TargetDataLine TargetDataLine getLine(javax.sound.sampled.Line.Info), getTargetDataLine(javax.sound.sampled.AudioFormat)
    属性值由提供程序类名称和混合器名称组成,以哈希标记(“#”)分隔。 提供者类名是具体的mixer provider类的完全限定名称。 混合器名称匹配StringgetName方法返回的Mixer.Info 可以省略类名称或混音器名称。 如果仅指定了类名称,则尾部哈希标记是可选的。

    如果指定了提供程序类,并且可以从已安装的提供程序成功检索,则可以从提供程序检索Mixer.Info对象的列表。 否则,或者当这些混音器不提供后续匹配时,该列表将从getMixerInfo()检索到包含所有可用的Mixer.Info对象。

    如果指定了混音器名称,则会搜索Mixer.Info对象的结果列表:第一个具有匹配名称,其Mixer提供相应行界面的对象将被返回。 如果没有匹配的Mixer.Info找到对象,或者没有指定混合器名,从结果列表中,它提供了各自的线路接口的第一混频器,将被返回。 例如,当getLine被调用请求Clip实例时,具有值"com.sun.media.sound.MixerProvider#SunClip"的属性javax.sound.sampled.Clip将具有以下结果:如果安装的混合器提供程序列表中存在类别com.sun.media.sound.MixerProvider ,则将返回名称为"SunClip"的第一个混合器的第一个Clip 如果找不到,将从返回的指定提供程序的第一个混音器的第一个Clip ,无论名称如何。 如果没有,第Clip从第一Mixer名称为"SunClip"的所有混合器(如返回列表getMixerInfo )将被退回,或者,如果没有找到,第Clip第一Mixer ,可以在找到返回所有混音器的列表。 如果失败,也抛出一个IllegalArgumentException

    从以下版本开始:
    1.3
    另请参见:
    AudioFormatAudioInputStreamMixerLineLine.Info
    • 字段详细信息

      • NOT_SPECIFIED

        public static final int NOT_SPECIFIED
        一个代表未知数值的整数。 该值仅适用于通常不采取负值的带符号数量。 示例包括文件大小,帧大小,缓冲区大小和采样率。 许多Java Sound构造函数接受这样的参数的值为NOT_SPECIFIED 其他方法也可以接受或返回此值,如文件所示。
        另请参见:
        Constant Field Values
    • 方法详细信息

      • getMixerInfo

        public static Mixer.Info[] getMixerInfo​()
        获取一组混合信息对象,表示系统当前安装的一组音频混合器。
        结果
        一系列当前安装的混音器的信息对象。 如果系统上没有可用的混音器,则返回长度为0的数组。
        另请参见:
        getMixer(javax.sound.sampled.Mixer.Info)
      • getMixer

        public static Mixer getMixer​(Mixer.Info info)
        获得所要求的音频混音器。
        参数
        info - 表示所需混音器的 Mixer.Info对象,或 null系统默认混音器
        结果
        请求的混音器
        异常
        SecurityException - 如果请求的混音器由于安全限制而不可用
        IllegalArgumentException - 如果信息对象不表示系统上安装的混音器
        另请参见:
        getMixerInfo()
      • getSourceLineInfo

        public static Line.Info[] getSourceLineInfo​(Line.Info info)
        获取有关所安装的混音器支持的特定类型的所有源行的信息。
        参数
        info - 一个 Line.Info对象,指定要求哪些信息的行的种类
        结果
        描述一个Line.Info对象的数组,描述符合所请求类型的源行。 如果不支持匹配的源行,则返回长度为0的数组。
        另请参见:
        Mixer.getSourceLineInfo(Line.Info)
      • getTargetLineInfo

        public static Line.Info[] getTargetLineInfo​(Line.Info info)
        获取有关所安装的混音器支持的特定类型的所有目标行的信息。
        参数
        info - 一个 Line.Info对象,指定要求哪个信息的行的种类
        结果
        描述符合所请求类型的目标行的Line.Info对象的数组。 如果不支持匹配的目标行,则返回长度为0的数组。
        另请参见:
        Mixer.getTargetLineInfo(Line.Info)
      • isLineSupported

        public static boolean isLineSupported​(Line.Info info)
        指示系统是否支持与指定的Line.Info对象匹配的任何行。 如果任何已安装的调音台支持线路,则支持线路。
        参数
        info - 描述要查询支持的行的 Line.Info对象
        结果
        true ,如果至少一个匹配线被支撑,否则 false
        另请参见:
        Mixer.isLineSupported(Line.Info)
      • getLine

        public static Line getLine​(Line.Info info)
                            throws LineUnavailableException
        获取与指定的Line.Info对象中的描述匹配的行。

        如果请求DataLine ,并且info是指定至少一个完全限定音频格式的DataLine.Info的实例,则最后一个将被用作返回的DataLine的默认格式。

        如果系统属性javax.sound.sampled.Clipjavax.sound.sampled.Portjavax.sound.sampled.SourceDataLinejavax.sound.sampled.TargetDataLine被定义或者在文件“sound.properties”定义的,它们被用来获取默认的行。 详情请参阅class description 如果没有设置相应的属性,或者没有安装属性中要求的混音器或不提供所请求的线路,则会根据请求的线路类型查询所有安装的混音器。 一条线将从提供所请求线路类型的第一台混音器返回。

        参数
        info - 描述所需类型的线的 Line.Info对象
        结果
        一条要求的种类
        异常
        LineUnavailableException - 如果由于资源限制,匹配的行不可用
        SecurityException - 如果由于安全限制,匹配的行不可用
        IllegalArgumentException - 如果系统通过任何安装的混音器不支持至少一行匹配指定的 Line.Info对象
      • getClip

        public static Clip getClip​()
                            throws LineUnavailableException
        获取可用于播放音频文件或音频流的剪辑。 返回的剪辑将由默认的系统混音器提供,或者如果不可能,则由支持Clip对象的系统中安装的任何其他混音器提供。

        必须使用open(AudioFormat)open(AudioInputStream)方法打开返回的剪辑。

        这是一种在内部使用getMixergetLine的高级方法。

        如果系统属性javax.sound.sampled.Clip已被定义,或者在文件“sound.properties”中定义,则用于检索默认剪辑。 详情请参阅class description

        结果
        所需的剪辑对象
        异常
        LineUnavailableException - 如果由于资源限制,剪辑对象不可用
        SecurityException - 如果由于安全限制,剪辑对象不可用
        IllegalArgumentException - 如果系统通过任何已安装的混音器不支持至少一个剪辑实例
        从以下版本开始:
        1.5
        另请参见:
        getClip(Mixer.Info)
      • getClip

        public static Clip getClip​(Mixer.Info mixerInfo)
                            throws LineUnavailableException
        从指定的混音器中获取可用于播放音频文件或音频流的剪辑。

        必须使用open(AudioFormat)open(AudioInputStream)方法打开返回的剪辑。

        这是一种在内部使用getMixergetLine的高级方法。

        参数
        mixerInfo - 表示所需混频器的 Mixer.Info对象,或系统默认混音器的 null
        结果
        来自指定混音器的剪辑对象
        异常
        LineUnavailableException - 如果由于资源限制,剪辑不可用于此混音器
        SecurityException - 如果由于安全限制,剪辑不可用于此混音器
        IllegalArgumentException - 如果系统通过指定的混音器不支持至少一个剪辑
        从以下版本开始:
        1.5
        另请参见:
        getClip()
      • getSourceDataLine

        public static SourceDataLine getSourceDataLine​(AudioFormat format)
                                                throws LineUnavailableException
        获取可用于以AudioFormat对象指定的格式播放音频数据的源数据线。 返回的行将由默认的系统调音台提供,或者如果不可能,则由系统中安装的任何其他调音台(支持匹配的SourceDataLine对象)提供。

        应使用open(AudioFormat)open(AudioFormat, int)方法打开返回行。

        这是一种在内部使用getMixergetLine的高级别方法。

        返回的SourceDataLine的默认音频格式将使用format初始化。

        如果系统属性javax.sound.sampled.SourceDataLine被定义,或者它在文件“sound.properties”中定义,则用于检索默认的源数据行。 详情请参阅class description

        参数
        format - 指定所支持的返回行的音频格式的 AudioFormat对象,或任何音频格式的 null
        结果
        所需的 SourceDataLine对象
        异常
        LineUnavailableException - 如果由于资源限制,匹配的源数据行不可用
        SecurityException - 如果由于安全限制,匹配的源数据行不可用
        IllegalArgumentException - 如果系统不支持通过任何安装的混音器支持指定音频格式的至少一个源数据线
        从以下版本开始:
        1.5
        另请参见:
        getSourceDataLine(AudioFormat, Mixer.Info)
      • getSourceDataLine

        public static SourceDataLine getSourceDataLine​(AudioFormat format,
                                                       Mixer.Info mixerinfo)
                                                throws LineUnavailableException
        获得可用于在由指定的格式回放音频数据的源数据线AudioFormat对象,通过由指定的混频器提供Mixer.Info对象。

        返回行应使用open(AudioFormat)open(AudioFormat, int)方法打开。

        这是一种在内部使用getMixergetLine的高级方法。

        返回的SourceDataLine的默认音频格式将使用format进行初始化。

        参数
        format - 指定所支持的返回行的音频格式的 AudioFormat对象,或任何音频格式的 null
        mixerinfo - 表示所需混频器的 Mixer.Info对象,或 null用于系统默认混音器
        结果
        所需的 SourceDataLine对象
        异常
        LineUnavailableException - 如果由于资源限制,匹配的源数据线不能从指定的混合器获得
        SecurityException - 如果由于安全限制,匹配的源数据行不能从指定的调音台获得
        IllegalArgumentException - 如果指定的混合器不支持至少一个支持指定音频格式的源数据线
        从以下版本开始:
        1.5
        另请参见:
        getSourceDataLine(AudioFormat)
      • getTargetDataLine

        public static TargetDataLine getTargetDataLine​(AudioFormat format)
                                                throws LineUnavailableException
        获取可用于以AudioFormat对象指定的格式录制音频数据的目标数据线。 返回的行将由默认的系统调音台提供,或者如果不可能,则通过系统中安装的任何其他调音台来支持匹配的TargetDataLine对象。

        应使用open(AudioFormat)open(AudioFormat, int)方法打开返回的行。

        这是一种在内部使用getMixergetLine的高级方法。

        返回的TargetDataLine的默认音频格式将使用format进行初始化。

        如果系统属性javax.sound.sampled.TargetDataLine被定义,或者在文件“sound.properties”中定义,则用于检索默认目标数据行。 详情请参阅class description

        参数
        format - 一个 AudioFormat对象,指定所支持的返回行的音频格式,或任何音频格式的 null
        结果
        所需的 TargetDataLine对象
        异常
        LineUnavailableException - 如果由于资源限制,匹配的目标数据行不可用
        SecurityException - 如果由于安全限制,匹配的目标数据行不可用
        IllegalArgumentException - 如果系统不支持至少一个目标数据线,通过任何安装的混音器支持指定的音频格式
        从以下版本开始:
        1.5
        另请参见:
        getTargetDataLine(AudioFormat, Mixer.Info)AudioPermission
      • getTargetDataLine

        public static TargetDataLine getTargetDataLine​(AudioFormat format,
                                                       Mixer.Info mixerinfo)
                                                throws LineUnavailableException
        获得可用于在由指定的格式记录音频数据的目标数据线AudioFormat对象,通过由指定的混频器提供Mixer.Info对象。

        应使用open(AudioFormat)open(AudioFormat, int)方法打开返回的行。

        这是一种内部使用getMixergetLine的高级方法。

        返回的TargetDataLine的默认音频格式将被初始化为format

        参数
        format - 指定所支持的返回行音频格式的 AudioFormat对象,或任何音频格式的 null
        mixerinfo - 表示所需混频器的 Mixer.Info对象,或系统默认混音器的 null
        结果
        所需的 TargetDataLine对象
        异常
        LineUnavailableException - 如果匹配的目标数据线由于资源限制而不能从指定的混合器中使用
        SecurityException - 如果匹配的目标数据线由于安全限制而从指定的混合器中不可用
        IllegalArgumentException - 如果指定的混音器不支持至少一个支持指定音频格式的目标数据线
        从以下版本开始:
        1.5
        另请参见:
        getTargetDataLine(AudioFormat)AudioPermission
      • getTargetEncodings

        public static AudioFormat.Encoding[] getTargetEncodings​(AudioFormat.Encoding sourceEncoding)
        获取系统可以使用一组已安装的格式转换器从具有指定编码的音频输入流中获取的编码。
        参数
        sourceEncoding - 查询转换支持的编码
        结果
        编码数组。 如果不支持sourceEncoding ,则返回长度为0的数组。 否则,该数组的长度至少为1,表示sourceEncoding (无转换)。
        异常
        NullPointerException - 如果 sourceEncodingnull
      • getTargetEncodings

        public static AudioFormat.Encoding[] getTargetEncodings​(AudioFormat sourceFormat)
        获取系统可以使用一组已安装的格式转换器从指定格式的音频输入流中获取的编码。
        参数
        sourceFormat - 查询转换的音频格式
        结果
        编码数组。 如果不支持sourceFormat ,则返回长度为0的数组。 否则,数组的长度至少为1,表示编码为sourceFormat (无转换)。
        异常
        NullPointerException - 如果 sourceFormatnull
      • isConversionSupported

        public static boolean isConversionSupported​(AudioFormat.Encoding targetEncoding,
                                                    AudioFormat sourceFormat)
        指示是否可以从具有指定格式的音频输入流获取指定编码的音频输入流。
        参数
        targetEncoding - 转换后的所需编码
        sourceFormat - 转换前的音频格式
        结果
        true如果转换支持,否则为 false
        异常
        NullPointerException - 如果 targetEncodingsourceFormatnull
      • getTargetFormats

        public static AudioFormat[] getTargetFormats​(AudioFormat.Encoding targetEncoding,
                                                     AudioFormat sourceFormat)
        获取具有特定编码的格式,并且系统可以使用一组已安装的格式转换器从指定格式的流中获取。
        参数
        targetEncoding - 转换后的所需编码
        sourceFormat - 转换前的音频格式
        结果
        数组格式。 如果不支持指定编码的格式,则返回长度为0的数组。
        异常
        NullPointerException - 如果 targetEncodingsourceFormatnull
      • isConversionSupported

        public static boolean isConversionSupported​(AudioFormat targetFormat,
                                                    AudioFormat sourceFormat)
        指示是否可以从另一指定格式的音频输入流获取指定格式的音频输入流。
        参数
        targetFormat - 转换后所需的音频格式
        sourceFormat - 转换前的音频格式
        结果
        true如果转换支持,否则 false
        异常
        NullPointerException - 如果 targetFormatsourceFormatnull
      • getAudioFileFormat

        public static AudioFileFormat getAudioFileFormat​(InputStream stream)
                                                  throws UnsupportedAudioFileException,
                                                         IOException
        获取提供的输入流的音频文件格式。 流必须指向有效的音频文件数据。 该方法的实现可能需要多个解析器来检查流以确定它们是否支持它。 这些解析器必须能够标记流,读取足够的数据来确定它们是否支持流,并将流的读取指针重置为其原始位置。 如果输入流不支持这些操作,则此方法可能会失败,并显示IOException
        参数
        stream - 应提取文件格式信息的输入流
        结果
        描述流的音频文件格式的 AudioFileFormat对象
        异常
        UnsupportedAudioFileException - 如果流不指向系统识别的有效音频文件数据
        IOException - 如果输入/输出异常发生
        NullPointerException - 如果 streamnull
        另请参见:
        InputStream.markSupported()InputStream.mark(int)
      • getAudioInputStream

        public static AudioInputStream getAudioInputStream​(InputStream stream)
                                                    throws UnsupportedAudioFileException,
                                                           IOException
        从提供的输入流中获取音频输入流。 流必须指向有效的音频文件数据。 该方法的实现可能需要多个解析器来检查流以确定它们是否支持它。 这些解析器必须能够标记流,读取足够的数据来确定它们是否支持流,并将流的读取指针重置为其原始位置。 如果输入流不支持这些操作,则此方法可能会失败,并显示IOException
        参数
        stream -从该输入流 AudioInputStream应当被构造
        结果
        基于输入流中包含的音频文件数据的一个 AudioInputStream对象
        异常
        UnsupportedAudioFileException - 如果流不指向系统识别的有效音频文件数据
        IOException - 如果发生I / O异常
        NullPointerException - 如果 streamnull
        另请参见:
        InputStream.markSupported()InputStream.mark(int)
      • getAudioFileTypes

        public static AudioFileFormat.Type[] getAudioFileTypes​()
        获取系统提供文件写入支持的文件类型。
        结果
        数组的唯一文件类型。 如果不支持文件类型,则返回长度为0的数组。
      • isFileTypeSupported

        public static boolean isFileTypeSupported​(AudioFileFormat.Type fileType)
        指示系统是否提供了对指定文件类型的文件写入支持。
        参数
        fileType - 查询写入功能的文件类型
        结果
        true如果文件类型是支持,否则为 false
        异常
        NullPointerException - 如果 fileTypenull
      • getAudioFileTypes

        public static AudioFileFormat.Type[] getAudioFileTypes​(AudioInputStream stream)
        从指定的音频输入流获取系统可以写入的文件类型。
        参数
        stream - 查询音频文件类型支持的音频输入流
        结果
        文件类型数组。 如果不支持文件类型,则返回长度为0的数组。
        异常
        NullPointerException - 如果 streamnull
      • isFileTypeSupported

        public static boolean isFileTypeSupported​(AudioFileFormat.Type fileType,
                                                  AudioInputStream stream)
        指示是否可以从指定的音频输入流中写入指定的文件类型的音频文件。
        参数
        fileType - 查询写入功能的文件类型
        stream - 查询文件支持的流
        结果
        true如果该音频输入流支持文件类型,否则为 false
        异常
        NullPointerException - 如果 fileTypestreamnull