-
- All Superinterfaces:
-
AutoCloseable,MidiDevice
public interface Sequencer extends MidiDevice
播放MIDIsequence的硬件或软件设备称为音序器 。 MIDI序列包含带时间戳的MIDI数据列表,例如可以从标准MIDI文件中读取。 大多数序列发生器还提供用于创建和编辑序列的功能。Sequencer接口包括以下基本MIDI音序器操作的方法:- 从MIDI文件数据中获取序列
- 开始和停止播放
- 移动到序列中的任意位置
- 改变播放的速度(速度)
- 将播放同步到内部时钟或接收的MIDI信息
- 控制另一台设备的时间
Sequencer可访问的对象支持以下操作:- 通过添加或删除单个MIDI事件或整个曲目来编辑数据
- 按顺序静音或独奏单个曲目
- 通知侦听器对象有关播放序列时遇到的任何元事件或控件更改事件
-
-
嵌套类汇总
嵌套类 变量和类型 接口 描述 static classSequencer.SyncModeSyncMode对象表示MIDI音序器的时间概念可以与主设备或从设备同步的方式之一。-
Nested classes/interfaces declared in interface javax.sound.midi.MidiDevice
MidiDevice.Info
-
-
字段汇总
字段 变量和类型 字段 描述 static intLOOP_CONTINUOUSLY一个值,指示循环应该无限期地继续而不是在特定数量的循环之后完成。
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 int[]addControllerEventListener(ControllerEventListener listener, int[] controllers)注册控制器事件侦听器,以便在sequencer处理所请求类型的控件更改事件时接收通知。booleanaddMetaEventListener(MetaEventListener listener)注册元事件侦听器,以便在序列中遇到元事件并由sequencer处理时接收通知。intgetLoopCount()获得播放的重复次数。longgetLoopEndPoint()以MIDI刻度获得循环的结束位置。longgetLoopStartPoint()以MIDI刻度获得循环的起始位置。Sequencer.SyncModegetMasterSyncMode()获得此顺控程序的当前主同步模式。Sequencer.SyncMode[]getMasterSyncModes()获得此顺控程序支持的主同步模式集。longgetMicrosecondLength()获得当前序列的长度,以微秒表示,如果未设置序列,则为0。longgetMicrosecondPosition()获得序列中的当前位置,以微秒表示。SequencegetSequence()获取Sequencer当前运行的顺序。Sequencer.SyncModegetSlaveSyncMode()获得此顺控程序的当前从属同步模式。Sequencer.SyncMode[]getSlaveSyncModes()获得定序器支持的一组从同步模式。floatgetTempoFactor()返回音序器的当前速度因子。floatgetTempoInBPM()获得当前速度,以每分钟节拍数表示。floatgetTempoInMPQ()获得当前速度,以每四分音符的微秒数表示。longgetTickLength()获得当前序列的长度,以MIDI刻度表示,如果未设置序列,则为0。longgetTickPosition()获得序列中的当前位置,以MIDI刻度表示。booleangetTrackMute(int track)获得轨道的当前静音状态。booleangetTrackSolo(int track)获得轨道的当前独奏状态。booleanisRecording()指示Sequencer当前是否正在录制。booleanisRunning()指示Sequencer当前是否正在运行。voidrecordDisable(Track track)禁用录制到指定的轨道。voidrecordEnable(Track track, int channel)准备指定的轨道以记录在特定频道上接收的事件。int[]removeControllerEventListener(ControllerEventListener listener, int[] controllers)删除控制器事件侦听器对一种或多种类型的控制器事件的兴趣。voidremoveMetaEventListener(MetaEventListener listener)如果实际上已注册侦听器,则从此sequencer的已注册侦听器列表中删除指定的元事件侦听器。voidsetLoopCount(int count)设置回放循环的重复次数。voidsetLoopEndPoint(long tick)设置将在循环中播放的最后一个MIDI节拍。voidsetLoopStartPoint(long tick)设置将在循环中播放的第一个MIDI节拍。voidsetMasterSyncMode(Sequencer.SyncMode sync)设置此顺控程序使用的计时信息的来源。voidsetMicrosecondPosition(long microseconds)设置序列中的当前位置,以微秒表示。voidsetSequence(InputStream stream)设置顺控程序运行的当前顺序。voidsetSequence(Sequence sequence)设置顺控程序运行的当前顺序。voidsetSlaveSyncMode(Sequencer.SyncMode sync)设置顺控程序的从属同步模式。voidsetTempoFactor(float factor)按提供的系数缩放音序器的实际播放速度。voidsetTempoInBPM(float bpm)以每分钟节拍数设置速度。voidsetTempoInMPQ(float mpq)设置每季度音符的速度,以微秒为单位。voidsetTickPosition(long tick)以MIDI刻度设置当前音序器位置。voidsetTrackMute(int track, boolean mute)设置轨道的静音状态。voidsetTrackSolo(int track, boolean solo)设置轨道的独奏状态。voidstart()开始播放当前加载的序列中的MIDI数据。voidstartRecording()开始录制和播放MIDI数据。voidstop()停止录制(如果有效),并播放当前加载的序列(如果有)。voidstopRecording()停止录制,如果有效。-
声明方法的接口 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- 要加载的序列 - 异常
-
InvalidMidiDataException- 如果序列包含无效的MIDI数据,或者不受支持
-
setSequence
void setSequence(InputStream stream) throws IOException, InvalidMidiDataException
设置顺控程序运行的当前顺序。 流必须指向MIDI文件数据。即使
Sequencer已关闭,也可以调用此方法。- 参数
-
stream- 包含MIDI文件数据的流 - 异常
-
IOException- 如果在读取流期间发生I / O异常 -
InvalidMidiDataException- 如果在流中遇到无效数据,或者不支持流
-
getSequence
Sequence getSequence()
获取Sequencer当前运行的顺序。即使
Sequencer关闭,也可以调用此方法。- 结果
-
当前序列,如果当前没有设置序列,
null
-
start
void start()
开始播放当前加载的序列中的MIDI数据。 播放将从当前位置开始。 如果播放位置到达循环结束点,并且循环计数大于0,则播放将在循环开始点恢复为setLoopCount设置的重复次数。 之后,或者如果循环计数为0,则播放将继续播放到序列的末尾。该实现通过发送适当的控制器,弯音和程序更改事件,确保合成器在跳转到循环起始点时处于一致状态。
- 异常
-
IllegalStateException- 如果Sequencer已关闭 - 另请参见:
-
setLoopStartPoint(long),setLoopEndPoint(long),setLoopCount(int),stop()
-
stop
void stop()
停止录制(如果有效),并播放当前加载的序列(如果有)。- 异常
-
IllegalStateException- 如果Sequencer已关闭 - 另请参见:
-
start(),isRunning()
-
isRunning
boolean isRunning()
指示Sequencer当前是否正在运行。 默认值为false。 当调用start()或startRecording()时,Sequencer开始运行。isRunning然后返回true直到序列的播放完成或调用stop()。- 结果
-
true如果Sequencer正在运行,否则为false
-
startRecording
void startRecording()
开始录制和播放MIDI数据。 数据被记录到启用它们的通道上的所有已启用轨道。 录音从音序器的当前位置开始。 在录制会话期间,已经在轨道中的任何事件都将被覆盖。 来自当前加载的序列的事件(如果有的话)与记录期间接收的消息一起被传送到定序器的发送器。请注意,默认情况下不启用曲目进行录制。 为了记录MIDI数据,必须专门启用至少一个轨道进行记录。
- 异常
-
IllegalStateException- 如果Sequencer已关闭 - 另请参见:
-
recordEnable(javax.sound.midi.Track, int),recordDisable(javax.sound.midi.Track)
-
stopRecording
void stopRecording()
停止录制,如果有效。 继续播放当前序列。- 异常
-
IllegalStateException- 如果Sequencer已关闭 - 另请参见:
-
startRecording(),isRecording()
-
isRecording
boolean isRecording()
指示Sequencer当前是否正在录制。 默认值为false。 当调用startRecording()时,序列发生器开始记录,然后返回true直到调用stop()或stopRecording()。- 结果
-
true如果定序器记录,否则false
-
recordEnable
void recordEnable(Track track, int channel)
准备指定的轨道以记录在特定频道上接收的事件。 启用后,轨道将在录制处于活动状态时接收事件。- 参数
-
track- 将记录事件的轨道 -
channel- 将接收事件的频道。 如果为通道值指定了-1,则轨道将从所有通道接收数据。 - 异常
-
IllegalArgumentException- 如果轨道不是当前序列的一部分,则抛出
-
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)
按提供的系数缩放音序器的实际播放速度。 默认值为1.0。 值1.0表示自然速率(序列中指定的速度),2.0表示速度的两倍等。速度因子不影响getTempoInMPQ()和getTempoInBPM()返回的值。 这些值表示缩放前的速度。请注意,使用外部同步时无法调整速度因子。 在这种情况下,
setTempoFactor始终将速度因子设置为1.0。- 参数
-
factor- 请求的速度标量 - 另请参见:
-
getTempoFactor()
-
getTempoFactor
float getTempoFactor()
返回音序器的当前速度因子。 默认值为1.0。- 结果
- 节奏因素
- 另请参见:
-
setTempoFactor(float)
-
getTickLength
long getTickLength()
获得当前序列的长度,以MIDI刻度表示,如果未设置序列,则为0。- 结果
- 刻度中序列的长度
-
getTickPosition
long getTickPosition()
- 结果
- 目前的勾号
- 另请参见:
-
setTickPosition(long)
-
setTickPosition
void setTickPosition(long tick)
以MIDI刻度设置当前音序器位置。- 参数
-
tick- 所需的刻度位置 - 另请参见:
-
getTickPosition()
-
getMicrosecondLength
long getMicrosecondLength()
获得当前序列的长度,以微秒表示,如果未设置序列,则为0。- 结果
- 序列的长度,以微秒为单位
-
getMicrosecondPosition
long getMicrosecondPosition()
获得序列中的当前位置,以微秒表示。- Specified by:
-
getMicrosecondPosition在接口MidiDevice - 结果
- 当前位置以微秒为单位
- 另请参见:
-
setMicrosecondPosition(long)
-
setMicrosecondPosition
void setMicrosecondPosition(long microseconds)
设置序列中的当前位置,以微秒表示。- 参数
-
microseconds- 所需的位置,以微秒为单位 - 另请参见:
-
getMicrosecondPosition()
-
setMasterSyncMode
void setMasterSyncMode(Sequencer.SyncMode sync)
设置此顺控程序使用的计时信息的来源。 音序器与主控器同步,即内部时钟,MIDI时钟或MIDI时间码,具体取决于sync的值。sync参数必须是受支持的模式之一,由getMasterSyncModes()返回。- 参数
-
sync- 所需的主同步模式 - 另请参见:
-
Sequencer.SyncMode.INTERNAL_CLOCK,Sequencer.SyncMode.MIDI_SYNC,Sequencer.SyncMode.MIDI_TIME_CODE,getMasterSyncMode()
-
getMasterSyncMode
Sequencer.SyncMode getMasterSyncMode()
获得此顺控程序的当前主同步模式。- 结果
- 当前的主同步模式
- 另请参见:
-
setMasterSyncMode(SyncMode),getMasterSyncModes()
-
getMasterSyncModes
Sequencer.SyncMode[] getMasterSyncModes()
获得此顺控程序支持的主同步模式集。
-
setSlaveSyncMode
void setSlaveSyncMode(Sequencer.SyncMode sync)
- 参数
-
sync- 所需的从属同步模式 - 另请参见:
-
Sequencer.SyncMode.MIDI_SYNC,Sequencer.SyncMode.MIDI_TIME_CODE,Sequencer.SyncMode.NO_SYNC,getSlaveSyncModes()
-
getSlaveSyncMode
Sequencer.SyncMode getSlaveSyncMode()
获得此顺控程序的当前从属同步模式。- 结果
- 当前的从属同步模式
- 另请参见:
-
setSlaveSyncMode(SyncMode),getSlaveSyncModes()
-
getSlaveSyncModes
Sequencer.SyncMode[] getSlaveSyncModes()
获得定序器支持的一组从同步模式。- 结果
- 可用的从属同步模式
- 另请参见:
-
Sequencer.SyncMode.MIDI_SYNC,Sequencer.SyncMode.MIDI_TIME_CODE,Sequencer.SyncMode.NO_SYNC
-
setTrackMute
void setTrackMute(int track, boolean mute)设置轨道的静音状态。 此方法可能由于多种原因而失败。 例如,指定的轨道号可能对当前序列无效,或者序列发生器可能不支持此功能。 需要验证此操作是否成功的应用程序应该通过调用getTrackMute(int)来跟随此调用。- 参数
-
track- 曲目编号。 当前序列中的轨道编号从0到序列中的轨道数减1。 -
mute- 轨道的新静音状态。true暗示轨道应静音,false暗示轨道应取消静音。 - 另请参见:
-
getSequence()
-
getTrackMute
boolean getTrackMute(int track)
获得轨道的当前静音状态。 所有尚未静音的音轨的默认静音状态为false。 在指定轨道未被静音的任何情况下,此方法应返回false。 如果音序器不支持音轨静音,并且指定的音轨索引无效,则适用。- 参数
-
track- 曲目编号。 当前序列中的轨道编号从0到序列中的轨道数减1。 - 结果
-
true如果静音,false如果没有
-
setTrackSolo
void setTrackSolo(int track, boolean solo)设置轨道的独奏状态。 如果solo是true只有此曲目和其他独奏曲目会响起。 如果solo是false那么只有其他独奏曲目会响起,除非没有曲目独奏,在这种情况下所有未静音的曲目都会响起。此方法可能由于多种原因而失败。 例如,指定的轨道号可能对当前序列无效,或者序列发生器可能不支持此功能。 需要验证此操作是否成功的应用程序应通过调用
getTrackSolo(int)进行此调用。- 参数
-
track- 曲目编号。 当前序列中的轨道编号从0到序列中的轨道数减1。 -
solo- 赛道的新独奏状态。true暗示该曲目应该独奏,false暗示曲目不应该独奏。 - 另请参见:
-
getSequence()
-
getTrackSolo
boolean getTrackSolo(int track)
获得轨道的当前独奏状态。 所有尚未独奏的曲目的默认静音状态为false。 在任何未单独指定轨道的情况下,此方法应返回false。 如果音序器不支持曲目的独奏,并且指定的音轨索引无效,则这适用。- 参数
-
track- 曲目编号。 当前序列中的轨道编号从0到序列中的轨道数减1。 - 结果
-
true如果没有,false如果没有
-
addMetaEventListener
boolean addMetaEventListener(MetaEventListener listener)
注册元事件侦听器,以便在序列中遇到元事件并由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控制器编号。 某些顺控程序可能不支持控制器事件通知,在这种情况下,数组的长度为0.其他顺控程序可能支持某些控制器的通知,但不支持所有控制器的通知。 可以重复调用此方法。 每次返回的数组都指示将通知侦听器的所有控制器,而不仅仅是该特定调用中请求的控制器。
- 参数
-
listener- 要添加到已注册侦听器列表的控制器事件侦听器 -
controllers- 请求更改通知的MIDI控制器编号 - 结果
- 现在将更改报告给指定侦听器的所有MIDI控制器的编号
- 另请参见:
-
removeControllerEventListener(javax.sound.midi.ControllerEventListener, int[]),ControllerEventListener
-
removeControllerEventListener
int[] removeControllerEventListener(ControllerEventListener listener, int[] controllers)
删除控制器事件侦听器对一种或多种类型的控制器事件的兴趣。controllers参数是一个MIDI数字数组,对应于侦听器不应再接收更改通知的控制器。 要从已注册的侦听器列表中完全删除此侦听器,请传入null以获取controllers。 返回的数组包含侦听器现在将接收事件的MIDI控制器编号。 如果侦听器不接收任何控制器的更改通知,则数组的长度为0。- 参数
-
listener- 老听众 -
controllers- 应取消更改通知的MIDI控制器编号,或取消所有控制器的null - 结果
- 现在将更改报告给指定侦听器的所有MIDI控制器的编号
- 另请参见:
-
addControllerEventListener(javax.sound.midi.ControllerEventListener, int[])
-
setLoopStartPoint
void setLoopStartPoint(long tick)
设置将在循环中播放的第一个MIDI节拍。 如果循环计数大于0,则在到达循环结束点时,播放将跳转到此点。起始点的值为0表示加载序列的开始。 起点必须小于或等于终点,并且必须落在加载序列的大小范围内。
序列发生器的循环起始点默认为序列的开始。
- 参数
-
tick- 循环的起始位置,以MIDI刻度(从零开始) - 异常
-
IllegalArgumentException- 如果无法设置请求的循环起始点,通常是因为它超出了序列的持续时间,或者因为起点位于结束点之后 - 从以下版本开始:
- 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表示序列的最后一个滴答。 否则,结束点必须大于或等于起始点,并且必须落在加载序列的大小范围内。
定序器的循环结束点默认为-1,表示序列的结束。
- 参数
-
tick- 循环结束位置,以MIDI刻度(从零开始)或-1表示最终刻度 - 异常
-
IllegalArgumentException- 如果无法设置请求的循环点,通常是因为它超出了序列的持续时间,或者因为结束点在起始点之前 - 从以下版本开始:
- 1.5
- 另请参见:
-
setLoopStartPoint(long),setLoopCount(int),getLoopEndPoint(),start()
-
getLoopEndPoint
long getLoopEndPoint()
以MIDI刻度获得循环的结束位置。- 结果
- 循环的结束位置,以MIDI刻度(从零开始)或-1表示序列的结束
- 从以下版本开始:
- 1.5
- 另请参见:
-
setLoopEndPoint(long)
-
setLoopCount
void setLoopCount(int count)
设置回放循环的重复次数。 当播放位置到达循环结束点时,它将循环回到循环起始点count次,之后播放将继续播放到序列的结尾。如果调用此方法时的当前位置大于循环结束点,则播放将继续到序列的末尾而不进行循环,除非随后更改循环结束点。
count值为0将禁用循环:回放将在循环结束点继续,并且不会循环回到循环起始点。 这是音序器的默认值。如果在循环期间停止播放,则清除当前循环状态; 后续启动请求不受中断循环操作的影响。
- 参数
-
count- 播放应从循环结束位置循环回循环开始位置的次数,或LOOP_CONTINUOUSLY表示循环应继续直到中断 - 异常
-
IllegalArgumentException- 如果count为负数且不等于LOOP_CONTINUOUSLY - 从以下版本开始:
- 1.5
- 另请参见:
-
setLoopStartPoint(long),setLoopEndPoint(long),getLoopCount(),start()
-
getLoopCount
int getLoopCount()
获得播放的重复次数。- 结果
- 循环播放到序列末尾的循环数
- 从以下版本开始:
- 1.5
- 另请参见:
-
setLoopCount(int),start()
-
-