JavaTM 2 Platform
Standard Ed. 6

javax.sound.midi
介面 Sequencer

所有父級介面:
MidiDevice

public interface Sequencer
extends MidiDevice

回放 MIDI sequence 的硬體或軟體設備就是所謂的 sequencer。MIDI sequence 套件含加了時間戳的 MIDI 資料列表,例如可從標準 MIDI 檔案讀取的資料。多數 sequencer 還提供創建和編輯 sequence 的功能。

Sequencer 介面包括用於以下基本 MIDI sequencer 操作的方法:

另外還以直接或間接的方式,通過 Sequencer 可存取的物件支持以下操作:

另請參見:
Sequencer.SyncMode, addMetaEventListener(javax.sound.midi.MetaEventListener), ControllerEventListener, Receiver, Transmitter, MidiDevice

巢狀類別摘要
static class Sequencer.SyncMode
          SyncMode 物件表示 MIDI sequencer 的時間標記可與主或從設備同步的方式之一。
 
從介面 javax.sound.midi.MidiDevice 繼承的巢狀類別/介面
MidiDevice.Info
 
欄位摘要
static int LOOP_CONTINUOUSLY
          一個值,指示循環應無限繼續而不是在執行完特定次數的循環後停止。
 
方法摘要
 int[] addControllerEventListener(ControllerEventListener listener, int[] controllers)
          註冊一個控制元件事件偵聽器,以便在 sequencer 處理所請求的一種或多種型別的控制更改事件時接收通知。
 boolean addMetaEventListener(MetaEventListener listener)
          註冊一個元事件偵聽器,以便在 sequence 中遇到元事件並由此 sequencer 處理時接收通知。
 int getLoopCount()
          獲得回放的重複次數。
 long getLoopEndPoint()
          獲得循環的結束位置,以 MIDI 節拍為單位。
 long getLoopStartPoint()
          獲得循環的起始位置,以 MIDI 節拍為單位。
 Sequencer.SyncMode getMasterSyncMode()
          獲得此 sequencer 的當前主同步網要。
 Sequencer.SyncMode[] getMasterSyncModes()
          獲得此 sequencer 支持的主同步網要集。
 long getMicrosecondLength()
          獲得當前 sequence 的長度,用微秒表示,如果未設置 sequence,則為 0。
 long getMicrosecondPosition()
          獲得 sequence 中的當前位置,用微秒表示。
 Sequence getSequence()
          獲得 Sequencer 當前所操作的 sequence。
 Sequencer.SyncMode getSlaveSyncMode()
          獲得此 sequencer 的當前從同步網要。
 Sequencer.SyncMode[] getSlaveSyncModes()
          獲得此 sequencer 支持的從同步網要集。
 float getTempoFactor()
          返回 sequencer 的當前速度因子。
 float getTempoInBPM()
          獲得當前的速度,用每分鐘的拍數表示。
 float getTempoInMPQ()
          獲得當前的速度,用每四分音符的微秒數表示。
 long getTickLength()
          獲得當前 sequence 的長度,用 MIDI 節拍數表示,如果未設置 sequence,則為 0。
 long getTickPosition()
          獲得 sequence 的當前位置,用 MIDI 節拍數表示。
 boolean getTrackMute(int track)
          獲得軌道的當前靜音狀態。
 boolean getTrackSolo(int track)
          獲得軌道的當前 solo 狀態。
 boolean isRecording()
          指示 Sequencer 當前是否正在錄製。
 boolean isRunning()
          指示 Sequencer 當前是否正在運行。
 void recordDisable(Track track)
          禁止向指定軌道的錄製。
 void recordEnable(Track track, int channel)
          為錄製特定通道上接收的事件準備指定的軌道。
 int[] removeControllerEventListener(ControllerEventListener listener, int[] controllers)
          移除偵聽一類別或多類別控制元件事件的控制元件事件偵聽器。
 void removeMetaEventListener(MetaEventListener listener)
          從此 sequencer 的已註冊偵聽器列表中移除指定的元事件偵聽器(如果實際上此偵聽器已註冊)。
 void setLoopCount(int count)
          設置循環回放的重複次數。
 void setLoopEndPoint(long tick)
          設置在循環中播放的最後一個 MIDI 節拍。
 void setLoopStartPoint(long tick)
          設置在循環中播放的第一個 MIDI 節拍。
 void setMasterSyncMode(Sequencer.SyncMode sync)
          設置此 sequencer 使用的定時資訊源。
 void setMicrosecondPosition(long microseconds)
          設置 sequence 中的當前位置,用微秒表示
 void setSequence(InputStream stream)
          設置 sequencer 所操作的當前 sequence。
 void setSequence(Sequence sequence)
          設置 sequencer 所操作的當前 sequence。
 void setSlaveSyncMode(Sequencer.SyncMode sync)
          設置此 sequencer 的從同步網要。
 void setTempoFactor(float factor)
          根據所提供的 factor 按比例提高 sequencer 的實際回放速度。
 void setTempoInBPM(float bpm)
          設置速度,以每分鐘的拍數為單位。
 void setTempoInMPQ(float mpq)
          設置速度,以每四分音符的微秒數為單位。
 void setTickPosition(long tick)
          設置當前 sequencer 位置,以 MIDI 節拍數為單位。
 void setTrackMute(int track, boolean mute)
          設置軌道的靜音狀態。
 void setTrackSolo(int track, boolean solo)
          設置軌道的 solo 狀態。
 void start()
          開始回放當前已載入 sequence 中的 MIDI 資料。
 void startRecording()
          開始錄製和回放 MIDI 資料。
 void stop()
          停止錄音(如果處於活動狀態)及當前已載入 sequence(如果有)的回放。
 void stopRecording()
          停止錄製(如果處於活動狀態)。
 
