| 
 | JavaTM 2 Platform Standard Ed. 6 | |||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
public interface Sequencer
回放 MIDI sequence
Sequencer 接口包括用于以下基本 MIDI sequencer 操作的方法:
 
Sequencer 可访问的对象支持以下操作:
 
Sequencer.SyncMode, 
addMetaEventListener(javax.sound.midi.MetaEventListener), 
ControllerEventListener, 
Receiver, 
Transmitter, 
MidiDevice| 嵌套类摘要 | |
|---|---|
| static class | Sequencer.SyncModeSyncMode对象表示 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;否则返回 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 中的 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()
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;否则返回 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[]), 
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_CONTINUOUSLYIllegalArgumentException - 如果 count 为负且不等于 LOOP_CONTINUOUSLYsetLoopStartPoint(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。