- java.lang.Object
-
- javax.sound.sampled.AudioFormat
-
public class AudioFormat extends Object
AudioFormat
是指定声音流中数据的特定排列的类。 通过检查以音频格式存储的信息,您可以发现如何解释二进制声音数据中的位。每个数据线都具有与其数据流相关联的音频格式。 源(播放)数据线的音频格式表示数据线期望接收哪种类型的数据输出。 对于目标(捕获)数据线,音频格式指定可以从该行读取的数据的种类。 当然,声音文件也有音频格式。
AudioFileFormat
类除了其他特定于文件的信息AudioFormat
,还封装了一个AudioFormat
。 同样,一个AudioInputStream
有一个AudioFormat
。AudioFormat
类容纳了许多常见的声音文件编码技术,包括脉码调制(PCM),μ律编码和法律编码。 这些编码技术是预定义的,但服务提供商可以创建新的编码类型。 特定格式使用的编码由其encoding
字段命名。除了编码之外,音频格式还包括进一步指定数据的精确排列的其他属性。 这些包括通道数,采样率,采样大小,字节顺序,帧速率和帧大小。 声音可能具有不同数量的音频通道:一个用于单声道,另一个用于立体声。 采样率测量每个通道每秒拍摄多少个“快照”(采样)声压。 (如果声音是立体声而不是单声道,则在每个时刻实际测量两个样本:一个用于左声道,另一个用于右声道;但是,采样率仍然测量每个通道的数量,因此速率为不管通道数量如何,这是术语的标准用法。)样本大小表示用于存储每个快照的位数; 8和16是典型值。 对于16位样本(或大于一个字节的任何其他样本大小),字节顺序很重要; 每个样本中的字节都以“little-endian”或“big-endian”的形式排列。 对于像PCM这样的编码,帧由给定时间点的所有通道的采样集合组成,因此帧的大小(以字节为单位)总是等于采样的大小(以字节为单位)乘以数字的渠道。 然而,使用一些其他类型的编码,帧可以包含用于整个系列样本的一组压缩数据,以及附加的非样本数据。 对于这样的编码,采样率和采样大小是指在将其解码成PCM之后的数据,因此它们与帧速率和帧大小完全不同。
一个
AudioFormat
对象可以包括一组属性。 属性是一对键和值:键的类型为String
,相关联的属性值是任意对象。 属性指定其他格式规范,如压缩格式的比特率。 属性主要用作将音频格式的附加信息传送到服务提供商和从服务提供商传输的一种手段。 因此,matches(AudioFormat)
方法中的属性将被忽略。 然而,依赖于已安装的服务提供商的方法,如(AudioFormat, AudioFormat) isConversionSupported
可能会考虑属性,具体取决于相应的服务提供商实现。下表列出了服务提供商应使用的一些常见属性(如果适用):
Audio Format Properties Property key Value type Description "bitrate"Integer
average bit rate in bits per second "vbr"Boolean
true
, if the file is encoded in variable bit rate (VBR) "quality"Integer
encoding/conversion quality, 1..100鼓励服务供应商(插件)的供应商在第三方插件中查找有关其他已建立的属性的信息,并遵循相同的约定。
- 从以下版本开始:
- 1.3
- 另请参见:
-
DataLine.getFormat()
,AudioInputStream.getFormat()
,AudioFileFormat
,FormatConversionProvider
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static class
AudioFormat.Encoding
Encoding
类命名用于音频流的特定数据表示类型。
-
Field Summary
Fields Modifier and Type Field 描述 protected boolean
bigEndian
指示音频数据是以big-endian还是小端序存储。protected int
channels
这种格式的音频通道的数量(1为mono,2为立体声)。protected AudioFormat.Encoding
encoding
这种格式使用的音频编码技术。protected float
frameRate
每秒播放或录制的帧数,具有这种格式的声音。protected int
frameSize
具有此格式的声音每帧中的字节数。protected float
sampleRate
每秒播放或录制的样本数,具有这种格式的声音。protected int
sampleSizeInBits
具有此格式的声音的每个样本中的位数。
-
构造方法摘要
构造方法 Constructor 描述 AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
构造具有线性PCM编码和给定参数的AudioFormat
。AudioFormat(AudioFormat.Encoding encoding, float sampleRate, int sampleSizeInBits, int channels, int frameSize, float frameRate, boolean bigEndian)
构造具有给定参数的AudioFormat
。AudioFormat(AudioFormat.Encoding encoding, float sampleRate, int sampleSizeInBits, int channels, int frameSize, float frameRate, boolean bigEndian, Map<String,Object> properties)
构造具有给定参数的AudioFormat
。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 int
getChannels()
获取频道数量。AudioFormat.Encoding
getEncoding()
获取此格式的声音编码类型。float
getFrameRate()
以帧/秒获取帧速率。int
getFrameSize()
以字节获取帧大小。Object
getProperty(String key)
获取由密钥指定的属性值。float
getSampleRate()
获取采样率。int
getSampleSizeInBits()
获取样本的大小。boolean
isBigEndian()
指示音频数据是以big-endian还是小端字节顺序存储。boolean
matches(AudioFormat format)
指示此格式是否与指定的格式相匹配。Map<String,Object>
properties()
获取不可修改的属性地图。String
toString()
返回描述格式的字符串,如:“PCM SIGNED 22050 Hz 16 bit mono big-endian”。
-
-
-
字段详细信息
-
encoding
protected AudioFormat.Encoding encoding
这种格式使用的音频编码技术。
-
sampleRate
protected float sampleRate
每秒播放或录制的样本数,具有这种格式的声音。
-
sampleSizeInBits
protected int sampleSizeInBits
具有此格式的声音的每个样本中的位数。
-
channels
protected int channels
这种格式的音频通道的数量(1为mono,2为立体声)。
-
frameSize
protected int frameSize
具有此格式的声音每帧中的字节数。
-
frameRate
protected float frameRate
每秒播放或录制的帧数,具有这种格式的声音。
-
bigEndian
protected boolean bigEndian
指示音频数据是以big-endian还是小端序存储。
-
-
构造方法详细信息
-
AudioFormat
public AudioFormat(AudioFormat.Encoding encoding, float sampleRate, int sampleSizeInBits, int channels, int frameSize, float frameRate, boolean bigEndian)
- 参数
-
encoding
- 音频编码技术 -
sampleRate
- 每秒样品数 -
sampleSizeInBits
- 每个样本中的位数 -
channels
- 通道数(1为mono,2为立体声等) -
frameSize
- 每个帧中的字节数 -
frameRate
- 每秒的帧数 -
bigEndian
- 指示单个样本的数据是否以大字节顺序存储(false
表示小端)
-
AudioFormat
public AudioFormat(AudioFormat.Encoding encoding, float sampleRate, int sampleSizeInBits, int channels, int frameSize, float frameRate, boolean bigEndian, Map<String,Object> properties)
- 参数
-
encoding
- 音频编码技术 -
sampleRate
- 每秒采样数 -
sampleSizeInBits
- 每个样本中的位数 -
channels
- 通道数(1为mono,2为立体声等) -
frameSize
- 每个帧中的字节数 -
frameRate
- 每秒的帧数 -
bigEndian
- 指示单个样本的数据是否以大字节顺序存储(false
表示小端) -
properties
- 包含格式属性的Map<String, Object>
对象 - 从以下版本开始:
- 1.5
-
AudioFormat
public AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
构造具有线性PCM编码的AudioFormat
和给定参数。 帧大小设置为从每个通道包含一个采样所需的字节数,并将帧速率设置为采样率。- 参数
-
sampleRate
- 每秒采样数 -
sampleSizeInBits
- 每个样本中的位数 -
channels
- 通道数(1为mono,2为立体声等) -
signed
- 指示数据是签名还是无符号 -
bigEndian
- 表示单个样本的数据是否以大字节顺序存储(false
表示小尾数)
-
-
方法详细信息
-
getEncoding
public AudioFormat.Encoding getEncoding()
获取此格式的声音编码类型。
-
getSampleRate
public float getSampleRate()
获取采样率。 对于压缩格式,返回值是未压缩音频数据的采样率。 当AudioFormat用于查询(例如AudioSystem.isConversionSupported
)或功能(例如DataLine.Info.getFormats
)时,采样率为AudioSystem.NOT_SPECIFIED
表示任何采样率均可接受。 当未为此音频格式定义采样率时,也会返回AudioSystem.NOT_SPECIFIED
。- 结果
-
每秒采样数,或
AudioSystem.NOT_SPECIFIED
- 另请参见:
-
getFrameRate()
,AudioSystem.NOT_SPECIFIED
-
getSampleSizeInBits
public int getSampleSizeInBits()
获取样本的大小。 对于压缩格式,返回值是未压缩音频数据的样本大小。 当此AudioFormat的用于查询(例如AudioSystem.isConversionSupported
)或能力(例如DataLine.Info.getFormats
),样品大小AudioSystem.NOT_SPECIFIED
意味着任何样本尺寸是可接受的。 当样本大小未为此音频格式定义时,也会返回AudioSystem.NOT_SPECIFIED
。- 结果
-
每个样本中的位数,或
AudioSystem.NOT_SPECIFIED
- 另请参见:
-
getFrameSize()
,AudioSystem.NOT_SPECIFIED
-
getChannels
public int getChannels()
获取频道数量。 当AudioFormat用于查询(例如AudioSystem.isConversionSupported
)或功能(例如DataLine.Info.getFormats
)时,返回值为AudioSystem.NOT_SPECIFIED
表示任何(正)数量的通道是可以接受的。- 结果
-
通道数(1为mono,2为立体声等),或
AudioSystem.NOT_SPECIFIED
- 另请参见:
-
AudioSystem.NOT_SPECIFIED
-
getFrameSize
public int getFrameSize()
以字节获取帧大小。 当AudioFormat用于查询(例如AudioSystem.isConversionSupported
)或功能(例如DataLine.Info.getFormats
)时,帧大小为AudioSystem.NOT_SPECIFIED
表示任何帧大小都可以接受。 当没有为此音频格式定义帧大小时,也会返回AudioSystem.NOT_SPECIFIED
。- 结果
-
每帧的字节数,或
AudioSystem.NOT_SPECIFIED
- 另请参见:
-
getSampleSizeInBits()
,AudioSystem.NOT_SPECIFIED
-
getFrameRate
public float getFrameRate()
以帧/秒获取帧速率。 当AudioFormat用于查询(例如AudioSystem.isConversionSupported
)或功能(例如DataLine.Info.getFormats
)时,帧速率为AudioSystem.NOT_SPECIFIED
表示任何帧速率均可接受。 当没有为此音频格式定义帧速率时,也会返回AudioSystem.NOT_SPECIFIED
。- 结果
-
每秒的帧数,或
AudioSystem.NOT_SPECIFIED
- 另请参见:
-
getSampleRate()
,AudioSystem.NOT_SPECIFIED
-
isBigEndian
public boolean isBigEndian()
指示音频数据是以big-endian还是小端字节顺序存储。 如果样本大小不超过一个字节,返回值是无关紧要的。- 结果
-
true
如果数据以big-endian字节顺序存储,false
如果是小端
-
properties
public Map<String,Object> properties()
获取不可修改的属性地图。 在class description
中进一步解释了属性的概念。- 结果
-
一个包含所有属性的
Map<String, Object>
对象。 如果没有属性被识别,则返回空的地图。 - 从以下版本开始:
- 1.5
- 另请参见:
-
getProperty(String)
-
getProperty
public Object getProperty(String key)
- 参数
-
key
- 所需属性的关键 - 结果
-
具有指定键的属性的值,如果属性不存在,
null
- 从以下版本开始:
- 1.5
- 另请参见:
-
properties()
-
matches
public boolean matches(AudioFormat format)
指示此格式是否与指定的格式相匹配。 要匹配,两种格式必须具有相同的编码,以及通道数,采样率,采样大小,帧速率和帧大小的一致值。 如果属性的值相等或指定的格式具有属性值AudioSystem.NOT_SPECIFIED
,属性的值是AudioSystem.NOT_SPECIFIED
。 如果样本大小大于一个字节,字节顺序(big-endian或little-endian)必须相同。- 参数
-
format
- 测试匹配的格式 - 结果
-
true
如果此格式与指定的格式匹配,false
-
-