從介面 javax.sound.midi.MidiDevice 繼承的方法
close, getDeviceInfo, getMaxReceivers, getMaxTransmitters, getReceiver, getReceivers, getTransmitter, getTransmitters, isOpen, open
 

欄位詳細資訊

LOOP_CONTINUOUSLY

static final int LOOP_CONTINUOUSLY
一個值,指示循環應無限繼續而不是在執行完特定次數的循環後停止。

從以下版本開始:
1.5
另請參見:
setLoopCount(int), 常數欄位值
方法詳細資訊

setSequence

void setSequence(Sequence sequence)
                 throws InvalidMidiDataException
設置 sequencer 所操作的當前 sequence。

此方法即使在 Sequencer 關閉時也可調用。

參數:
sequence - 要載入的 sequence。
拋出:
InvalidMidiDataException - 如果該 sequence 套件含無效的 MIDI 資料或不受支持的資料。

setSequence

void setSequence(InputStream stream)
                 throws IOException,
                        InvalidMidiDataException
設置 sequencer 所操作的當前 sequence。該串流必須指向 MIDI 檔案資料。

此方法即使在 Sequencer 關閉時也可調用。

參數:
stream - 套件含 MIDI 檔案資料的串流。
拋出:
IOException - 如果讀取串流時發生 I/O 異常。
InvalidMidiDataException - 如果在串流中遇到無效資料,或者串流不受支持。

getSequence

Sequence getSequence()
獲得 Sequencer 當前所操作的 sequence。

此方法即使在 Sequencer 關閉時也可調用。

返回:
當前的 sequence,如果當前未設置任何 sequence,則返回 null

start

void start()
開始回放當前已載入 sequence 中的 MIDI 資料。回放將從當前位置開始。如果回放位置到達循環終點,並且循環計數大於 0,則回放將從循環開始點繼續運行 setLoopCount 中設置的重複次數。此後,如果循環計數為 0,則回放將繼續播放直到 sequence 末尾。

該實作確保合成器在跳轉到循環開始點時通過發送合適的控制元件、彎音和程序更改事件來保持一致的狀態。

拋出:
IllegalStateException - 如果 Sequencer 已關閉。
另請參見:
setLoopStartPoint(long), setLoopEndPoint(long), setLoopCount(int), stop()

stop

void stop()
停止錄音(如果處於活動狀態)及當前已載入 sequence(如果有)的回放。

拋出:
IllegalStateException - 如果 Sequencer 已關閉。
另請參見:
start(), isRunning()

isRunning

boolean isRunning()
指示 Sequencer 當前是否正在運行。預設值為 false。Sequencer 在調用 start()startRecording() 之一時開始運行。然後 isRunning 返回 true,直到 sequence 的回放完成或調用了 stop()

