- 所有父级接口:
AutoCloseable,MidiDevice
sequence 的硬件或软件设备称为 sequencer。 MIDI 序列包含带时间戳的 MIDI 数据列表,例如可以从标准 MIDI 文件中读取的数据。大多数音序器还提供创建和编辑音序的功能。
Sequencer 接口包括以下基本 MIDI 音序器操作的方法:
- 从 MIDI 文件数据中获取序列
- 开始和停止播放
- 移动到序列中的任意位置
- 改变播放的节奏(速度)
- 将播放同步到内部时钟或接收到的 MIDI 消息
- 控制另一个设备的时间
Sequencer 有权访问的对象间接支持以下操作:
- 通过添加或删除单个 MIDI 事件或整个轨道来编辑数据
- 静音或独奏序列中的单个轨道
- 通知监听对象有关播放序列时遇到的任何元事件或控制更改事件
- 参见:
-
内部类总结
内部类在接口 javax.sound.midi.MidiDevice 中声明的嵌套类/接口
MidiDevice.Info -
字段摘要
字段 -
方法总结
修饰符和类型方法描述int[]addControllerEventListener(ControllerEventListener listener, int[] controllers) 注册控制器事件监听,以便在定序器处理请求类型或类型的控制更改事件时接收通知。booleanaddMetaEventListener(MetaEventListener listener) 注册元事件监听以在序列中遇到元事件并由排序器处理时接收通知。int获取播放的重复次数。long获取循环的结束位置,以 MIDI 节拍为单位。long获取循环的开始位置,以 MIDI 节拍为单位。获取此定序器的当前主同步模式。获得此定序器支持的主同步模式集。long获取当前序列的长度,单位为微秒,如果没有设置序列则为0。long获取序列中的当前位置,以微秒表示。获取 Sequencer 当前运行的序列。获取此定序器的当前从属同步模式。获取sequencer支持的slave同步模式集。float返回音序器的当前速度因子。float获取当前速度,以每分钟节拍数表示。float获取当前速度,以每四分音符的微秒数表示。long获取当前序列的长度,以 MIDI 节拍表示,如果未设置序列则为 0。long获取序列中的当前位置,以 MIDI 节拍表示。booleangetTrackMute(int track) 获取轨道的当前静音状态。booleangetTrackSolo(int track) 获取轨道的当前独奏状态。boolean指示音序器当前是否正在录制。boolean指示 Sequencer 当前是否正在运行。voidrecordDisable(Track track) 禁止录制到指定轨道。voidrecordEnable(Track track, int channel) 准备指定的轨道以记录在特定通道上接收到的事件。int[]removeControllerEventListener(ControllerEventListener listener, int[] controllers) 删除控制器事件监听对一种或多种类型的控制器事件的兴趣。voidremoveMetaEventListener(MetaEventListener listener) 从此定序器的已注册监听列表中删除指定的元事件监听(如果监听实际上已注册)。voidsetLoopCount(int count) 设置循环播放的重复次数。voidsetLoopEndPoint(long tick) 设置将在循环中播放的最后一个 MIDI 节拍。voidsetLoopStartPoint(long tick) 设置将在循环中播放的第一个 MIDI 节拍。void设置此音序器使用的计时信息源。voidsetMicrosecondPosition(long microseconds) 设置序列中的当前位置,以微秒表示。voidsetSequence(InputStream stream) 设置音序器运行的当前序列。voidsetSequence(Sequence sequence) 设置音序器运行的当前序列。void设置定序器的从属同步模式。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 数据。void开始录制和播放 MIDI 数据。voidstop()停止录制(如果处于活动状态)和播放当前加载的序列(如果有)。void停止录制(如果处于活动状态)。在接口 javax.sound.midi.MidiDevice 中声明的方法
close, getDeviceInfo, getMaxReceivers, getMaxTransmitters, getReceiver, getReceivers, getTransmitter, getTransmitters, isOpen, open
-
字段详细信息
-
LOOP_CONTINUOUSLY
static final int LOOP_CONTINUOUSLY一个值,表示循环应无限期地继续,而不是在特定数量的循环后完成。- 自从:
- 1.5
- 参见:
-
-
方法详情
-
setSequence
设置音序器运行的当前序列。即使
Sequencer已关闭,也可以调用此方法。- 参数:
sequence- 要加载的序列- 抛出:
InvalidMidiDataException- 如果序列包含无效的 MIDI 数据,或者不受支持
-
setSequence
设置音序器运行的当前序列。流必须指向 MIDI 文件数据。即使
Sequencer已关闭,也可以调用此方法。- 参数:
stream- 包含 MIDI 文件数据的流- 抛出:
IOException- 如果在读取流期间发生 I/O 异常InvalidMidiDataException- 如果在流中遇到无效数据,或者不支持流
-
getSequence
Sequence getSequence()获取 Sequencer 当前运行的序列。即使
Sequencer已关闭,也可以调用此方法。- 返回:
-
当前序列,或者
null如果当前没有设置序列
-
start
void start()开始播放当前加载序列中的 MIDI 数据。播放将从当前位置开始。如果播放位置到达循环结束点,并且循环计数大于 0,则播放将在循环开始点继续播放setLoopCount设置的重复次数。之后,或者如果循环计数为 0,播放将继续播放到序列的末尾。该实现通过发送适当的控制器、弯音和程序更改事件确保在跳转到循环起点时合成器处于一致状态。
- 抛出:
IllegalStateException- 如果Sequencer关闭- 参见:
-
stop
void stop()停止录制(如果处于活动状态)和播放当前加载的序列(如果有)。- 抛出:
IllegalStateException- 如果Sequencer关闭- 参见:
-
isRunning
boolean isRunning()指示 Sequencer 当前是否正在运行。默认值为false。当start()或startRecording()被调用时,Sequencer 开始运行。isRunning然后返回true,直到序列播放完成或调用stop()。- 返回:
true如果 Sequencer 正在运行,否则false
-
startRecording
void startRecording()开始录制和播放 MIDI 数据。数据被记录到所有启用的轨道,在它们被启用的通道上。录音从音序器的当前位置开始。在录制会话期间,轨道中已有的任何事件都将被重写。来自当前加载序列的事件(如果有的话)与录制期间收到的消息一起传送到音序器的发射器。请注意,默认情况下不会启用轨道进行录制。为了录制 MIDI 数据,至少必须专门启用一个音轨进行录制。
- 抛出:
IllegalStateException- 如果Sequencer关闭- 参见:
-
stopRecording
void stopRecording()停止录制(如果处于活动状态)。继续播放当前序列。- 抛出:
IllegalStateException- 如果Sequencer关闭- 参见:
-
isRecording
boolean isRecording()指示音序器当前是否正在录制。默认值为false。 Sequencer 在调用startRecording()时开始记录,然后返回true直到调用stop()或stopRecording()。- 返回:
true如果音序器正在录制,否则false
-
recordEnable
准备指定的轨道以记录在特定通道上接收到的事件。启用后,轨道将在记录处于活动状态时接收事件。- 参数:
track- 记录事件的轨道channel- 接收事件的通道。如果通道值指定为 -1,轨道将从所有通道接收数据。- 抛出:
IllegalArgumentException- 如果轨道不是当前序列的一部分则抛出
-
recordDisable
禁止录制到指定轨道。事件将不再记录到该轨道中。- 参数:
track- 禁用录制的轨道,或null禁用所有轨道的录制
-
getTempoInBPM
float getTempoInBPM()获取当前速度,以每分钟节拍数表示。播放的实际速度是返回值和速度因子的乘积。- 返回:
- 当前节奏(以每分钟节拍数为单位)
- 参见:
-
setTempoInBPM
void setTempoInBPM(float bpm) 以每分钟节拍数设置速度。实际播放速度是指定值和速度因子的乘积。- 参数:
bpm- 以每分钟节拍为单位的所需新节奏- 参见:
-
getTempoInMPQ
float getTempoInMPQ()获取当前速度,以每四分音符的微秒数表示。播放的实际速度是返回值和速度因子的乘积。- 返回:
- 当前速度以每四分音符微秒为单位
- 参见:
-
setTempoInMPQ
void setTempoInMPQ(float mpq) 以每四分音符的微秒为单位设置速度。实际播放速度是指定值和速度因子的乘积。- 参数:
mpq- 每四分音符所需的新速度(以微秒为单位)- 参见:
-
setTempoFactor
void setTempoFactor(float factor) 按提供的系数缩放音序器的实际播放速度。默认值为 1.0。值 1.0 表示自然速率(序列中指定的速度),2.0 表示快两倍,等等。速度因子不影响getTempoInMPQ()和getTempoInBPM()返回的值。这些值表示缩放之前的速度。请注意,使用外部同步时无法调整速度因子。在这种情况下,
setTempoFactor总是将速度因子设置为 1.0。- 参数:
factor- 请求的速度标量- 参见:
-
getTempoFactor
float getTempoFactor()返回音序器的当前速度因子。默认值为 1.0。- 返回:
- 节奏因素
- 参见:
-
getTickLength
long getTickLength()获取当前序列的长度,以 MIDI 节拍表示,如果未设置序列则为 0。- 返回:
- 以滴答为单位的序列长度
-
getTickPosition
long getTickPosition()获取序列中的当前位置,以 MIDI 节拍表示。 (以秒为单位的滴答持续时间由速度和存储在Sequence中的计时分辨率决定。)- 返回:
- 当前 tick
- 参见:
-
setTickPosition
void setTickPosition(long tick) 以 MIDI 节拍设置当前音序器位置。- 参数:
tick- 所需的刻度位置- 参见:
-
getMicrosecondLength
long getMicrosecondLength()获取当前序列的长度,单位为微秒,如果没有设置序列则为0。- 返回:
- 序列的长度(以微秒为单位)
-
getMicrosecondPosition
long getMicrosecondPosition()获取序列中的当前位置,以微秒表示。- 指定者:
getMicrosecondPosition在接口MidiDevice中- 返回:
- 当前位置(以微秒为单位)
- 参见:
-
setMicrosecondPosition
void setMicrosecondPosition(long microseconds) 设置序列中的当前位置,以微秒表示。- 参数:
microseconds- 以微秒为单位的所需位置- 参见:
-
setMasterSyncMode
设置此音序器使用的计时信息源。音序器与主时钟同步,主时钟是内部时钟、MIDI 时钟或 MIDI 时间码,具体取决于sync的值。sync参数必须是支持的模式之一,由getMasterSyncModes()返回。- 参数:
sync- 所需的主同步模式- 参见:
-
getMasterSyncMode
Sequencer.SyncMode getMasterSyncMode()获取此定序器的当前主同步模式。- 返回:
- 当前主同步模式
- 参见:
-
getMasterSyncModes
Sequencer.SyncMode [] getMasterSyncModes()获得此定序器支持的主同步模式集。- 返回:
- 可用的主同步模式
- 参见:
-
setSlaveSyncMode
设置定序器的从属同步模式。这指示定序器发送到其接收器的定时信息的类型。sync参数必须是支持的模式之一,由getSlaveSyncModes()返回。- 参数:
sync- 所需的从机同步模式- 参见:
-
getSlaveSyncMode
Sequencer.SyncMode getSlaveSyncMode()获取此定序器的当前从属同步模式。- 返回:
- 当前从同步模式
- 参见:
-
getSlaveSyncModes
Sequencer.SyncMode [] getSlaveSyncModes()获取sequencer支持的slave同步模式集。- 返回:
- 可用的从属同步模式
- 参见:
-
setTrackMute
void setTrackMute(int track, boolean mute) 设置轨道的静音状态。由于多种原因,此方法可能会失败。例如,指定的轨道号可能对当前序列无效,或者音序器可能不支持此功能。需要验证此操作是否成功的应用程序应在此调用之后调用getTrackMute(int)。- 参数:
track- 曲目编号。当前序列中的曲目编号从 0 到序列中的曲目数减 1。mute- 轨道的新静音状态。true表示轨道应该静音,false表示轨道应该取消静音。- 参见:
-
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表示不应单独播放该曲目。- 参见:
-
getTrackSolo
boolean getTrackSolo(int track) 获取轨道的当前独奏状态。所有未独奏的轨道的默认静音状态为 false。在任何情况下指定的曲目没有被独奏,这个方法应该返回 false。如果音序器不支持轨道独奏,并且指定的轨道索引无效,则这适用。- 参数:
track- 曲目编号。当前序列中的曲目编号从 0 到序列中的曲目数减 1。- 返回:
true如果单打,false如果没有
-
addMetaEventListener
注册元事件监听器以在序列中遇到元事件并由排序器处理时接收通知。例如,如果此类定序器不支持元事件通知,则此方法可能会失败。- 参数:
listener- 要添加的监听器- 返回:
true如果监听器添加成功,否则false- 参见:
-
removeMetaEventListener
从此定序器的已注册监听列表中删除指定的元事件监听(如果监听实际上已注册)。- 参数:
listener- 要删除的元事件监听器- 参见:
-
addControllerEventListener
注册控制器事件监听器,以便在定序器处理请求类型或类型的控制更改事件时接收通知。类型由controllers参数指定,该参数应包含 MIDI 控制器编号数组。 (每个数字应介于 0 和 127 之间,包括 0 和 127。请参阅 MIDI 1.0 规范以了解与各种类型的控制器相对应的数字。)返回的数组包含 MIDI 控制器编号,监听现在将为其接收事件。一些定序器可能不支持控制器事件通知,在这种情况下,数组的长度为 0。其他定序器可能支持某些控制器的通知,但不是全部。该方法可能会被重复调用。每次,返回的数组指示将通知监听的所有控制器,而不仅仅是在该特定调用中请求的控制器。
- 参数:
listener- 添加到已注册监听器列表的控制器事件监听器controllers- 请求更改通知的 MIDI 控制器编号- 返回:
- 现在将向指定监听报告其更改的所有 MIDI 控制器的编号
- 参见:
-
removeControllerEventListener
删除控制器事件监听器对一种或多种类型的控制器事件的兴趣。controllers参数是一个 MIDI 编号数组,对应于监听器不应再接收更改通知的控制器。要从已注册监听器列表中完全删除此监听器,请为controllers传入null。返回的数组包含 MIDI 控制器编号,监听器现在将为其接收事件。如果监听器不会收到任何控制器的更改通知,则该数组的长度为 0。- 参数:
listener- 老听众controllers- 应取消更改通知的 MIDI 控制器编号,或null取消所有控制器- 返回:
- 现在将向指定监听报告其更改的所有 MIDI 控制器的编号
- 参见:
-
setLoopStartPoint
void setLoopStartPoint(long tick) 设置将在循环中播放的第一个 MIDI 节拍。如果循环次数大于0,则播放到循环结束点时会跳转到该点。起点值为 0 表示加载序列的开始。起点必须小于或等于终点,并且必须在加载序列的大小范围内。
音序器的循环起点默认为序列的开始。
- 参数:
tick- 循环的起始位置,以 MIDI 节拍为单位(从零开始)- 抛出:
IllegalArgumentException- 如果无法设置请求的循环起点,通常是因为它超出了序列的持续时间或者因为起点在终点之后- 自从:
- 1.5
- 参见:
-
getLoopStartPoint
long getLoopStartPoint()获取循环的开始位置,以 MIDI 节拍为单位。- 返回:
- 循环的开始位置,以 MIDI 节拍为单位(从零开始)
- 自从:
- 1.5
- 参见:
-
setLoopEndPoint
void setLoopEndPoint(long tick) 设置将在循环中播放的最后一个 MIDI 节拍。如果循环计数为 0,则循环结束点无效,播放到达循环结束点时继续播放。结束点的值 -1 表示序列的最后一个记号。否则,终点必须大于或等于起点,并且必须落在加载序列的大小之内。
音序器的循环结束点默认为 -1,表示序列结束。
- 参数:
tick- 循环的结束位置,以 MIDI 节拍(从零开始)或 -1 表示最终节拍- 抛出:
IllegalArgumentException- 如果无法设置请求的循环点,通常是因为它超出了序列的持续时间或者因为结束点在开始点之前- 自从:
- 1.5
- 参见:
-
getLoopEndPoint
long getLoopEndPoint()获取循环的结束位置,以 MIDI 节拍为单位。- 返回:
- 循环的结束位置,以 MIDI 节拍(从零开始)为单位,或 -1 表示序列结束
- 自从:
- 1.5
- 参见:
-
setLoopCount
void setLoopCount(int count) 设置循环播放的重复次数。当播放位置到达循环终点时,将循环回到循环起点count次,之后继续播放至序列结尾。如果调用此方法时的当前位置大于循环结束点,则播放将继续播放到序列的末尾而不循环,除非随后更改循环结束点。
count值为 0 将禁用循环:播放将在循环结束点继续,并且不会循环回到循环开始点。这是音序器的默认值。如果在循环过程中停止播放,则清除当前循环状态;随后的启动请求不受中断循环操作的影响。
- 参数:
count- 播放应该从循环的结束位置循环回到循环的开始位置的次数,或者LOOP_CONTINUOUSLY表示循环应该继续直到被中断- 抛出:
IllegalArgumentException- 如果count为负且不等于LOOP_CONTINUOUSLY- 自从:
- 1.5
- 参见:
-
getLoopCount
int getLoopCount()获取播放的重复次数。- 返回:
- 播放到序列末尾的循环数
- 自从:
- 1.5
- 参见:
-