JavaTM 2 Platform
Standard Ed. 6

javax.sound.sampled
類別 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 位樣本(或大於一個位元組大小的任何其他樣本),位元組順序很重要;每個樣本中的位元組要麼以 "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
返回:
描述格式參數的字元串

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only