返回:
如果 Sequencer 正在運行中,則返回 true;否則返回 false

startRecording

void startRecording()
開始錄製和回放 MIDI 資料。資料錄製到為其啟用的通道上的所有已啟用音軌上。錄製從 sequencer 的當前位置開始。錄製Session過程中覆寫音軌上的全部已有事件。取自當前已載入 sequence 的事件(如果有)隨錄製過程中接收的訊息傳遞給 sequencer 的傳輸器。

注意,預設不允許軌道進行錄製。為了錄製 MIDI 資料,必須至少指定一個軌道允許錄製。

拋出:
IllegalStateException - 如果 Sequencer 已關閉。
另請參見:
startRecording(), recordEnable(javax.sound.midi.Track, int), recordDisable(javax.sound.midi.Track)

stopRecording

void stopRecording()
停止錄製(如果處於活動狀態)。繼續當前 sequence 的回放。

拋出:
IllegalStateException - 如果 Sequencer 已關閉。
另請參見:
startRecording(), isRecording()

isRecording

boolean isRecording()
指示 Sequencer 當前是否正在錄製。預設值為 false。Sequencer 在 startRecording() 調用時開始錄製,然後在調用 stop()stopRecording() 前,此方法返回 true

返回:
如果 Sequencer 正在錄製中,則返回 true;否則返回 false

recordEnable

void recordEnable(Track track,
                  int channel)
為錄製特定通道上接收的事件準備指定的軌道。一旦啟用,軌道將在錄製處於活動狀態時接收事件。

參數:
track - 要錄製事件的軌道
channel - 接收其上事件的通道。如果通道值指定為 -1,則軌道將從所有通道接收資料。
拋出:
IllegalArgumentException - 如果 track 不是當前 sequence 的一部分。

recordDisable

void recordDisable(Track track)
禁止向指定軌道的錄製。事件將不再錄製到此軌道中。

參數:
track - 要禁止錄製的軌道,或為 null 以禁止錄製到所有軌道。

getTempoInBPM

float getTempoInBPM()
獲得當前的速度,用每分鐘的拍數表示。實際的回放速度是返回值和速度因子的乘積。

返回:
當前的速度,用每分鐘的拍數表示
另請參見:
getTempoFactor(), setTempoInBPM(float), getTempoInMPQ()

setTempoInBPM

void setTempoInBPM(float bpm)
設置速度,以每分鐘的拍數為單位。實際的回放速度是指定值和速度因子的乘積。

參數:
bpm - 所需的新速度,以每分鐘的拍數為單位
另請參見:
getTempoFactor(), setTempoInMPQ(float), getTempoInBPM()

getTempoInMPQ

float getTempoInMPQ()
獲得當前的速度,用每四分音符的微秒數表示。實際的回放速度是返回值和速度因子的乘積。

返回:
當前的速度,以每四分音符的微秒數為單位
另請參見:
getTempoFactor(), setTempoInMPQ(float), getTempoInBPM()

setTempoInMPQ

void setTempoInMPQ(float mpq)
設置速度,以每四分音符的微秒數為單位。實際的回放速度是指定值和速度因子的乘積。

參數:
mpq - 所需的新速度,以每四分音符的微秒數為單位。
另請參見:
getTempoFactor(), setTempoInBPM(float), getTempoInMPQ()

setTempoFactor

void setTempoFactor(float factor)
根據所提供的 factor 按比例提高 sequencer 的實際回放速度。預設值是 1.0。值為 1.0 表示固有的速率(sequence 中指定的速度),2.0 表示速度為兩倍大小,依此類別推。速度因子並不影響 getTempoInMPQ()getTempoInBPM() 返回的值。這些值指示提高速度前的速度。

注意,在使用外部同步時無法調整速度因子。這種情況下,setTempoFactor 始終將速度因子設置為 1.0。

參數:
factor - 所請求的速度標量
另請參見:
getTempoFactor()

getTempoFactor

float getTempoFactor()
返回 sequencer 的當前速度因子。預設值是 1.0。

返回:
速度因子。
另請參見:
setTempoFactor(float)

getTickLength

long getTickLength()
獲得當前 sequence 的長度,用 MIDI 節拍數表示,如果未設置 sequence,則為 0。

