所有类


javax.sound.midi
接口 Sequencer

所有超级接口:
MidiDevice

public interface Sequencer
   
   
   
   
   
extends MidiDevice

回放 MIDI sequence 的硬件或软件设备就是所谓的 sequencer。MIDI sequence 包含加了时间戳的 MIDI 数据列表,例如可从标准 MIDI 文件读取的数据。多数 sequencer 还提供创建和编辑 sequence 的功能。

Sequencer 接口包括用于以下基本 MIDI sequencer 操作的方法:

  • 从 MIDI 文件数据获取一个 sequence
  • 开始和停止回放
  • 移动到 sequence 中的任意位置
  • 更改回放速度
  • 将回放与内部时钟或接收到的 MIDI 消息同步
  • 控制另一个设备的定时
另外还以直接或间接的方式,通过 Sequencer 可访问的对象支持以下操作:
  • 通过添加或删除单独 MIDI 事件或整个轨道来编辑数据
  • 对 sequence 中的单独轨道静音或执行独奏
  • 通知 listener 对象有关回放 sequence 时遇到的任何元事件或控制更改事件。

另请参见:
Sequencer.SyncMode, addMetaEventListener(javax.sound.midi.MetaEventListener), ControllerEventListener, Receiver, Transmitter, MidiDevice

嵌套类摘要
static classSequencer.SyncMode
          SyncMode 对象表示 MIDI sequencer 的时间标记可与主或从设备同步的方式之一。
 
从接口 javax.sound.midi.MidiDevice 继承的嵌套类/接口
MidiDevice.Info
 
字段摘要
static intLOOP_CONTINUOUSLY
          一个值,指示循环应无限继续而不是在执行完特定次数的循环后停止。
 
方法摘要
 int[]addControllerEventListener(ControllerEventListener listener, int[] controllers)
          注册一个控件事件侦听器,以便在 sequencer 处理所请求的一种或多种类型的控制更改事件时接收通知。
 booleanaddMetaEventListener(MetaEventListener listener)
          注册一个元事件侦听器,以便在 sequence 中遇到元事件并由此 sequencer 处理时接收通知。
 intgetLoopCount()
          获得回放的重复次数。
 longgetLoopEndPoint()
          获得循环的结束位置,以 MIDI 节拍为单位。
 longgetLoopStartPoint()
          获得循环的起始位置,以 MIDI 节拍为单位。
 Sequencer.SyncModegetMasterSyncMode()
          获得此 sequencer 的当前主同步模式。
 Sequencer.SyncMode[]getMasterSyncModes()
          获得此 sequencer 支持的主同步模式集。
 longgetMicrosecondLength()
          获得当前 sequence 的长度,用微秒表示,如果未设置 sequence,则为 0。
 longgetMicrosecondPosition()
          获得 sequence 中的当前位置,用微秒表示。
 SequencegetSequence()
          获得 Sequencer 当前所操作的 sequence。
 Sequencer.SyncModegetSlaveSyncMode()
          获得此 sequencer 的当前从同步模式。
 Sequencer.SyncMode[]getSlaveSyncModes()
          获得此 sequencer 支持的从同步模式集。
 floatgetTempoFactor()
          返回 sequencer 的当前速度因子。
 floatgetTempoInBPM()
          获得当前的速度,用每分钟的拍数表示。
 floatgetTempoInMPQ()
          获得当前的速度,用每四分音符的微秒数表示。
 longgetTickLength()
          获得当前 sequence 的长度,用 MIDI 节拍数表示,如果未设置 sequence,则为 0。
 longgetTickPosition()
          获得 sequence 的当前位置,用 MIDI 节拍数表示。
 booleangetTrackMute(int track)
          获得轨道的当前静音状态。
 booleangetTrackSolo(int track)
          获得轨道的当前 solo 状态。
 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)
          设置此 sequencer 使用的定时信息源。
 voidsetMicrosecondPosition(long microseconds)
          设置 sequence 中的当前位置,用微秒表示
 voidsetSequence(InputStream stream)
          设置 sequencer 所操作的当前 sequence。
 voidsetSequence(Sequence sequence)
          设置 sequencer 所操作的当前 sequence。
 voidsetSlaveSyncMode(Sequencer.SyncMode sync)
          设置此 sequencer 的从同步模式。
 voidsetTempoFactor(float factor)
          根据所提供的 factor 按比例提高 sequencer 的实际回放速度。
 voidsetTempoInBPM(float bpm)
          设置速度,以每分钟的拍数为单位。
 voidsetTempoInMPQ(float mpq)
          设置速度,以每四分音符的微秒数为单位。
 voidsetTickPosition(long tick)
          设置当前 sequencer 位置,以 MIDI 节拍数为单位。
 voidsetTrackMute(int track, boolean mute)
          设置轨道的静音状态。
 voidsetTrackSolo(int track, boolean solo)
          设置轨道的 solo 状态。
 voidstart()
          开始回放当前已加载 sequence 中的 MIDI 数据。
 voidstartRecording()
          开始录制和回放 MIDI 数据。
 voidstop()
          停止录音(如果处于活动状态)及当前已加载 sequence(如果有)的回放。
 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。

