JavaTM 2 Platform
Standard Ed. 6

javax.sound.sampled
介面 DataLine

所有父級介面:
Line
所有已知子介面:
Clip, SourceDataLine, TargetDataLine

public interface DataLine
extends Line

DataLine 將與介質相關的功能添加到其父級介面 Line。此功能包括一些傳輸控制方法,這些方法可以啟動、停止、消耗和刷新通過資料行傳入的音頻資料。資料行還可以報告介質的當前位置、音量和音頻格式。資料行通過使用子介面 SourceDataLineClip 用於音頻輸出,這些子介面允許應用程序寫入資料。類似地,音頻輸入由子介面 TargetDataLine 處理,該介面允許讀取資料。

資料行有一個內部緩衝區,傳入或傳出資料在該緩衝區被加入佇列。此內部緩衝區變空之前(通常因為已處理所有列隊的資料),drain() 方法發生阻塞。flush() 方法將放棄內部緩衝區中的所有可用的已列隊資料。

只要資料行開始還是停止資料的活動現象或資料的捕獲,就會產生 STARTSTOP 事件。這些事件可能在回應特定請求時產生,也可能是不太直接的狀態更改的結果。例如,如果對非活動資料行調用 start(),且資料可用於捕獲或回放,則將在實際開始資料回放或捕獲時產生 START 事件。或者,如果因為活動資料行的資料串流受到限制而在資料呈現中發生間隙,則產生 STOP 事件。

混頻器常常支持多條資料行的同步控制。可以通過混頻器介面的 synchronize 方法來建立同步。關於更完整的描述,請參見 Mixer 介面的描述。

從以下版本開始:
1.3
另請參見:
LineEvent

巢狀類別摘要
static class DataLine.Info
          除了繼承自其父級類別的類別資訊之外,DataLine.Info 還提供特定於資料行的其他資訊。
 
方法摘要
 int available()
          獲得當前可用於資料行內部緩衝區中處理的應用程序的資料位元組數。
 void drain()
          通過在清空資料行的內部緩衝區之前繼續資料 I/O,排空資料行中的列隊資料。
 void flush()
          刷新資料行中已列隊的資料。
 int getBufferSize()
          獲得將適合資料行的內部緩衝區的最大資料位元組數。
 AudioFormat getFormat()
          獲得資料行的音頻資料的當前格式(編碼、樣本頻率、通道數,等等)。
 int getFramePosition()
          獲得音頻資料中的當前位置(以樣本幀為單位)。
 float getLevel()
          獲得行的當前音量級別。
 long getLongFramePosition()
          獲得音頻資料中的當前位置(以樣本幀為單位)。
 long getMicrosecondPosition()
          獲得音頻資料中的當前位置(以微秒為單位)。
 boolean isActive()
          指示該行是否正在進行活動 I/O(如回放或捕獲)。
 boolean isRunning()
          指示該行是否正在運行。
 void start()
          允許某一資料行執行資料 I/O。
 void stop()
          停止行。
 
從介面 javax.sound.sampled.Line 繼承的方法
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
 

方法詳細資訊

drain

void drain()
通過在清空資料行的內部緩衝區之前繼續資料 I/O,排空資料行中的列隊資料。在完成排空操作之前,此方法發生阻塞。因為這是一個阻塞方法,所以應小心使用它。如果在佇列中有資料的終止行上調用 drain(),則在該行正在運行和資料佇列變空之前,此方法將發生阻塞。如果通過一個執行緒調用 drain(),另一個執行緒繼續填充資料佇列,則該操作沒有完成。此方法總是在關閉資料行時返回。

另請參見:
flush()

flush

void flush()
刷新資料行中已列隊的資料。已刷新的資料將被丟棄。在某些情況下,不是所有已列隊的資料都被丟棄。例如,混頻器可以刷新特定輸入行的緩衝區中的資料,但是輸出緩衝區中尚未播放的資料(混合的結果)仍將被播放。如果想要在重新啟動回放或捕獲時跳過“陳舊的”資料,則可以在暫停某一資料行(正常情況)之後調用此方法。(刷新尚未停止的資料行是合法的,但在活動行上這樣做很可能導致資料的間斷,導致一個顯而易見的單擊。)

另請參見:
stop(), drain()

start

void start()
允許某一資料行執行資料 I/O。如果在已經運行的資料行上調用此方法,則此方法不執行任何操作。除非已刷新緩衝區中的資料,否則該行將從停止該資料行時未經處理的第一幀開始恢復 I/O。當開始音頻捕獲或回放時,產生 START 事件。

另請參見:
stop(), isRunning(), LineEvent

stop

