java.lang.Object javax.sound.sampled.AudioFormat
public class AudioFormat
AudioFormat
是在声音流中指定特定数据安排的类。通过检查以音频格式存储的信息,可以发现在二进制声音数据中解释位的方式。
每个数据行都有与其数据流相关的音频格式。源(回放)数据行的音频格式指示数据行期望接收输出的数据类型。对于目标(捕获)数据行,音频格式指定可以从该行读取的数据种类。当然,声音文件也有音频格式。
类封装 AudioFileFormat
AudioFormat
以及其他特定于文件的信息。类似地,
具有 AudioInputStream
AudioFormat
。
AudioFormat
类适应多种常见声音文件编码技术,包括脉冲编码调制 (PCM)、mu-law 编码和 a-law 编码。这些编码技术是预先定义的,但服务提供者可以创建新的编码类型。特定格式使用的编码通过其 encoding
字段命名。
除编码外,音频格式还包括进一步指定具体数据安排的其他属性。这些属性包括信道数、采样速率、样本大小、字节顺序、帧速率和帧大小。声音可以有不同数量的音频信道:单声道有一个信道,立体声有两个信道。样本速率测量每信道、每秒钟采用的声压“快照”(样本)数。(如果声音是立体声,而不是单声道,则在每个瞬间实际测量两个样本:一个是左声道,另一个是右声道;不过,样本速率仍测量每个声道的数量,所以不管声道数是多少,速率都一样。这是该术语的标准用途。)样本大小指示用于存储每个快照的位数;典型值是 8 和 16。对于 16 位样本(或大于一个字节大小的任何其他样本),字节顺序很重要;每个样本中的字节要么以 "little-endian" 样式排列,要么以 "big-endian" 样式排列。对于类似 PCM 的编码,帧由在给定时间点上所有声道的样本集合组成,因此帧的大小(以字节为单位)总是等于样本大小(以字节为单位)乘以声道数。不过,使用其他种类的编码,帧可以包含整个系列样本的压缩数据包,以及其他非样本数据。对于这些编码,样本速率和样本大小在将数据解码到 PCM 之后引用该数据,所以它们与帧速率和帧大小完全不同。
AudioFormat
对象可以包括属性的集合。属性是一个键值对:键属于 String
类型,相关属性值可为任意对象。属性指定其他格式规范,如压缩格式的比特率。属性主要用作传送往返于服务提供者的其他音频格式信息的方法。因此,属性在 matches(AudioFormat)
方法中被忽略。不过,依靠已安装的服务提供者的方法(如 (AudioFormat, AudioFormat) isConversionSupported
)可以考虑使用属性,具体取决于各自的服务提供者实现。
下表列出了服务提供者应该使用的一些常见属性(如果适用):
属性键 | 值类型 | 描述 |
---|---|---|
“比特率” | Integer |
以位每秒为单位的平均比特率 |
“可变比特率” | Boolean |
如果文件采用可变比特率 (VBR) 进行编码,则为 true |
“音质” | Integer |
编码/转换质量,1 到 100 |
鼓励服务提供者(插件)的供应商寻找关于其他已经在第三方插件中建立的属性的信息,并遵循相同的约定。
DataLine.getFormat()
,
AudioInputStream.getFormat()
,
AudioFileFormat
,
FormatConversionProvider
嵌套类摘要 | |
---|---|
static class |
AudioFormat.Encoding Encoding 类命名用于音频流的数据表示形式的特定类型。 |
字段摘要 | |
---|---|
protected boolean |
bigEndian 指示是以 big-endian 顺序还是 little-endian 顺序存储音频数据。 |
protected int |
channels 使用此格式的音频信道数(单声道为 1,立体声为 2)。 |
protected AudioFormat.Encoding |
encoding 此格式使用的音频编码技术。 |
protected float |
frameRate 具有此格式的声音每秒播放和录制的帧数。 |
protected int |
frameSize 每个具有此格式的声音帧包含的字节数。 |
protected float |
sampleRate 具有此格式的声音每秒播放或录制的样本数。 |
protected int |
sampleSizeInBits 每个具有此格式的声音样本中的位数。 |
构造方法摘要 | |
---|---|
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 。 |
|
AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian) 构造具有线性 PCM 编码和给定参数的 AudioFormat 。 |
方法摘要 | |
---|---|
int |
getChannels() 获取信道数。 |
AudioFormat.Encoding |
getEncoding() 获取此格式声音的编码类型。 |
float |
getFrameRate() 获取以帧每秒为单位的帧速率。 |
int |
getFrameSize() 获取以字节为单位的帧大小。 |
Object |
getProperty(String key) 获取键指定的属性值。 |
float |
getSampleRate() 获取样本速率。 |
int |
getSampleSizeInBits() 获取样本的大小。 |
boolean |
isBigEndian() 指示是以 big-endian 顺序还是以 little-endian 顺序存储音频数据。 |
boolean |
matches(AudioFormat format) 指示此格式是否与指定格式匹配。 |
Map<String,Object> |
properties() 获取不可修改的属性映射。 |
String |
toString() 返回描述格式的字符串,如:"PCM SIGNED 22050 Hz 16 bit mono big-endian"。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
protected AudioFormat.Encoding encoding
protected float sampleRate
protected int sampleSizeInBits
protected int channels
protected int frameSize
protected float frameRate
protected boolean bigEndian
构造方法详细信息 |
---|
public AudioFormat(AudioFormat.Encoding encoding, float sampleRate, int sampleSizeInBits, int channels, int frameSize, float frameRate, boolean bigEndian)
AudioFormat
。该编码指定用于表示数据的约定。其他参数在
类描述
中进一步解释。
encoding
- 音频编码技术
sampleRate
- 每秒的样本数
sampleSizeInBits
- 每个样本中的位数
channels
- 声道数(单声道 1 个,立体声 2 个,等等)
frameSize
- 每帧中的字节数
frameRate
- 每秒的帧数
bigEndian
- 指示是否以 big-endian 字节顺序存储单个样本中的数据(
false
意味着 little-endian)。
public AudioFormat(AudioFormat.Encoding encoding, float sampleRate, int sampleSizeInBits, int channels, int frameSize, float frameRate, boolean bigEndian, Map<String,Object> properties)
AudioFormat
。该编码指定用于表示数据的约定。其他参数在
类描述
中进一步解释。
encoding
- 音频编码技术
sampleRate
- 每秒样本数
sampleSizeInBits
- 每个样本中的位数
channels
- 声道数(单声道为 1,立体声为 2,等等)
frameSize
- 每帧包含的字节数
frameRate
- 每秒帧数
bigEndian
- 指示是否以 big-endian 字节顺序存储数据(
false
意味着 little-endian)
properties
- 包含格式属性的
Map<String,Object>
对象
public AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
AudioFormat
。将帧大小设置为包含每个声道一个样本所需的字节数,将帧速率设置为样本速率。
sampleRate
- 每秒的样本数
sampleSizeInBits
- 每个样本中的位数
channels
- 声道数(单声道 1 个,立体声 2 个)
signed
- 指示数据是有符号的,还是无符号的
bigEndian
- 指示是否以 big-endian 字节顺序存储单个样本中的数据(
false
意味着 little-endian)。
方法详细信息 |
---|
public AudioFormat.Encoding getEncoding()
public float getSampleRate()
AudioSystem.isConversionSupported
)或功能(如
DataLine.Info.getFormats
)时,
AudioSystem.NOT_SPECIFIED
的样本速率意味着可以接受任何样本速率。当没有为此音频格式定义样本速率时,还会返回
AudioSystem.NOT_SPECIFIED
。
AudioSystem.NOT_SPECIFIED
getFrameRate()
,
AudioSystem.NOT_SPECIFIED
public int getSampleSizeInBits()
AudioSystem.isConversionSupported
)或功能(如
DataLine.Info.getFormats
)时,
AudioSystem.NOT_SPECIFIED
的样本大小意味着可以接受任何样本大小。当没有为此音频格式定义样本大小时,还会返回
AudioSystem.NOT_SPECIFIED
。
AudioSystem.NOT_SPECIFIED
getFrameSize()
,
AudioSystem.NOT_SPECIFIED
public int getChannels()
AudioSystem.isConversionSupported
)或功能(如
DataLine.Info.getFormats
)时,
AudioSystem.NOT_SPECIFIED
的返回值意味着可以接受任何(正)数量的信道。
AudioSystem.NOT_SPECIFIED
AudioSystem.NOT_SPECIFIED
public int getFrameSize()
AudioSystem.isConversionSupported
)或功能(如
DataLine.Info.getFormats
)时,
AudioSystem.NOT_SPECIFIED
的帧大小意味着可以接受任何帧大小。当没有为此音频格式定义帧大小时,还会返回
AudioSystem.NOT_SPECIFIED
。
AudioSystem.NOT_SPECIFIED
getSampleSizeInBits()
,
AudioSystem.NOT_SPECIFIED
public float getFrameRate()
AudioSystem.isConversionSupported
)或功能(如
DataLine.Info.getFormats
)时,
AudioSystem.NOT_SPECIFIED
的帧速率意味着可以接受任何帧速率。当没有为此音频格式定义帧速率时,还会返回
AudioSystem.NOT_SPECIFIED
。
AudioSystem.NOT_SPECIFIED
getSampleRate()
,
AudioSystem.NOT_SPECIFIED
public boolean isBigEndian()
true
;如果按 little-endian 顺序,则返回
false
public Map<String,Object> properties()
类描述
进一步解释。
Map<String,Object>
对象。如果无法识别任何属性,则返回空映射。
getProperty(String)
public Object getProperty(String key)
类描述
进一步解释。
如果指定属性不是为特定文件格式定义的,则此方法返回 null
。
key
- 所需属性的键
null
。
properties
public boolean matches(AudioFormat format)
AudioSystem.NOT_SPECIFIED
(表示任何采样速率均匹配),则这两种格式还必须具有相同的采样速率。如果指定格式的帧速率不为
AudioSystem.NOT_SPECIFIED
,则二者的帧速率必须大致相等。如果样本大小大于一个字节,则字节存储顺序(big-endian 或 little-endian)必须匹配。
format
- 要测试是否匹配的格式
true
;否则,返回
false
。
public String toString()