javax.sound.sampled

接口
异常
java.lang.Object
  继承者 javax.sound.sampled.AudioSystem

public class AudioSystem
     
extends Object

AudioSystem 类充当取样音频系统资源的入口点。此类允许查询和访问安装在系统上的混频器。AudioSystem 包括许多在不同格式间转换音频数据的方法,以及在音频文件和流之间进行转换的方法。它还提供不用显式处理混频器即可直接从 AudioSystem 获得 Line 的方法。

属性可用于指定特定行类型的默认混频器。系统属性和属性文件都要考虑。在 Sun 引用实现中,属性文件是 JRE 目录中的 "lib/sound.properties"。如果存在作为系统属性的属性并且存在于属性文件中,则优先使用系统属性。如果未指定任何属性,则在可用的设备中选择适当的默认值。属性文件的语法在 Properties.load 中指定。下表列出了可用的属性键和获得它们的方法:

属性键 接口 起作用的方法
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 类的完全限定名。混频器名称是与由 Mixer.InfogetName 方法返回的 String 匹配。可以省略类名称或混频器名称。如果只指定类名称,则尾部哈希标记是可选的。

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

如果指定了混频器名称,则搜索所产生的 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,不管名称如何。如果不存在,则返回所有混频器(由 getMixerInfo 返回)列表中具有名称 "SunClip" 的第一个 Mixer 中的第一个 Clip;或者,如果这个也找不到,则返回可以从所有混频器列表中找到的第一个 Mixer 的第一个 Clip。如果还是失败,则抛出 IllegalArgumentException

从以下版本开始:
1.3
另请参见:
AudioFormat, AudioInputStream, Mixer, Line, Line.Info

字段摘要
static int NOT_SPECIFIED
          代表未知数字值的整数。
 
方法摘要
static AudioFileFormat getAudioFileFormat(File file)
          获得指定 File 的音频文件格式。
static AudioFileFormat getAudioFileFormat(InputStream stream)
          获得提供的音频输入流的音频文件格式。
static AudioFileFormat getAudioFileFormat(URL url)
          获得指定 URL 的音频文件格式。
static AudioFileFormat.Type[] getAudioFileTypes()
          获得由系统为其提供文件写入支持的文件类型。
static AudioFileFormat.Type[] getAudioFileTypes(AudioInputStream stream)
          获得系统可从指定音频输入流写入的文件类型。
static AudioInputStream getAudioInputStream(AudioFormat.Encoding targetEncoding, AudioInputStream sourceStream)
          通过转换提供的音频输入流,获得所指示编码的音频输入流。
static AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInputStream sourceStream)
          通过转换提供的音频输入流,获得所指示格式的音频输入流。
static AudioInputStream getAudioInputStream(File file)
          从提供的 File 获得音频输入流。
static AudioInputStream getAudioInputStream(InputStream stream)
          从提供的输入流获得音频输入流。
static AudioInputStream getAudioInputStream(URL url)
          从提供的 URL 获得音频输入流。
static Clip getClip()
          获得可用于回放音频文件或音频流的剪辑。
static Clip getClip(Mixer.Info mixerInfo)
          从指定混频器获得可用于回放音频文件或音频流的剪辑。
static Line getLine(Line.Info info)
          获得与指定 Line.Info 对象中的描述匹配的行。
static Mixer getMixer(Mixer.Info info)
          获得请求的音频混频器。
static Mixer.Info[] getMixerInfo()
          获得混频器信息对象的数组,该数组表示当前安装在系统上的音频混频器的集合。
static SourceDataLine getSourceDataLine(AudioFormat format)
          获得一个源数据行,该行可用于以 AudioFormat 对象指定的格式回放音频数据。
static SourceDataLine getSourceDataLine(AudioFormat format, Mixer.Info mixerinfo)
          获得一个源数据行,该行可用于以 AudioFormat 对象(通过由 Mixer.Info 对象指定的混频器提供)指定的格式回放音频数据。
static Line.Info[] getSourceLineInfo(Line.Info info)
          获得关于已安装混频器所支持特定类型的全部源行的信息。
static TargetDataLine getTargetDataLine(AudioFormat format)
          获得一个目标数据行,该行可用于以 AudioFormat 对象指定的格式记录音频数据。
static TargetDataLine getTargetDataLine(AudioFormat format, Mixer.Info mixerinfo)
          获得一个目标数据行,该可用于以 AudioFormat 对象(该对象通过由 Mixer.Info 对象指定的混频器提供)指定的格式记录音频数据。
static AudioFormat.Encoding[] getTargetEncodings(AudioFormat.Encoding sourceEncoding)
          使用已安装的格式转换器集合获得系统可以从具有指定编码的音频输入流中获得的编码。
static AudioFormat.Encoding[] getTargetEncodings(AudioFormat sourceFormat)
          使用已安装的格式转换器集合,获得系统可以从具有指定格式的音频输入流中获得的编码。