此方法即使在 Sequencer 关闭时也可调用。

参数:
sequence - 要加载的 sequence。
抛出:
InvalidMidiDataException - 如果该 sequence 包含无效的 MIDI 数据或不受支持的数据。

setSequence

void setSequence(InputStream stream)
                 throws IOException,
                        InvalidMidiDataException
设置 sequencer 所操作的当前 sequence。该流必须指向 MIDI 文件数据。

此方法即使在 Sequencer 关闭时也可调用。

参数:
stream - 包含 MIDI 文件数据的流。
抛出:
IOException - 如果读取流时发生 I/O 异常。
InvalidMidiDataException - 如果在流中遇到无效数据,或者流不受支持。

getSequence

Sequence getSequence()
获得 Sequencer 当前所操作的 sequence。

此方法即使在 Sequencer 关闭时也可调用。

返回:
当前的 sequence,如果当前未设置任何 sequence,则返回 null

start

void start()
开始回放当前已加载 sequence 中的 MIDI 数据。回放将从当前位置开始。如果回放位置到达循环终点,并且循环计数大于 0,则回放将从循环开始点继续运行 setLoopCount 中设置的重复次数。此后,如果循环计数为 0,则回放将继续播放直到 sequence 末尾。

该实现确保合成器在跳转到循环开始点时通过发送合适的控件、弯音和程序更改事件来保持一致的状态。

抛出:
IllegalStateException - 如果 Sequencer 已关闭。
另请参见:
setLoopStartPoint(long), setLoopEndPoint(long), setLoopCount(int), stop()

stop

void stop()
停止录音(如果处于活动状态)及当前已加载 sequence(如果有)的回放。

抛出:
IllegalStateException - 如果 Sequencer 已关闭。
另请参见:
start(), isRunning()

isRunning

boolean isRunning()
指示 Sequencer 当前是否正在运行。默认值为 false。Sequencer 在调用 start()startRecording() 之一时开始运行。然后 isRunning 返回 true,直到 sequence 的回放完成或调用了 stop()

返回:
如果 Sequencer 正在运行中,则返回 true;否则返回 false

startRecording

void startRecording()
开始录制和回放 MIDI 数据。数据录制到为其启用的通道上的所有已启用音轨上。录制从 sequencer 的当前位置开始。录制会话过程中重写音轨上的全部已有事件。取自当前已加载 sequence 的事件(如果有)随录制过程中接收的消息传递给 sequencer 的传输器。

注意,默认不允许轨道进行录制。为了录制 MIDI 数据,必须至少指定一个轨道允许录制。

抛出:
IllegalStateException - 如果 Sequencer 已关闭。
另请参见:
startRecording(), recordEnable(javax.sound.midi.Track, int), recordDisable(javax.sound.midi.Track)