|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
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()
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()
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. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。