模块 java.desktop

类 AudioFormat

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 位样本(或任何其他大于一个字节的样本大小),字节顺序很重要;每个样本中的字节以“小端”或“大端”样式排列。对于像 PCM 这样的编码,帧由给定时间点所有通道的样本集组成,因此帧的大小(以字节为单位)始终等于样本大小(以字节为单位)乘以数字渠道。然而,对于一些其他类型的编码,一个帧可以包含一束用于整个样本系列的压缩数据,以及额外的非样本数据。对于此类编码,采样率和样本大小是指解码为PCM后的数据,因此它们与帧率和帧大小完全不同。

AudioFormat 对象可以包含一组属性。属性是一对键和值:键是 String 类型,关联的属性值是任意对象。属性指定额外的格式规范,如压缩格式的比特率。属性主要用作在服务提供商之间传输音频格式的附加信息的手段。因此,属性在 matches(AudioFormat) 方法中被忽略。但是,依赖于已安装服务提供者的方法,如 (AudioFormat, AudioFormat) isConversionSupported 可能会考虑属性,具体取决于各自的服务提供者实现。

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

音频格式属性
属性键 值类型 Description
“比特率” Integer 以比特每秒为单位的平均比特率
“vbr” Boolean true ,如果文件以可变比特率 (VBR) 编码
“质量” Integer 编码/转换质量,1..100

鼓励服务提供者(插件)的供应商在第三方插件中寻找有关其他已建立属性的信息,并遵循相同的约定。

自从:
1.3
参见:
  • 内部类总结

    内部类
    修饰符和类型
    描述
    static class 
    Encoding 类命名用于音频流的特定数据表示类型。
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    protected boolean
    指示音频数据是以大端还是小端顺序存储的。
    protected int
    此格式的音频通道数(1 个用于单声道,2 个用于立体声)。
    此格式使用的音频编码技术。
    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
    获取以字节为单位的帧大小。
    获取键指定的属性值。
    float
    获取采样率。
    int
    获取样本的大小。
    boolean
    指示音频数据是以大端还是小端字节顺序存储的。
    boolean
    指示此格式是否与指定格式匹配。
    获取不可修改的属性映射。
    返回描述音频格式的字符串,例如:“PCM SIGNED 22050 Hz 16 位单声道大端”。

    在类 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
      指示音频数据是以大端还是小端顺序存储的。
  • 构造方法详细信息

    • 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

      public AudioFormat.Encoding  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

      public Map <String ,Object > properties()
      获取不可修改的属性映射。 class description 中进一步解释了属性的概念。
      返回:
      包含所有属性的 Map<String, Object> 对象。如果未识别出任何属性,则返回一个空map。
      自从:
      1.5
      参见:
    • getProperty

      public Object  getProperty(String  key)
      获取键指定的属性值。 class description 中进一步解释了属性的概念。

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

      参数:
      key - 所需属性的键
      返回:
      具有指定键的属性的值,如果属性不存在则返回 null
      自从:
      1.5
      参见:
    • matches

      public boolean matches(AudioFormat  format)
      指示此格式是否与指定格式匹配。要匹配,两种格式必须具有相同的编码,并且通道数、采样率、样本大小、帧率和帧大小的值必须一致。如果属性值相等或指定格式具有属性值 AudioSystem.NOT_SPECIFIED ,则属性值是一致的。如果样本大小大于一个字节,字节顺序(大端或小端)必须相同。
      参数:
      format - 测试匹配的格式
      返回:
      true 如果此格式与指定格式匹配,false 否则
    • toString

      public String  toString()
      返回描述音频格式的字符串,例如:“PCM SIGNED 22050 Hz 16 位单声道大端”。字符串的内容可能因 Java Sound 的实现而异。
      重写:
      toString 在类 Object
      返回:
      音频格式的字符串表示