JavaTM 2 Platform
Standard Ed. 6

javax.sound.sampled
介面 TargetDataLine

所有父級介面:
DataLine, Line

public interface TargetDataLine
extends DataLine

目標資料行是可以從中讀取音頻資料的某種型別的 DataLine。最常見的範例是從音頻捕獲設備獲取其資料的資料行。(該設備被實作為寫入目標資料行的混頻器。)

注意,此介面的命名約定反映了行及其混頻器之間的關係。從應用程序的角度來看,目標資料行可以充當音頻資料的源。

可以通過使用適當 DataLine.Info 物件調用 MixergetLine 方法從混頻器獲得目標資料行。

TargetDataLine 介面提供從目標資料行的緩衝區讀取所捕獲資料的方法。錄製音頻的應用程序應該以足夠快的速度從該目標資料行讀取資料,以防緩衝區溢位,溢位可能導致單擊時所捕獲資料中出現可感知的間斷。應用程序可以使用 DataLine 介面中定義的 available 方法來確定資料行緩衝區中已列隊的當前資料量。如果緩衝區發生溢位,則時間最長的列隊資料被丟棄並由新的資料替換。

從以下版本開始:
1.3
另請參見:
Mixer, DataLine, SourceDataLine

巢狀類別摘要
 
從介面 javax.sound.sampled.DataLine 繼承的巢狀類別/介面
DataLine.Info
 
方法摘要
 void open(AudioFormat format)
          打開具有指定格式的行,這樣可使行獲得所有所需的系統資源並變得可操作。
 void open(AudioFormat format, int bufferSize)
          打開具有指定格式和請求緩衝區大小的行,這樣可使行獲得所有所需的系統資源並變得可操作。
 int read(byte[] b, int off, int len)
          從資料行的輸入緩衝區讀取音頻資料。
 
從介面 javax.sound.sampled.DataLine 繼承的方法
available, drain, flush, getBufferSize, getFormat, getFramePosition, getLevel, getLongFramePosition, getMicrosecondPosition, isActive, isRunning, start, stop
 
從介面 javax.sound.sampled.Line 繼承的方法
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
 

方法詳細資訊

open

void open(AudioFormat format,
          int bufferSize)
          throws LineUnavailableException
打開具有指定格式和請求緩衝區大小的行,這樣可使行獲得所有所需的系統資源並變得可操作。

以位元組為單位指定緩衝區大小,但該大小必須表示整數形式的樣本幀數。使用不滿足此要求的所請求緩衝區大小調用此方法可能導致 IllegalArgumentException。已打開的行實際緩衝區大小可能與請求的緩衝區大小不同。實際設置的值可以通過後續調用 DataLine.getBufferSize() 來查詢

如果此操作成功,則將該行標記為 open,並向行的偵聽器指派一個 OPEN 事件。

在已經打開的行上調用此方法是非法的,並且可能導致 IllegalStateException

有些行一旦關閉就不能重新打開。試圖重新打開這樣的行總是導致 LineUnavailableException

參數:
format - 所需的音頻格式
bufferSize - 所需的緩衝區大小,以位元組為單位。
拋出:
LineUnavailableException - 如果由於資源限制而無法打開行
IllegalArgumentException - 如果緩衝區大小不表示整數形式的樣本幀數,或者 format 未完全指定或是無效的
IllegalStateException - 如果行已經打開
SecurityException - 如果由於安全限制而無法打開行
另請參見:
open(AudioFormat), Line.open(), Line.close(), Line.isOpen(), LineEvent

open

void open(AudioFormat format)
          throws LineUnavailableException
打開具有指定格式的行,這樣可使行獲得所有所需的系統資源並變得可操作。

該實作選擇緩衝區大小,此大小是以位元組為單位來測量的,但它不包括整數形式的樣本幀數。系統選擇的緩衝區大小可以通過後續調用 DataLine.getBufferSize() 來查詢

如果此操作成功,則將該行標記為 open,並向行的偵聽器指派一個 OPEN 事件。

在已經打開的行上調用此方法是非法的,並且可能導致 IllegalStateException

有些行一旦關閉就無法重新打開。試圖重新打開這樣的行總是導致 LineUnavailableException

參數:
format - 所需音頻格式
拋出:
LineUnavailableException - 如果由於資源限制而無法打開行
IllegalArgumentException - 如果 format 未完全指定或是無效的
IllegalStateException - 如果行已經打開
SecurityException - 如果由於安全限制而無法打開行
另請參見:
open(AudioFormat, int), Line.open(), Line.close(), Line.isOpen(), LineEvent

read

int read(byte[] b,
         int off,
         int len)
從資料行的輸入緩衝區讀取音頻資料。將所請求的位元組數讀入指定陣列,起點是該陣列中的指定偏移量,以位元組為單位。讀取所完請求的資料量之前,此方法發生阻塞。不過,如果在讀取完所請求的資料之前資料行已關閉、停止、排空或刷新,則該方法不再阻塞,但它會返回至今為止讀取的位元組數。

可以使用 DataLine 介面的 available 方法確認可不受阻塞地讀取的位元組數。(在保證可以不受阻塞地讀取此位元組數時,不保證試圖讀取其他資料不會發生阻塞。)

要讀取的位元組數必須表示整數形式的樣本幀數,比如:

[ bytes read ] % [frame size in bytes ] == 0

返回值將始終滿足此要求。讀取表示非整數形式的樣本幀數的位元組數的請求無法完成,並且可能導致 IllegalArgumentException。

參數:
b - 將在此方法返回時包含所請求輸入資料的位元組陣列
off - 陣列開始處的偏移量,以位元組為單位
len - 請求的讀取位元組數
返回:
實際讀取的位元組數
拋出:
IllegalArgumentException - 如果所請求的位元組數不表示整數形式的樣本幀數,或者 len 為負。
ArrayIndexOutOfBoundsException - 如果 off 為負,或者 off+len 大於陣列 b 的長度。
另請參見:
SourceDataLine.write(byte[], int, int), DataLine.available()

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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