void stop()
停止行。停止的行應該停止 I/O 活動。但是,如果行已被打開並且正在運行,它應該保留恢復活動所需的資源。停止的行應該保留其緩衝區中的任何音頻資料而不是丟棄它,以便在恢復時,I/O 可以從原來停止的位置繼續(如有可能)。(當然,此操作不保證在當前緩衝區之外永遠不會有間斷;如果停止的情況持續時間太長,則可能刪除輸入或輸出範例。)如果需要,可以通過調用 flush 方法丟棄保留的資料。當音頻捕獲或回放停止時,產生 STOP 事件。

另請參見:
start(), isRunning(), flush(), LineEvent

isRunning

boolean isRunning()
指示該行是否正在運行。預設值為 false。打開的行將在回應調用 start 方法而呈現第一個資料時開始運行,並可持續到回應調用 stop 或因為回放結束而表現為停止狀態時為止。

返回:
如果該行正在運行,則返回 true;否則返回 false
另請參見:
start(), stop()

isActive

boolean isActive()
指示該行是否正在進行活動 I/O(如回放或捕獲)。當非活動行變得活動時,它會向其偵聽器發送一個 START 事件。類似地,當活動行變得不活動時,它將發送 STOP 事件。

返回:
如果行將在活動情況下捕獲或呈現聲音,則返回 true;否則返回 false
另請參見:
Line.isOpen(), Line.addLineListener(javax.sound.sampled.LineListener), Line.removeLineListener(javax.sound.sampled.LineListener), LineEvent, LineListener

getFormat

AudioFormat getFormat()
獲得資料行的音頻資料的當前格式(編碼、樣本頻率、通道數,等等)。

如果行未打開且從來沒有打開過,則返回預設格式。預設格式是一個特定音頻格式實作,如果 DataLine.Info 物件(用於檢索此 DataLine)至少指定一個完全限定的音頻格式,則將最後一個格式用作預設格式。打開具有特定音頻格式(如 SourceDataLine.open(AudioFormat))的行將覆寫預設格式。

返回:
當前的音頻資料格式
另請參見:
AudioFormat

getBufferSize

int getBufferSize()
獲得將適合資料行的內部緩衝區的最大資料位元組數。對於源資料行,這是將寫入資料的緩衝區的大小。對於目標資料行,它是可以讀取資料的緩衝區的大小。注意,這裡使用的單位是位元組,但它將始終對應於音頻資料的樣本幀數(整數)。

返回:
緩衝區的大小(以位元組為單位)

available

int available()
獲得當前可用於資料行內部緩衝區中處理的應用程序的資料位元組數。對於源資料行,該資料位元組數是可以不受阻塞地寫入緩衝區的資料量。對於目標資料行,該資料位元組數是可用於由應用程序讀取的資料量。對於剪貼區,因為在打開剪貼區時將音頻資料載入到緩衝區,並保留到關閉剪貼區時才收到通知,所以此值始終為 0。

注意,這裡使用的單位是位元組,但將始終對應於音頻資料的樣本幀數(整數)。

保證應用程序對從 available() 返回的位元組數進行的讀取或寫入操作不受阻塞;不過,不保證試圖讀取或寫入更多資料將發生阻塞。

返回:
可用的資料量(以位元組為單位)

getFramePosition

int getFramePosition()
獲得音頻資料中的當前位置(以樣本幀為單位)。幀位置測量從打開行以來由行捕獲的樣本幀數或在行中呈現的樣本幀數。此返回值將包裹大約 2^31 以後的幀。建議改用 getLongFramePosition

返回:
打開行以來已經處理的幀數
另請參見:
getLongFramePosition()

getLongFramePosition

long getLongFramePosition()
獲得音頻資料中的當前位置(以樣本幀為單位)。幀位置測量從打開行以來由行捕獲的樣本幀數或在行中呈現的樣本幀數。

返回:
打開行以來已經處理的幀數
從以下版本開始:
1.5

getMicrosecondPosition

long getMicrosecondPosition()
獲得音頻資料中的當前位置(以微秒為單位)。微秒位置測量對應於從打開行以來由行捕獲的樣本幀數或在行中呈現的樣本幀數的時間。不保證精度的級別。例如,某一實作可能根據當前幀的位置和音頻樣本幀比率來計算微秒位置 (microsecond position)。以微秒為單位的精度應限制為每樣本幀的微秒數。

返回:
打開行以來所處理資料的微秒數

getLevel

float getLevel()
獲得行的當前音量級別。此級別是對信號的當前振幅的測量,且不應該與音量控制的當前設置混淆。範圍從 0.0(靜)到 1.0(聲音波形的最大可能振幅)。該單位測量線性振幅,不測量分貝數。

返回:
此行中信號的當前振幅,或 AudioSystem.NOT_SPECIFIED

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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