javax.sound.sampled

接口
异常
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)可以考虑使用属性,具体取决于各自的服务提供者实现。

下表列出了服务提供者应该使用的一些常见属性(如果适用):

属性键 值类型 描述
“比特率” Integer 以位每秒为单位的平均比特率
“可变比特率” Boolean 如果文件采用可变比特率 (VBR) 进行编码,则为 true
“音质” Integer 编码/转换质量,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(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
 

字段详细信息

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)
构造具有给定参数的 AudioFormat。该编码指定用于表示数据的约定。其他参数在 类描述中进一步解释。

参数:
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)
构造具有给定参数的 AudioFormat。该编码指定用于表示数据的约定。其他参数在 类描述中进一步解释。

参数:
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()
获取此格式声音的编码类型。

返回:
编码类型
另请参见:
AudioFormat.Encoding.PCM_SIGNED, AudioFormat.Encoding.PCM_UNSIGNED, AudioFormat.Encoding.ULAW, AudioFormat.Encoding.ALAW

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 顺序存储音频数据。如果样本大小不超过一个字节,则返回值没有实际意义。

返回:
如果按 big-endian 字节顺序存储数据,则返回 true;如果按 little-endian 顺序,则返回 false

properties

public Map<String,Object> properties()
获取不可修改的属性映射。属性的概念在 类描述进一步解释。

返回:
包含所有属性的 Map<String,Object> 对象。如果无法识别任何属性,则返回空映射。
从以下版本开始:
1.5
另请参见:
getProperty(String)

getProperty

public Object getProperty(String key)
获取键指定的属性值。属性的概念在 类描述进一步解释。

如果指定属性不是为特定文件格式定义的,则此方法返回 null

参数:
key - 所需属性的键
返回:
具有指定键的属性值;如果属性不存在,则返回 null
从以下版本开始:
1.5
另请参见:
properties

matches

public boolean matches(AudioFormat format)
指示此格式是否与指定格式匹配。所谓匹配是指两种格式的编码、信道数、每个样本的位数以及每帧包含的字节数均必须相同。如果指定格式的采样速率值不为 AudioSystem.NOT_SPECIFIED(表示任何采样速率均匹配),则这两种格式还必须具有相同的采样速率。如果指定格式的帧速率不为 AudioSystem.NOT_SPECIFIED,则二者的帧速率必须大致相等。如果样本大小大于一个字节,则字节存储顺序(big-endian 或 little-endian)必须匹配。

参数:
format - 要测试是否匹配的格式
返回:
如果此格式与指定格式匹配,则返回 true;否则,返回 false

toString

public String toString()
返回描述格式的字符串,如:"PCM SIGNED 22050 Hz 16 bit mono big-endian"。字符串的内容可能会因 Java Sound 实现的不同而不同。

覆盖:
Object 中的 toString
返回:
描述格式参数的字符串