public class AudioFormat extends Object
AudioFormat
是指定声音流中数据的特定排列的类。
通过检查以音频格式存储的信息,您可以发现如何解释二进制声音数据中的位。
每个数据线都具有与其数据流相关联的音频格式。 源(播放)数据线的音频格式表示数据线期望接收哪种类型的数据输出。 对于目标(捕获)数据线,音频格式指定可以从该行读取的数据的种类。 当然,声音文件也有音频格式。 除了其他特定于文件的信息外, AudioFormat
还封装了一个
类。 同样, AudioFileFormat
有一个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
鼓励服务供应商(插件)的供应商在第三方插件中查找有关其他已建立的属性的信息,并遵循相同的约定。
DataLine.getFormat()
, AudioInputStream.getFormat()
, AudioFileFormat
, FormatConversionProvider
Modifier and Type | Class and Description |
---|---|
static class |
AudioFormat.Encoding
Encoding 类命名用于音频流的特定数据表示类型。
|
Modifier and Type | Field and Description |
---|---|
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 and Description |
---|
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)
构造一个
AudioFormat 用线性PCM编码和给定的参数。
|
Modifier and Type | Method and Description |
---|---|
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”。
|
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)
encoding
- 音频编码技术
sampleRate
- 每秒采样数
sampleSizeInBits
- 每个样本中的位数
channels
- 通道数(1为mono,2为立体声等)
frameSize
- 每个帧中的字节数
frameRate
- 每秒的帧数
bigEndian
- 指示单个样本的数据是否以大字节顺序存储(
false
表示小尾数)
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>
对象
public AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
AudioFormat
用线性PCM编码和给定的参数。
帧大小设置为从每个通道包含一个采样所需的字节数,并将帧速率设置为采样率。
sampleRate
- 每秒样品数
sampleSizeInBits
- 每个样本中的位数
channels
- 通道数(1为mono,2为立体声等)
signed
- 表示数据是签名还是无符号
bigEndian
- 指示单个样本的数据是否以大字节顺序存储(
false
表示小端)
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
如果数据以big-endian字节顺序存储,
false
如果是小端
public Map<String,Object> properties()
class description
中进一步解释 。
Map<String,Object>
所有属性的Map<String,Object>
对象。
如果没有属性被识别,则返回空的地图。
getProperty(String)
public Object getProperty(String key)
key
- 所需属性的关键
null
。
properties()
public boolean matches(AudioFormat format)
AudioSystem.NOT_SPECIFIED
则该属性的值是AudioSystem.NOT_SPECIFIED
。
如果样本大小大于一个字节,则字节顺序(big-endian或little-endian)必须相同。
format
- 测试匹配的格式
true
如果此格式与指定的格式匹配,
false
false。