static AudioFormat[] getTargetFormats(AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat)
          使用已安装的格式转换器,获得具有特定编码的格式,以及系统可以从指定格式的流中获得的格式。
static Line.Info[] getTargetLineInfo(Line.Info info)
          获得关于已安装混频器所支持特定类型的全部目标行的信息。
static boolean isConversionSupported(AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat)
          指示是否可以从具有指定格式的音频输入流获得指定编码的音频输入流。
static boolean isConversionSupported(AudioFormat targetFormat, AudioFormat sourceFormat)
          指示是否可从另一指定格式的音频输入流获得指定格式的音频输入流。
static boolean isFileTypeSupported(AudioFileFormat.Type fileType)
          指示系统是否提供指定文件类型的文件写入支持。
static boolean isFileTypeSupported(AudioFileFormat.Type fileType, AudioInputStream stream)
          指示是否可以从指示的音频输入流写入指定文件类型的音频文件。
static boolean isLineSupported(Line.Info info)
          指示系统是否支持与指定 Line.Info 对象匹配的行。
static int write(AudioInputStream stream, AudioFileFormat.Type fileType, File out)
          将表示指定文件类型的音频文件的字节流写入所提供的外部文件。
static int write(AudioInputStream stream, AudioFileFormat.Type fileType, OutputStream out)
          将表示指定文件类型的音频文件的字节流写入所提供的输出流。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

NOT_SPECIFIED

public static final int NOT_SPECIFIED
代表未知数字值的整数。此值只适用于通常不采用负值的有符号的量。示例包括文件大小、帧大小、缓冲区大小和样本速率。许多 Java Sound 构造方法接受这些参数的 NOT_SPECIFIED 值。据文档记录,其他方法可能也接受或返回此值。

另请参见:
常量字段值
方法详细信息

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,且 infoDataLine.Info 的实例(至少指定一种完全限定的音频格式),则上一个数据行将用作返回的 DataLine 的默认格式。

如果定义了系统属性 javax.sound.sampled.Clipjavax.sound.sampled.Portjavax.sound.sampled.SourceDataLinejavax.sound.sampled.TargetDataLine,或在文件 "sound.properties" 中定义它们,则使用它们检索默认行。有关详细信息,请参阅类描述。 如果未设置相应属性,或尚未安装属性中请求的混频器,或不提供请求的行,则在所有安装的混频器中查询请求的行类型。从提供请求的行类型的第一个混频器中返回行。

参数:
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" 中定义了它,则使用它检索默认剪辑。有关详细信息,请参阅类描述

返回:
所需的剪辑对象
抛出:
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" 中定义了它,则使用它检索默认的源数据行。有关详细信息,请参阅类描述

参数:
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 进行初始化。

参数:
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 进行初始化。

如果定义了系统属性 javax.sound.sampled.TargetDataLine,或在文件 "sound.properties" 中定义了它,则使用它检索默认的源数据行。有关详细信息,请参阅类描述

参数:
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(不转换)。

getTargetEncodings

public static AudioFormat.Encoding[] getTargetEncodings(AudioFormat sourceFormat)
使用已安装的格式转换器集合,获得系统可以从具有指定格式的音频输入流中获得的编码。

参数:
sourceFormat - 查询其转换的音频格式
返回:
编码的数组。如果不支持 sourceFormat,则返回长度为 0 的数组。否则,数组长度将至少为 1,表示 sourceFormat 的编码(不转换)。

isConversionSupported

public static boolean isConversionSupported(AudioFormat.Encoding targetEncoding,
                                            AudioFormat sourceFormat)
指示是否可以从具有指定格式的音频输入流获得指定编码的音频输入流。

参数:
targetEncoding - 转换后所需的编码
sourceFormat - 转换前的音频格式
返回:
如果支持转换,则返回 true;否则返回 false

getAudioInputStream

public static AudioInputStream getAudioInputStream(AudioFormat.Encoding targetEncoding,
                                                   AudioInputStream sourceStream)
通过转换提供的音频输入流,获得所指示编码的音频输入流。

参数:
targetEncoding - 转换后所需的编码
sourceStream - 要转换的流
返回:
所指示编码的音频输入流
抛出:
IllegalArgumentException - 如果不支持转换
另请参见:
getTargetEncodings(AudioFormat.Encoding), getTargetEncodings(AudioFormat), isConversionSupported(AudioFormat.Encoding, AudioFormat), getAudioInputStream(AudioFormat, AudioInputStream)

getTargetFormats

public static AudioFormat[] getTargetFormats(AudioFormat.Encoding targetEncoding,
                                             AudioFormat sourceFormat)
使用已安装的格式转换器,获得具有特定编码的格式,以及系统可以从指定格式的流中获得的格式。

参数:
targetE