Module  java.desktop
软件包  javax.sound.sampled

Class AudioFormat



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

    每个数据线都具有与其数据流相关联的音频格式。 源(播放)数据线的音频格式表示数据线期望接收哪种类型的数据输出。 对于目标(捕获)数据线,音频格式指定可以从该行读取的数据的种类。 当然,声音文件也有音频格式。 AudioFileFormat类除了其他特定于文件的信息AudioFormat ,还封装了一个AudioFormat 同样,一个AudioInputStream有一个AudioFormat

    AudioFormat类容纳了许多常见的声音文件编码技术,包括脉码调制(PCM),μ律编码和法律编码。 这些编码技术是预定义的,但服务提供商可以创建新的编码类型。 特定格式使用的编码由其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
    • Nested Class Summary

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

      Fields  
      Modifier and Type Field 描述
      protected boolean bigEndian
      指示音频数据是以big-endian还是小端序存储。
      protected int channels
      这种格式的音频通道的数量(1为mono,2为立体声)。
      protected AudioFormat.Encoding encoding
      这种格式使用的音频编码技术。
      protected float frameRate
      每秒播放或录制的帧数,具有这种格式的声音。
      protected int frameSize
      具有此格式的声音每帧中的字节数。
      protected float sampleRate
      每秒播放或录制的样本数,具有这种格式的声音。
      protected int sampleSizeInBits
      具有此格式的声音的每个样本中的位数。
    • 构造方法摘要

      构造方法  
      Constructor 描述
      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为mono,2为立体声)。
      • frameSize

        protected int frameSize
        具有此格式的声音每帧中的字节数。
      • frameRate

        protected float frameRate
        每秒播放或录制的帧数,具有这种格式的声音。
      • bigEndian

        protected boolean bigEndian
        指示音频数据是以big-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为mono,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为mono,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为mono,2为立体声等)
        signed - 指示数据是签名还是无符号
        bigEndian - 表示单个样本的数据是否以大字节顺序存储( false表示小尾数)
    • 方法详细信息

      • 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
      • isBigEndian

        public boolean isBigEndian​()
        指示音频数据是以big-endian还是小端字节顺序存储。 如果样本大小不超过一个字节,返回值是无关紧要的。
        结果
        true如果数据以big-endian字节顺序存储, false如果是小端
      • 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的实现而异。
        重写:
        toStringObject
        结果
        a string that describes the format parameters