JavaTM 2 Platform
Standard Ed. 6

javax.sound.sampled
介面 Clip

所有父級介面:
DataLine, Line

public interface Clip
extends DataLine

Clip 介面表示特殊種類別的資料行,該資料行的音頻資料可以在回放前載入,而不是實時串流出。

因為資料是提前載入的且具有已知長度,所以可以設置一個剪輯,以便在其音頻資料中的任何位置開始播放。也可以創建一個循環,以便在播放剪輯時該循環重複播放。使用起始和結尾範例幀以及應該播放循環的次數指定循環。

剪輯可以從支持此型別的行的 Mixer 中獲得。打開剪輯時,將資料載入到剪輯中。

音頻剪輯的回放可以使用 startstop 方法開始和終止。這些方法不重新設置介質的位置;start 導致從回放最後停止的位置繼續回放。要從剪輯的音頻資料的開頭重新啟動回放,只需通過 setFramePosition(0) 調用 stop 即可,該方法可將介質重繞到剪輯的開頭。

從以下版本開始:
1.3

巢狀類別摘要
 
從介面 javax.sound.sampled.DataLine 繼承的巢狀類別/介面
DataLine.Info
 
欄位摘要
static int LOOP_CONTINUOUSLY
          指示循環應該無限期繼續而不是在指定數量的循環後完成的值。
 
方法摘要
 int getFrameLength()
          獲得介質長度(以範例幀為單位)。
 long getMicrosecondLength()
          獲得介質持續時間(以微秒為單位)
 void loop(int count)
          從當前位置開始循環回放。
 void open(AudioFormat format, byte[] data, int offset, int bufferSize)
          打開剪輯,意味著它應該獲得所有所需的系統資源並變得可操作。
 void open(AudioInputStream stream)
          使用出現在所提供的音頻輸入串流中的格式和音頻資料打開剪輯。
 void setFramePosition(int frames)
          設置介質位置(以範例幀為單位)。
 void setLoopPoints(int start, int end)
          設置將在循環中播放的第一個和最後一個範例幀。
 void setMicrosecondPosition(long microseconds)
          設置介質位置(以微秒為單位)。
 
從介面 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
 

欄位詳細資訊

LOOP_CONTINUOUSLY

static final int LOOP_CONTINUOUSLY
指示循環應該無限期繼續而不是在指定數量的循環後完成的值。

另請參見:
loop(int), 常數欄位值
方法詳細資訊

open

void open(AudioFormat format,
          byte[] data,
          int offset,
          int bufferSize)
          throws LineUnavailableException
打開剪輯,意味著它應該獲得所有所需的系統資源並變得可操作。使用所指示的格式和音頻資料打開剪輯。如果此操作成功,則將行標記為 open 且向行的偵聽器指派一個 OPEN 事件。

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

注意,有些行一旦關閉,無法重新打開。試圖重新打開這樣的行將始終導致 LineUnavailableException

參數:
format - 所提供的音頻資料的格式
data - 套件含要載入到剪輯中的音頻資料的位元組陣列
offset - 開始複製的點,用陣列開頭處的位元組 表示
bufferSize - 從陣列載入到剪輯的資料的位元組
拋出:
LineUnavailableException - 如果因資源限制而無法打開行
IllegalArgumentException - 如果緩衝區大小不表示整數範例幀,或者如果未完全指定 format 或其無效
IllegalStateException - 如果已經打開行
SecurityException - 如果因安全限制而無法打開行
另請參見:
Line.close(), Line.isOpen(), LineListener

open

void open(AudioInputStream stream)
          throws LineUnavailableException,
                 IOException
使用出現在所提供的音頻輸入串流中的格式和音頻資料打開剪輯。打開剪輯意味著它應該獲得所有所需的系統資源並變得可操作。如果此操作輸入串流。如果此操作成功,則將行標記為 open 並向行的偵聽器指派一個 OPEN 事件。

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

注意,有些行一旦關閉,無法重新打開。試圖重新打開這樣的行將始終導致 LineUnavailableException

參數:
stream - 從中將音頻資料讀入剪輯的音頻輸入串流
拋出:
LineUnavailableException - 如果因資源限制而無法打開行
IOException - 如果在讀取串流的過程中發生 I/O 異常
IllegalArgumentException - 如果未完全指定串流的音頻格式或其無效
IllegalStateException - 如果已經打開行
SecurityException - if 如果因安全限制而無法打開行
另請參見:
Line.close(), Line.isOpen(), LineListener

getFrameLength

int getFrameLength()
獲得介質長度(以範例幀為單位)。

返回:
介質長度(以範例幀為單位);如果未打開行,則返回 AudioSystem.NOT_SPECIFIED
另請參見:
AudioSystem.NOT_SPECIFIED

getMicrosecondLength

long getMicrosecondLength()
獲得介質持續時間(以微秒為單位)

返回:
以微秒表示的介質持續時間;如果未打開行,則返回 AudioSystem.NOT_SPECIFIED
另請參見:
AudioSystem.NOT_SPECIFIED

setFramePosition

void setFramePosition(int frames)
設置介質位置(以範例幀為單位)。該位置從零開始;第一幀的幀數為零。剪輯下一次開始播放時,它將通過播放此位置的幀開始。

要獲得以範例幀為單位的當前位置,使用 DataLinegetFramePosition 方法即可。

參數:
frames - 所需新介質的位置(以範例幀表示)

setMicrosecondPosition

void setMicrosecondPosition(long microseconds)
設置介質位置(以微秒為單位)。剪輯下一次開始播放時,它將在此位置開始。不保證精度級別。例如,實作可能根據當前幀的位置和音頻範例幀速率計算微秒位置。應將以微秒為單位的精度限制為每範例幀的微秒數。

要獲得以微秒為單位的當前位置,使用 DataLinegetMicrosecondPosition 方法即可。

參數:
microseconds - 所需新介質的位置(以微秒表示)

setLoopPoints

void setLoopPoints(int start,
                   int end)
設置將在循環中播放的第一個和最後一個範例幀。結束點必須大於或等於起點,並且兩者都必須介於載入的介質大小以內。起點為 0 值意味著載入介質的開頭。類似地,結束點為 -1 指示介質的最後一幀。

參數:
start - 以範例幀(從零開始)為單位的循環起始位置
end - 以範例幀(從零開始)為單位的循環結束位置,或為 -1 表示最後一幀
拋出:
IllegalArgumentException - 如果無法設置請求的循環點,這通常是因為一個或兩個請求的點超出介質持續時間,或因為結束點在起點之前

loop

void loop(int count)
從當前位置開始循環回放。回放將持續到循環的結束點,然後返回到循環起始點 count 次,最後繼續回放到剪輯的末尾。

如果在調用此方法時當前位置大於循環結束點,則回放只持續到剪輯的結尾,不用循環。

count 值為 0 指示任何當前循環都應該停止,並且回放應該持續到剪輯的末尾。在循環操作期間使用任何其他值調用此方法的行為都是不確定的。

如果在循環期間回放停止,則清除當前循環狀態;後續循環和起始請求的行為將不受中斷的循環操作的影響。

參數:
count - 回放應該從循環的結束位置返回到循環的起始位置的次數,或者為 LOOP_CONTINUOUSLY 指示循環在中斷前應該一起持續

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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