返回:
sequence 的長度,以節拍數為單位

getTickPosition

long getTickPosition()
獲得 sequence 的當前位置,用 MIDI 節拍數表示。(節拍持續的秒數由速度和存儲在 Sequence 中的定時精度確定。)

返回:
當前節拍
另請參見:
setTickPosition(long)

setTickPosition

void setTickPosition(long tick)
設置當前 sequencer 位置,以 MIDI 節拍數為單位。

參數:
tick - 所需的節拍位置
另請參見:
getTickPosition()

getMicrosecondLength

long getMicrosecondLength()
獲得當前 sequence 的長度,用微秒表示,如果未設置 sequence,則為 0。

返回:
sequence 的長度,用微秒表示。

getMicrosecondPosition

long getMicrosecondPosition()
獲得 sequence 中的當前位置,用微秒表示。

指定者:
介面 MidiDevice 中的 getMicrosecondPosition
返回:
當前位置,用微秒表示
另請參見:
setMicrosecondPosition(long)

setMicrosecondPosition

void setMicrosecondPosition(long microseconds)
設置 sequence 中的當前位置,用微秒表示

參數:
microseconds - 所需的位置,以微秒為單位
另請參見:
getMicrosecondPosition()

setMasterSyncMode

void setMasterSyncMode(Sequencer.SyncMode sync)
設置此 sequencer 使用的定時資訊源。Sequencer 與主同步網要同步,主同步網要為內部時鐘、MIDI 時鐘和 MIDI 時間程式碼,具體取決於 sync 的值。sync 參數必須是所支持的網要之一,如 getMasterSyncModes() 返回的結果。

參數:
sync - 所需的主同步網要
另請參見:
Sequencer.SyncMode.INTERNAL_CLOCK, Sequencer.SyncMode.MIDI_SYNC, Sequencer.SyncMode.MIDI_TIME_CODE, getMasterSyncMode()

getMasterSyncMode

Sequencer.SyncMode getMasterSyncMode()
獲得此 sequencer 的當前主同步網要。

返回:
當前的主同步網要
另請參見:
setMasterSyncMode(Sequencer.SyncMode), getMasterSyncModes()

getMasterSyncModes

Sequencer.SyncMode[] getMasterSyncModes()
獲得此 sequencer 支持的主同步網要集。

返回:
可用的主同步網要
另請參見:
Sequencer.SyncMode.INTERNAL_CLOCK, Sequencer.SyncMode.MIDI_SYNC, Sequencer.SyncMode.MIDI_TIME_CODE, getMasterSyncMode(), setMasterSyncMode(Sequencer.SyncMode)

setSlaveSyncMode

void setSlaveSyncMode(Sequencer.SyncMode sync)
設置此 sequencer 的從同步網要。這指示由 sequencer 發送到接收器的定時資訊型別。sync 參數必須是所支持的網要之一,如 getSlaveSyncModes() 返回的結果。

參數:
sync - 所需的從同步網要
另請參見:
Sequencer.SyncMode.MIDI_SYNC, Sequencer.SyncMode.MIDI_TIME_CODE, Sequencer.SyncMode.NO_SYNC, getSlaveSyncModes()

getSlaveSyncMode

Sequencer.SyncMode getSlaveSyncMode()
獲得此 sequencer 的當前從同步網要。

返回:
當前的從同步網要
另請參見:
setSlaveSyncMode(Sequencer.SyncMode), getSlaveSyncModes()

getSlaveSyncModes

Sequencer.SyncMode[] getSlaveSyncModes()
獲得此 sequencer 支持的從同步網要集。

返回:
可用的從同步網要
另請參見:
Sequencer.SyncMode.MIDI_SYNC, Sequencer.SyncMode.MIDI_TIME_CODE, Sequencer.SyncMode.NO_SYNC

setTrackMute

void setTrackMute(int track,
                  boolean mute)
設置軌道的靜音狀態。此方法可能由於某些原因而失敗。例如,所指定的軌道號可能對於當前 sequence 無效,或者 sequencer 可能不支持此功能。需要驗證此操作是否成功的應用程序應在此調用後調用 getTrackMute(int)

參數:
track - 軌道號。當前 sequence 中的軌道從 0 到 sequence 中的軌道數減 1 來編號。
mute - 軌道的新靜音狀態。true 表示軌道應靜音,false 表示軌道應為非靜音。
另請參見:
getSequence()

