|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface Sequencer
回放 MIDI
的硬體或軟體設備就是所謂的 sequencer。MIDI sequence 套件含加了時間戳的 MIDI 資料列表,例如可從標準 MIDI 檔案讀取的資料。多數 sequencer 還提供創建和編輯 sequence 的功能。
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 |
欄位詳細資訊 |
---|
static final int LOOP_CONTINUOUSLY
setLoopCount(int)
,
常數欄位值方法詳細資訊 |
---|
void setSequence(Sequence sequence) throws InvalidMidiDataException
此方法即使在 Sequencer
關閉時也可調用。
sequence
- 要載入的 sequence。
InvalidMidiDataException
- 如果該 sequence 套件含無效的 MIDI 資料或不受支持的資料。void setSequence(InputStream stream) throws IOException, InvalidMidiDataException
此方法即使在 Sequencer
關閉時也可調用。
stream
- 套件含 MIDI 檔案資料的串流。
IOException
- 如果讀取串流時發生 I/O 異常。
InvalidMidiDataException
- 如果在串流中遇到無效資料,或者串流不受支持。Sequence getSequence()
此方法即使在 Sequencer
關閉時也可調用。
null
。void start()
setLoopCount
中設置的重複次數。此後,如果循環計數為 0,則回放將繼續播放直到 sequence 末尾。
該實作確保合成器在跳轉到循環開始點時通過發送合適的控制元件、彎音和程序更改事件來保持一致的狀態。
IllegalStateException
- 如果 Sequencer
已關閉。setLoopStartPoint(long)
,
setLoopEndPoint(long)
,
setLoopCount(int)
,
stop()
void stop()
IllegalStateException
- 如果 Sequencer
已關閉。start()
,
isRunning()
boolean isRunning()
false
。Sequencer 在調用 start()
或 startRecording()
之一時開始運行。然後 isRunning
返回 true
,直到 sequence 的回放完成或調用了 stop()
。
true
;否則返回 false
void startRecording()
注意,預設不允許軌道進行錄製。為了錄製 MIDI 資料,必須至少指定一個軌道允許錄製。
IllegalStateException
- 如果 Sequencer
已關閉。startRecording()
,
recordEnable(javax.sound.midi.Track, int)
,
recordDisable(javax.sound.midi.Track)
void stopRecording()
IllegalStateException
- 如果 Sequencer
已關閉。startRecording()
,
isRecording()
boolean isRecording()
false
。Sequencer 在 startRecording()
調用時開始錄製,然後在調用 stop()
或 stopRecording()
前,此方法返回 true
。
true
;否則返回 false
void recordEnable(Track track, int channel)
track
- 要錄製事件的軌道channel
- 接收其上事件的通道。如果通道值指定為 -1,則軌道將從所有通道接收資料。
IllegalArgumentException
- 如果 track 不是當前 sequence 的一部分。void recordDisable(Track track)
track
- 要禁止錄製的軌道,或為 null
以禁止錄製到所有軌道。float getTempoInBPM()
getTempoFactor()
,
setTempoInBPM(float)
,
getTempoInMPQ()
void setTempoInBPM(float bpm)
bpm
- 所需的新速度,以每分鐘的拍數為單位getTempoFactor()
,
setTempoInMPQ(float)
,
getTempoInBPM()
float getTempoInMPQ()
getTempoFactor()
,
setTempoInMPQ(float)
,
getTempoInBPM()
void setTempoInMPQ(float mpq)
mpq
- 所需的新速度,以每四分音符的微秒數為單位。getTempoFactor()
,
setTempoInBPM(float)
,
getTempoInMPQ()
void setTempoFactor(float factor)
getTempoInMPQ()
和 getTempoInBPM()
返回的值。這些值指示提高速度前的速度。
注意,在使用外部同步時無法調整速度因子。這種情況下,setTempoFactor
始終將速度因子設置為 1.0。
factor
- 所請求的速度標量getTempoFactor()
float getTempoFactor()
setTempoFactor(float)
long getTickLength()
long getTickPosition()
Sequence
中的定時精度確定。)
setTickPosition(long)
void setTickPosition(long tick)
tick
- 所需的節拍位置getTickPosition()
long getMicrosecondLength()
long getMicrosecondPosition()
MidiDevice
中的 getMicrosecondPosition
setMicrosecondPosition(long)
void setMicrosecondPosition(long microseconds)
microseconds
- 所需的位置,以微秒為單位getMicrosecondPosition()
void setMasterSyncMode(Sequencer.SyncMode sync)
sync
的值。sync
參數必須是所支持的網要之一,如 getMasterSyncModes()
返回的結果。
sync
- 所需的主同步網要Sequencer.SyncMode.INTERNAL_CLOCK
,
Sequencer.SyncMode.MIDI_SYNC
,
Sequencer.SyncMode.MIDI_TIME_CODE
,
getMasterSyncMode()
Sequencer.SyncMode getMasterSyncMode()
setMasterSyncMode(Sequencer.SyncMode)
,
getMasterSyncModes()
Sequencer.SyncMode[] getMasterSyncModes()
Sequencer.SyncMode.INTERNAL_CLOCK
,
Sequencer.SyncMode.MIDI_SYNC
,
Sequencer.SyncMode.MIDI_TIME_CODE
,
getMasterSyncMode()
,
setMasterSyncMode(Sequencer.SyncMode)
void setSlaveSyncMode(Sequencer.SyncMode sync)
sync
參數必須是所支持的網要之一,如 getSlaveSyncModes()
返回的結果。
sync
- 所需的從同步網要Sequencer.SyncMode.MIDI_SYNC
,
Sequencer.SyncMode.MIDI_TIME_CODE
,
Sequencer.SyncMode.NO_SYNC
,
getSlaveSyncModes()
Sequencer.SyncMode getSlaveSyncMode()
setSlaveSyncMode(Sequencer.SyncMode)
,
getSlaveSyncModes()
Sequencer.SyncMode[] getSlaveSyncModes()
Sequencer.SyncMode.MIDI_SYNC
,
Sequencer.SyncMode.MIDI_TIME_CODE
,
Sequencer.SyncMode.NO_SYNC
void setTrackMute(int track, boolean mute)
getTrackMute(int)
。
track
- 軌道號。當前 sequence 中的軌道從 0 到 sequence 中的軌道數減 1 來編號。mute
- 軌道的新靜音狀態。true
表示軌道應靜音,false
表示軌道應為非靜音。getSequence()
boolean getTrackMute(int track)
track
- 軌道號。當前 sequence 中的軌道從 0 到 sequence 中的軌道數減 1 來編號。
true
;如果未靜音,則返回 false
。void setTrackSolo(int track, boolean solo)
solo
為 true
,則只有此軌道及其他 solo 軌道可發聲。如果 solo
為 false
,則只有其他 solo 軌道可發聲,如果沒有任何 solo 軌道,則所有非靜音軌道都發聲。
此方法可能由於某些原因而失敗。例如,所指定的軌道號可能對於當前 sequence 無效,或者 sequencer 可能不支持此功能。需要驗證此操作是否成功的應用程序應在此調用後調用
。
getTrackSolo(int)
track
- 軌道號。當前 sequence 中的軌道從 0 到 sequence 中的軌道數減 1 來編號。solo
- 軌道的新 solo 狀態。true
表示軌道應為 solo,false
表示軌道應為非 solo。getSequence()
boolean getTrackSolo(int track)
track
- 軌道號。當前 sequence 中的軌道從 0 到 sequence 中的軌道數減 1 來編號。
true
;如果不是,則返回 false
。boolean addMetaEventListener(MetaEventListener listener)
listener
- 要添加的偵聽器
true
;否則返回 false
removeMetaEventListener(javax.sound.midi.MetaEventListener)
,
MetaEventListener
,
MetaMessage
void removeMetaEventListener(MetaEventListener listener)
listener
- 要移除的元事件偵聽器addMetaEventListener(javax.sound.midi.MetaEventListener)
int[] addControllerEventListener(ControllerEventListener listener, int[] controllers)
controllers
參數指定,該參數應包含一個 MIDI 控制元件號的陣列。(每個編號應該是 0 到 127(包括)之間的一個數。請參見 MIDI 1.0 規範中與各種型別控制元件對應的編號。)
返回的陣列包含 MIDI 控制元件號,偵聽器將從現在開始接收其事件。有些 sequencer 可能不支持控制元件事件通知,這種情況下陣列長度為 0。其他 sequencer 可能支持某些控制元件的通知,但不是全部。此方法可重複調用。每次調用時,返回的陣列都指示偵聽器將接收其通知的所有控制元件,而不僅僅是在該特定調用中請求的控制元件。
listener
- 要添加到已註冊偵聽器列表中的控制元件事件偵聽器controllers
- 為其請求更改通知的 MIDI 控制元件號
removeControllerEventListener(javax.sound.midi.ControllerEventListener, int[])
,
ControllerEventListener
int[] removeControllerEventListener(ControllerEventListener listener, int[] controllers)
controllers
參數使用一個 MIDI 號的陣列,與偵聽器將不再接收其更改通知的控制元件對應。要將此偵聽器從已註冊偵聽器列表中徹底移除,可為 controllers
傳遞 null
。返回的陣列包含 MIDI 控制元件號,偵聽器將從現在開始接收其事件。如果偵聽器將不接收任何控制元件的更改通知,則陣列長度為 0。
listener
- 舊的偵聽器controllers
- 應為其取消更改通知的 MIDI 控制元件號,或者為 null
以取消所有的控制元件
addControllerEventListener(javax.sound.midi.ControllerEventListener, int[])
void setLoopStartPoint(long tick)
起始點的值為 0 表示已載入 sequence 的開始。起始點必須小於或等於結束點,並且必須位於已載入 sequence 的大小內。
Sequencer 的循環起始點預設為 sequence 的開始。
tick
- 循環的起始位置,以 MIDI 節拍為單位(從零開始)
IllegalArgumentException
- 如果所請求的循環起始點無法設置,通常是因為位於 sequence 的持續時間之外或起始點在結束點之後setLoopEndPoint(long)
,
setLoopCount(int)
,
getLoopStartPoint()
,
start()
long getLoopStartPoint()
setLoopStartPoint(long)
void setLoopEndPoint(long tick)
結束點值為 -1 指示 sequence 的最後節拍。否則,結束點必須大於或等於起始點,並且必須位於已載入 sequence 的大小內。
Sequencer 的循環結束點預設為 -1,表示 sequence 的結束點。
tick
- 循環的結束位置,以 MIDI 節拍為單位(從零開始),-1 指示結束點節拍
IllegalArgumentException
- 如果所請求的循環點無法設置,通常是因為位於 sequence 的持續時間之外或結束點在起始點之前setLoopStartPoint(long)
,
setLoopCount(int)
,
getLoopEndPoint()
,
start()
long getLoopEndPoint()
setLoopEndPoint(long)
void setLoopCount(int count)
count
次,此後回放將繼續播放,直到 sequence 的結束點為止。
如果此方法調用時,當前位置大於循環結束點,則回放會繼續進行至 sequence 的結束點而不循環,除非隨後更改了循環結束點。
count
值為 0 可禁用循環:回放將在循環結束點繼續,不會返回到循環起始點。這是 sequencer 的預設方式。
如果回放在循環時停止,則當前循環狀態被清除;後續開始請求不受已中斷循環操作的影響。
count
- 回放應從循環結束點返回循環起始點的次數,或 LOOP_CONTINUOUSLY
指示循環應一直繼續直到被中斷
IllegalArgumentException
- 如果 count
為負且不等於 LOOP_CONTINUOUSLY
setLoopStartPoint(long)
,
setLoopEndPoint(long)
,
getLoopCount()
,
start()
int getLoopCount()
setLoopCount(int)
,
start()
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。