AudioFormat 是指定声音流中特定数据排列的类。通过检查存储在音频格式中的信息,您可以发现如何解释二进制声音数据中的位。
每条数据线都有与其数据流相关联的音频格式。源(播放)数据线的音频格式表示数据线期望接收何种数据输出。对于目标(捕获)数据线,音频格式指定可以从该线读取的数据类型。
当然,声音文件也有音频格式。 AudioFileFormat 类封装了一个 AudioFormat 以及其他特定于文件的信息。同样,AudioInputStream 有一个 AudioFormat。
AudioFormat 类包含许多常见的声音文件编码技术,包括脉冲编码调制 (PCM)、mu-law 编码和 a-law 编码。这些编码技术是预定义的,但服务提供商可以创建新的编码类型。特定格式使用的编码由其 encoding 字段命名。
除了编码之外,音频格式还包括其他属性,这些属性进一步指定了数据的确切排列。这些包括通道数、采样率、样本大小、字节顺序、帧速率和帧大小。声音可能有不同数量的音频通道:一个用于单声道,两个用于立体声。采样率测量每个通道每秒拍摄多少声压“快照”(样本)。 (如果声音是立体声而不是单声道,则实际上在每个瞬间测量两个样本:一个用于左声道,另一个用于右声道;但是,采样率仍然测量每个声道的数量,因此速率为无论通道数量如何,都相同。这是该术语的标准用法。)样本大小表示用于存储每个快照的位数; 8 和 16 是典型值。对于 16 位样本(或任何其他大于一个字节的样本大小),字节顺序很重要;每个样本中的字节以“小端”或“大端”样式排列。对于像 PCM 这样的编码,帧由给定时间点所有通道的样本集组成,因此帧的大小(以字节为单位)始终等于样本大小(以字节为单位)乘以数字渠道。然而,对于一些其他类型的编码,一个帧可以包含一束用于整个样本系列的压缩数据,以及额外的非样本数据。对于此类编码,采样率和样本大小是指解码为PCM后的数据,因此它们与帧率和帧大小完全不同。
AudioFormat 对象可以包含一组属性。属性是一对键和值:键是 String 类型,关联的属性值是任意对象。属性指定额外的格式规范,如压缩格式的比特率。属性主要用作在服务提供商之间传输音频格式的附加信息的手段。因此,属性在 matches(AudioFormat) 方法中被忽略。但是,依赖于已安装服务提供者的方法,如 (AudioFormat, AudioFormat) isConversionSupported 可能会考虑属性,具体取决于各自的服务提供者实现。
下表列出了服务提供者应使用的一些常见属性(如果适用):
| 属性键 | 值类型 | Description |
|---|---|---|
| “比特率” | Integer |
以比特每秒为单位的平均比特率 |
| “vbr” | Boolean |
true ,如果文件以可变比特率 (VBR) 编码 |
| “质量” | Integer |
编码/转换质量,1..100 |
鼓励服务提供者(插件)的供应商在第三方插件中寻找有关其他已建立属性的信息,并遵循相同的约定。
- 自从:
- 1.3
- 参见:
-
内部类总结
内部类 -
字段摘要
字段修饰符和类型Field描述protected boolean指示音频数据是以大端还是小端顺序存储的。protected int此格式的音频通道数(1 个用于单声道,2 个用于立体声)。protected AudioFormat.Encoding此格式使用的音频编码技术。protected float对于具有此格式的声音,每秒播放或录制的帧数。protected int具有此格式的声音的每个帧中的字节数。protected float对于具有此格式的声音,每秒播放或录制的样本数。protected int具有此格式的声音的每个样本中的位数。 -
构造方法总结
构造方法构造方法描述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获取通道数。获得此格式声音的编码类型。float获取以每秒帧数为单位的帧速率。int获取以字节为单位的帧大小。getProperty(String key) 获取键指定的属性值。float获取采样率。int获取样本的大小。boolean指示音频数据是以大端还是小端字节顺序存储的。booleanmatches(AudioFormat format) 指示此格式是否与指定格式匹配。获取不可修改的属性映射。toString()返回描述音频格式的字符串,例如:“PCM SIGNED 22050 Hz 16 位单声道大端”。
-
字段详细信息
-
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指示音频数据是以大端还是小端顺序存储的。
-
-
构造方法详细信息
-
AudioFormat
public AudioFormat(AudioFormat.Encoding encoding, float sampleRate, int sampleSizeInBits, int channels, int frameSize, float frameRate, boolean bigEndian) 使用给定的参数构造一个AudioFormat。编码指定用于表示数据的约定。class description中进一步解释了其他参数。- 参数:
encoding- 音频编码技术sampleRate- 每秒样本数sampleSizeInBits- 每个样本中的位数channels- 通道数(1 个用于单声道,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) 使用给定的参数构造一个AudioFormat。编码指定用于表示数据的约定。class description中进一步解释了其他参数。- 参数:
encoding- 音频编码技术sampleRate- 每秒样本数sampleSizeInBits- 每个样本中的位数channels- 通道数(1 个用于单声道,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 个用于单声道,2 个用于立体声,依此类推)signed- 表示数据是有符号的还是无符号的bigEndian- 指示单个样本的数据是否以大端字节顺序存储(false表示小端)
-
-
方法详情
-
getEncoding
获得此格式声音的编码类型。- 返回:
- 编码类型
- 参见:
-
getSampleRate
public float getSampleRate()获取采样率。对于压缩格式,返回值是未压缩音频数据的采样率。当此AudioFormat用于查询(例如AudioSystem.isConversionSupported)或功能(例如DataLine.Info.getFormats)时,AudioSystem.NOT_SPECIFIED的采样率意味着任何采样率都是可接受的。当未为此音频格式定义采样率时,也会返回AudioSystem.NOT_SPECIFIED。- 返回:
-
每秒样本数,或
AudioSystem.NOT_SPECIFIED - 参见:
-
getSampleSizeInBits
public int getSampleSizeInBits()获取样本的大小。对于压缩格式,返回值是未压缩音频数据的样本大小。当此AudioFormat用于查询(例如AudioSystem.isConversionSupported)或功能(例如DataLine.Info.getFormats)时,AudioSystem.NOT_SPECIFIED的样本大小意味着任何样本大小都是可接受的。当未为此音频格式定义样本大小时,也会返回AudioSystem.NOT_SPECIFIED。- 返回:
-
每个样本中的位数,或
AudioSystem.NOT_SPECIFIED - 参见:
-
getChannels
public int getChannels()获取通道数。当此AudioFormat用于查询(例如AudioSystem.isConversionSupported)或功能(例如DataLine.Info.getFormats)时,AudioSystem.NOT_SPECIFIED的返回值意味着任何(正)通道数都是可接受的。- 返回:
-
通道数(1 个用于单声道,2 个用于立体声等),或
AudioSystem.NOT_SPECIFIED - 参见:
-
getFrameSize
public int getFrameSize()获取以字节为单位的帧大小。当此AudioFormat用于查询(例如AudioSystem.isConversionSupported)或功能(例如DataLine.Info.getFormats)时,AudioSystem.NOT_SPECIFIED的帧大小意味着任何帧大小都是可接受的。当未为此音频格式定义帧大小时,也会返回AudioSystem.NOT_SPECIFIED。- 返回:
-
每帧的字节数,或
AudioSystem.NOT_SPECIFIED - 参见:
-
getFrameRate
public float getFrameRate()获取以每秒帧数为单位的帧速率。当此AudioFormat用于查询(例如AudioSystem.isConversionSupported)或功能(例如DataLine.Info.getFormats)时,AudioSystem.NOT_SPECIFIED的帧速率意味着任何帧速率都是可接受的。当未为此音频格式定义帧速率时,也会返回AudioSystem.NOT_SPECIFIED。- 返回:
-
每秒帧数,或
AudioSystem.NOT_SPECIFIED - 参见:
-
isBigEndian
public boolean isBigEndian()指示音频数据是以大端还是小端字节顺序存储的。如果样本大小不超过一个字节,则返回值无关紧要。- 返回:
true如果数据以大端字节顺序存储,false如果是小端字节序
-
properties
获取不可修改的属性映射。class description中进一步解释了属性的概念。- 返回:
-
包含所有属性的
Map<String, Object>对象。如果未识别出任何属性,则返回一个空map。 - 自从:
- 1.5
- 参见:
-
getProperty
获取键指定的属性值。class description中进一步解释了属性的概念。如果没有为特定文件格式定义指定的属性,则此方法返回
null。- 参数:
key- 所需属性的键- 返回:
-
具有指定键的属性的值,如果属性不存在则返回
null - 自从:
- 1.5
- 参见:
-
matches
指示此格式是否与指定格式匹配。要匹配,两种格式必须具有相同的编码,并且通道数、采样率、样本大小、帧率和帧大小的值必须一致。如果属性值相等或指定格式具有属性值AudioSystem.NOT_SPECIFIED,则属性值是一致的。如果样本大小大于一个字节,字节顺序(大端或小端)必须相同。- 参数:
format- 测试匹配的格式- 返回:
true如果此格式与指定格式匹配,false否则
-
toString
返回描述音频格式的字符串,例如:“PCM SIGNED 22050 Hz 16 位单声道大端”。字符串的内容可能因 Java Sound 的实现而异。
-