- java.lang.Object
-
- javax.sound.sampled.AudioFormat
-
public class AudioFormat extends Object
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
)的方法可能会考虑属性,具体取决于相应的服务提供程序实现。下表列出了服务提供商应使用的一些常见属性(如果适用):
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
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 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(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
。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 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”。
-
-
-
字段详细信息
-
encoding
protected AudioFormat.Encoding encoding
此格式使用的音频编码技术。
-
sampleRate
protected float sampleRate
对于具有此格式的声音,每秒播放或录制的样本数。
-
sampleSizeInBits
protected int sampleSizeInBits
具有此格式的声音的每个样本中的位数。
-
channels
protected int channels
此格式的音频通道数(1表示单声道,2表示立体声)。
-
frameSize
protected int frameSize
具有此格式的声音的每帧中的字节数。
-
frameRate
protected float frameRate
对于具有此格式的声音,每秒播放或录制的帧数。
-
bigEndian
protected boolean bigEndian
指示音频数据是以big-endian还是little-endian顺序存储。
-
-
构造方法详细信息
-
AudioFormat
public AudioFormat(AudioFormat.Encoding encoding, float sampleRate, int sampleSizeInBits, int channels, int frameSize, float frameRate, boolean bigEndian)
- 参数
-
encoding
- 音频编码技术 -
sampleRate
- 每秒的样本数 -
sampleSizeInBits
- 每个样本中的位数 -
channels
- 通道数(1为单声道,2为立体声,依此类推) -
frameSize
- 每帧中的字节数 -
frameRate
- 每秒的帧数 -
bigEndian
- 指示单个样本的数据是否以big-endian字节顺序存储(false
表示little-endian)
-
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为单声道,2为立体声,依此类推) -
frameSize
- 每帧中的字节数 -
frameRate
- 每秒的帧数 -
bigEndian
- 指示单个样本的数据是否以big-endian字节顺序存储(false
表示little-endian) -
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为单声道,2为立体声,依此类推) -
signed
- 指示数据是已签名还是未签名 -
bigEndian
- 指示单个样本的数据是否以big-endian字节顺序存储(false
表示little-endian)
-
-
方法详细信息
-
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为单声道,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还是little-endian字节顺序存储。 如果样本大小不超过一个字节,则返回值无关紧要。- 结果
-
true
如果数据以big-endian字节顺序存储,false
如果是little-endian
-
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
-
-