Module java.desktop

Class AudioFormat

java.lang.Object
javax.sound.sampled.AudioFormat

public class AudioFormat extends Object
AudioFormat 是指定声音流中数据排列的类。通过检查音频格式中存储的信息,您可以了解如何解释二进制声音数据中的位。

每个数据线都有与其数据流关联的音频格式。源(播放)数据线的音频格式指示数据线期望接收的输出数据的类型。对于目标(捕获)数据线,音频格式指定可以从该线读取的数据类型。

当然,声音文件也有音频格式。AudioFileFormat 类封装了一个AudioFormat,以及其他特定于文件的信息。类似地,AudioInputStream 也有一个AudioFormat

AudioFormat 类包含许多常见的声音文件编码技术,包括脉冲编码调制(PCM)、μ-law 编码和 a-law 编码。这些编码技术是预定义的,但服务提供者可以创建新的编码类型。特定格式使用的编码由其encoding字段命名。

除了编码,音频格式还包括其他属性,进一步指定数据的确切排列方式。这些属性包括通道数、采样率、采样大小、字节顺序、帧速率和帧大小。声音可能具有不同数量的音频通道:单声道为一,立体声为二。采样率测量每秒每个通道采取的声压“快照”(样本)数量。(如果声音是立体声而不是单声道,则实际上在每个时间点测量了两个样本:一个用于左声道,另一个用于右声道;但是,采样率仍然测量每个通道的数量,因此速率与通道数量无关。这是术语的标准用法。)采样大小指示用于存储每个快照的位数;8 和 16 是典型值。对于 16 位样本(或任何大于一个字节的其他采样大小),字节顺序很重要;每个样本中的字节以“小端”或“大端”样式排列。对于像 PCM 这样的编码,帧由给定时间点所有通道的样本集合组成,因此帧的大小(以字节为单位)始终等于样本的大小(以字节为单位)乘以通道数。然而,对于某些其他类型的编码,帧可以包含一组压缩数据的整个系列,以及其他非样本数据。对于这些编码,采样率和采样大小是指解码为 PCM 后的数据,因此它们与帧速率和帧大小完全不同。

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

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

音频格式属性
属性键 值类型 描述
"bitrate" Integer 每秒的平均比特率
"vbr" Boolean true,如果文件以可变比特率(VBR)编码
"quality" Integer 编码/转换质量,1 到 100

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

自:
1.3
参见:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    Encoding 类命名用于音频流的特定数据表示类型。
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected boolean
    指示音频数据是以大端序还是小端序存储的。
    protected int
    此格式中的音频通道数(单声道为 1,立体声为 2)。
    此格式使用的音频编码技术。
    protected float
    具有此格式的声音每秒播放或录制的帧数。
    protected int
    此格式声音每帧中的字节数。
    protected float
    具有此格式的声音每秒播放或录制的样本数。
    protected int
    此格式声音每个样本中的位数。
  • Constructor Summary

    Constructors
    Constructor
    Description
    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
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    获取通道数。
    获取此格式声音的编码类型。
    float
    获取每秒的帧速率。
    int
    获取每帧的大小(以字节为单位)。
    获取由键指定的属性值。
    float
    获取采样率。
    int
    获取样本的大小。
    boolean
    指示音频数据是以大端序还是小端序字节顺序存储的。
    boolean
    matches(AudioFormat format)
    指示此格式是否与指定的格式匹配。
    获取属性的不可修改映射。
    返回描述音频格式的字符串,例如:"PCM SIGNED 22050 Hz 16 bit mono big-endian"。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • 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
      指示音频数据是以大端序还是小端序字节顺序存储的。
  • Constructor Details

    • 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 - 指示单个样本的数据是否以大端序字节顺序存储(false 表示小端序)
    • 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 - 指示单个样本的数据是否以大端序字节顺序存储(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 表示小端序)
  • Method Details

    • 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()
      获取属性的不可修改映射。有关属性的概念在类描述中有进一步解释。
      返回:
      包含所有属性的Map<String, Object>对象。如果未识别任何属性,则返回一个空映射。
      自:
      1.5
      参见:
    • getProperty

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

      如果特定文件格式未定义指定属性,则此方法返回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 bit mono big-endian"。字符串的内容可能因Java Sound的不同实现而异。
      覆盖:
      toString 在类 Object
      返回:
      音频格式的字符串表示