|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object javax.sound.sampled.AudioFormat
public class AudioFormat
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 |
鼓勵服務提供者(外掛程式)的供應商尋找關於其他已經在第三方外掛程式中建立的屬性的資訊,並遵循相同的約定。
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 |
欄位詳細資訊 |
---|
protected AudioFormat.Encoding encoding
protected float sampleRate
protected int sampleSizeInBits
protected int channels
protected int frameSize
protected float frameRate
protected boolean bigEndian
建構子詳細資訊 |
---|
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)。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>
物件public AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
AudioFormat
。將幀大小設置為包含每個聲道一個樣本所需的位元組數,將幀速率設置為樣本速率。
sampleRate
- 每秒的樣本數sampleSizeInBits
- 每個樣本中的位數channels
- 聲道數(單聲道 1 個,立體聲 2 個)signed
- 指示資料是有符號的,還是無符號的bigEndian
- 指示是否以 big-endian 位元組順序存儲單個樣本中的資料(false
意味著 little-endian)。方法詳細資訊 |
---|
public AudioFormat.Encoding getEncoding()
AudioFormat.Encoding.PCM_SIGNED
,
AudioFormat.Encoding.PCM_UNSIGNED
,
AudioFormat.Encoding.ULAW
,
AudioFormat.Encoding.ALAW
public float getSampleRate()
AudioSystem.isConversionSupported
)或功能(如 DataLine.Info.getFormats
)時,AudioSystem.NOT_SPECIFIED
的樣本速率意味著可以接受任何樣本速率。當沒有為此音頻格式定義樣本速率時,還會返回 AudioSystem.NOT_SPECIFIED
。
AudioSystem.NOT_SPECIFIED
getFrameRate()
,
AudioSystem.NOT_SPECIFIED
public int getSampleSizeInBits()
AudioSystem.isConversionSupported
)或功能(如 DataLine.Info.getFormats
)時,AudioSystem.NOT_SPECIFIED
的樣本大小意味著可以接受任何樣本大小。當沒有為此音頻格式定義樣本大小時,還會返回 AudioSystem.NOT_SPECIFIED
。
AudioSystem.NOT_SPECIFIED
getFrameSize()
,
AudioSystem.NOT_SPECIFIED
public int getChannels()
AudioSystem.isConversionSupported
)或功能(如 DataLine.Info.getFormats
)時,AudioSystem.NOT_SPECIFIED
的返回值意味著可以接受任何(正)數量的通道。
AudioSystem.NOT_SPECIFIED
AudioSystem.NOT_SPECIFIED
public int getFrameSize()
AudioSystem.isConversionSupported
)或功能(如 DataLine.Info.getFormats
)時,AudioSystem.NOT_SPECIFIED
的幀大小意味著可以接受任何幀大小。當沒有為此音頻格式定義幀大小時,還會返回 AudioSystem.NOT_SPECIFIED
。
AudioSystem.NOT_SPECIFIED
getSampleSizeInBits()
,
AudioSystem.NOT_SPECIFIED
public float getFrameRate()
AudioSystem.isConversionSupported
)或功能(如 DataLine.Info.getFormats
)時,AudioSystem.NOT_SPECIFIED
的幀速率意味著可以接受任何幀速率。當沒有為此音頻格式定義幀速率時,還會返回 AudioSystem.NOT_SPECIFIED
。
AudioSystem.NOT_SPECIFIED
getSampleRate()
,
AudioSystem.NOT_SPECIFIED
public boolean isBigEndian()
true
;如果按 little-endian 順序,則返回 false
public Map<String,Object> properties()
類別描述
進一步解釋。
Map<String,Object>
物件。如果無法識別任何屬性,則返回空映射。getProperty(String)
public Object getProperty(String key)
類別描述
進一步解釋。
如果指定屬性不是為特定檔案格式定義的,則此方法返回 null
。
key
- 所需屬性的鍵
null
。properties
public boolean matches(AudioFormat format)
AudioSystem.NOT_SPECIFIED
(表示任何採樣速率均比對),則這兩種格式還必須具有相同的採樣速率。如果指定格式的幀速率不為 AudioSystem.NOT_SPECIFIED
,則二者的幀速率必須大致相等。如果樣本大小大於一個位元組,則位元組存儲順序(big-endian 或 little-endian)必須比對。
format
- 要測試是否比對的格式
true
;否則,返回 false
。public String toString()
Object
中的 toString
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。