getTrackMute

boolean getTrackMute(int track)
獲得軌道的當前靜音狀態。未靜音前所有軌道的預設靜音狀態都是 false。在任何指定軌道未靜音的情況下,此方法應返回 false。這適用於當 sequencer 不支持軌道靜音並且指定的軌道索引無效的情況。

參數:
track - 軌道號。當前 sequence 中的軌道從 0 到 sequence 中的軌道數減 1 來編號。
返回:
如果已靜音,則返回 true;如果未靜音,則返回 false

setTrackSolo

void setTrackSolo(int track,
                  boolean solo)
設置軌道的 solo 狀態。如果 solotrue,則只有此軌道及其他 solo 軌道可發聲。如果 solofalse,則只有其他 solo 軌道可發聲,如果沒有任何 solo 軌道,則所有非靜音軌道都發聲。

此方法可能由於某些原因而失敗。例如,所指定的軌道號可能對於當前 sequence 無效,或者 sequencer 可能不支持此功能。需要驗證此操作是否成功的應用程序應在此調用後調用 getTrackSolo(int)

參數:
track - 軌道號。當前 sequence 中的軌道從 0 到 sequence 中的軌道數減 1 來編號。
solo - 軌道的新 solo 狀態。true 表示軌道應為 solo,false 表示軌道應為非 solo。
另請參見:
getSequence()

getTrackSolo

boolean getTrackSolo(int track)
獲得軌道的當前 solo 狀態。未 solo 前所有軌道的預設靜音狀態都是 false。在任何指定軌道未 solo 的情況下,此方法應返回 false。這適用於當 sequencer 不支持軌道 solo 並且指定的軌道索引無效的情況。

參數:
track - 軌道號。當前 sequence 中的軌道從 0 到 sequence 中的軌道數減 1 來編號。
返回:
如果已為 solo,則返回 true;如果不是,則返回 false

addMetaEventListener

boolean addMetaEventListener(MetaEventListener listener)
註冊一個元事件偵聽器,以便在 sequence 中遇到元事件並由此 sequencer 處理時接收通知。此方法在此 sequencer 類別不支持元事件通知時會失敗。

參數:
listener - 要添加的偵聽器
返回:
如果成功添加了該偵聽器,則返回 true;否則返回 false
另請參見:
removeMetaEventListener(javax.sound.midi.MetaEventListener), MetaEventListener, MetaMessage

removeMetaEventListener

void removeMetaEventListener(MetaEventListener listener)
從此 sequencer 的已註冊偵聽器列表中移除指定的元事件偵聽器(如果實際上此偵聽器已註冊)。

參數:
listener - 要移除的元事件偵聽器
另請參見:
addMetaEventListener(javax.sound.midi.MetaEventListener)

addControllerEventListener

int[] addControllerEventListener(ControllerEventListener listener,
                                 int[] controllers)
註冊一個控制元件事件偵聽器,以便在 sequencer 處理所請求的一種或多種型別的控制更改事件時接收通知。型別由 controllers 參數指定,該參數應包含一個 MIDI 控制元件號的陣列。(每個編號應該是 0 到 127(包括)之間的一個數。請參見 MIDI 1.0 規範中與各種型別控制元件對應的編號。)

返回的陣列包含 MIDI 控制元件號,偵聽器將從現在開始接收其事件。有些 sequencer 可能不支持控制元件事件通知,這種情況下陣列長度為 0。其他 sequencer 可能支持某些控制元件的通知,但不是全部。此方法可重複調用。每次調用時,返回的陣列都指示偵聽器將接收其通知的所有控制元件,而不僅僅是在該特定調用中請求的控制元件。

參數:
listener - 要添加到已註冊偵聽器列表中的控制元件事件偵聽器
controllers - 為其請求更改通知的 MIDI 控制元件號
返回:
其更改將報告給指定偵聽器的所有 MIDI 控制元件號
另請參見:
removeControllerEventListener(javax.sound.midi.ControllerEventListener, int[]), ControllerEventListener

removeControllerEventListener

int[] removeControllerEventListener(ControllerEventListener listener,
                                    int[] controllers)
