| 
JavaTM 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;否则返回 falsevoid 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;否则返回 falsevoid 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 中的 getMicrosecondPositionsetMicrosecondPosition(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;否则返回 falseremoveMetaEventListener(javax.sound.midi.MetaEventListener), 
MetaEventListener, 
MetaMessagevoid 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[]), 
ControllerEventListenerint[] 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_CONTINUOUSLYsetLoopStartPoint(long), 
setLoopEndPoint(long), 
getLoopCount(), 
start()int getLoopCount()
setLoopCount(int), 
start()
  | 
JavaTM Platform Standard Ed. 6  | 
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。