模块  java.desktop
软件包  javax.sound.sampled

Class 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()AudioFileFormatFormatConversionProvider
    • 嵌套类汇总

      嵌套类  
      变量和类型 描述
      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
    • 字段详细信息

      • 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 编码指定用于表示数据的约定。 其他参数在class description中进一步说明。
        参数
        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 编码指定用于表示数据的约定。 其他参数在class description中进一步说明。
        参数
        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)
    • 方法详细信息

      • 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
      • 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)
        获取密钥指定的属性值。 class description进一步解释了属性的概念。

        如果未为特定文件格式定义指定的属性,则此方法返回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的实现而异。
        重写:
        toString在类 Object
        结果
        a string that describes the format parameters