移除偵聽一類別或多類別控制元件事件的控制元件事件偵聽器。controllers 參數使用一個 MIDI 號的陣列,與偵聽器將不再接收其更改通知的控制元件對應。要將此偵聽器從已註冊偵聽器列表中徹底移除,可為 controllers 傳遞 null。返回的陣列包含 MIDI 控制元件號,偵聽器將從現在開始接收其事件。如果偵聽器將不接收任何控制元件的更改通知,則陣列長度為 0。

參數:
listener - 舊的偵聽器
controllers - 應為其取消更改通知的 MIDI 控制元件號,或者為 null 以取消所有的控制元件
返回:
其更改現在將報告給指定偵聽器的所有 MIDI 控制元件號
另請參見:
addControllerEventListener(javax.sound.midi.ControllerEventListener, int[])

setLoopStartPoint

void setLoopStartPoint(long tick)
設置在循環中播放的第一個 MIDI 節拍。如果循環數大於 0,則回放到達循環終點時將跳轉到此點。

起始點的值為 0 表示已載入 sequence 的開始。起始點必須小於或等於結束點,並且必須位於已載入 sequence 的大小內。

Sequencer 的循環起始點預設為 sequence 的開始。

參數:
tick - 循環的起始位置,以 MIDI 節拍為單位(從零開始)
拋出:
IllegalArgumentException - 如果所請求的循環起始點無法設置,通常是因為位於 sequence 的持續時間之外或起始點在結束點之後
從以下版本開始:
1.5
另請參見:
setLoopEndPoint(long), setLoopCount(int), getLoopStartPoint(), start()

getLoopStartPoint

long getLoopStartPoint()
獲得循環的起始位置,以 MIDI 節拍為單位。

返回:
循環的起始位置,以 MIDI 節拍為單位(從零開始)
從以下版本開始:
1.5
另請參見:
setLoopStartPoint(long)

setLoopEndPoint

void setLoopEndPoint(long tick)
設置在循環中播放的最後一個 MIDI 節拍。如果循環數為 0,則循環結束點將無效,回放在到達循環結束點時會繼續播放。

結束點值為 -1 指示 sequence 的最後節拍。否則,結束點必須大於或等於起始點,並且必須位於已載入 sequence 的大小內。

Sequencer 的循環結束點預設為 -1,表示 sequence 的結束點。

參數:
tick - 循環的結束位置,以 MIDI 節拍為單位(從零開始),-1 指示結束點節拍
拋出:
IllegalArgumentException - 如果所請求的循環點無法設置,通常是因為位於 sequence 的持續時間之外或結束點在起始點之前
從以下版本開始:
1.5
另請參見:
setLoopStartPoint(long), setLoopCount(int), getLoopEndPoint(), start()

getLoopEndPoint

long getLoopEndPoint()
獲得循環的結束位置,以 MIDI 節拍為單位。

返回:
循環的結束位置,以 MIDI 節拍為單位(從零開始),-1 指示 sequence 的結束點
從以下版本開始:
1.5
另請參見:
setLoopEndPoint(long)

setLoopCount

void setLoopCount(int count)
設置循環回放的重複次數。當回放位置到達循環結束點時,它將返回到循環起始點 count 次,此後回放將繼續播放,直到 sequence 的結束點為止。

如果此方法調用時,當前位置大於循環結束點,則回放會繼續進行至 sequence 的結束點而不循環,除非隨後更改了循環結束點。

count 值為 0 可禁用循環:回放將在循環結束點繼續,不會返回到循環起始點。這是 sequencer 的預設方式。

如果回放在循環時停止,則當前循環狀態被清除;後續開始請求不受已中斷循環操作的影響。

參數:
count - 回放應從循環結束點返回循環起始點的次數,或 LOOP_CONTINUOUSLY 指示循環應一直繼續直到被中斷
拋出:
IllegalArgumentException - 如果 count 為負且不等於 LOOP_CONTINUOUSLY
從以下版本開始:
1.5
另請參見:
setLoopStartPoint(long), setLoopEndPoint(long), getLoopCount(), start()

getLoopCount

int getLoopCount()
獲得回放的重複次數。

返回:
回放在其播放至 sequence 結束點後的循環數
從以下版本開始:
1.5
另請參見:
setLoopCount(int), start()

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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