is new.
A hardware or software device that plays back a MIDI sequence is known as a sequencer. A MIDI sequence contains lists of time-stamped MIDI data, such as might be read from a standard MIDI file. Most sequencers also provide functions for creating and editing sequences.
The Sequencer interface includes methods for the following basic MIDI sequencer operations:
| Nested Class Summary | |
|---|---|
| static class |
Sequencer.SyncMode
A SyncMode object represents one of the ways in which a MIDI sequencer's notion of time can be synchronized with a master or slave device. |
| Nested classes inherited from class javax.sound.midi. MidiDevice |
|---|
| MidiDevice.Info |
Field Summary
|
|
|---|---|
static int
|
LOOP_CONTINUOUSLY
A value indicating that looping should continue indefinitely rather than complete after a specific number of loops.
|
| Method Summary | |
|---|---|
| int[] |
addControllerEventListener
(
ControllerEventListener
Registers a controller event listener to receive notification whenever the sequencer processes a control-change event of the requested type or types. |
| boolean |
addMetaEventListener
(
MetaEventListener
listener) Registers a meta-event listener to receive notification whenever a meta-event is encountered in the sequence and processed by the sequencer. |
int
|
getLoopCount
()
Obtains the number of repetitions for playback.
|
long
|
getLoopEndPoint
()
Obtains the end position of the loop, in MIDI ticks.
|
long
|
getLoopStartPoint
()
Obtains the start position of the loop, in MIDI ticks.
|
| Sequencer.SyncMode |
getMasterSyncMode
() Obtains the current master synchronization mode for this sequencer. |
| Sequencer.SyncMode |
getMasterSyncModes
() Obtains the set of master synchronization modes supported by this sequencer. |
| long |
getMicrosecondLength
() Obtains the length of the current sequence, expressed in
microseconds, or 0 if no sequence is set.
|
| long |
getMicrosecondPosition
() Obtains the current position in the sequence, expressed in microseconds. |
| Sequence |
getSequence
() Obtains the sequence on which the Sequencer is currently operating. |
| Sequencer.SyncMode |
getSlaveSyncMode
() Obtains the current slave synchronization mode for this sequencer. |
| Sequencer.SyncMode [] |
getSlaveSyncModes
() Obtains the set of slave synchronization modes supported by the sequencer. |
| float |
getTempoFactor
() Returns the current tempo factor for the sequencer. |
| float |
getTempoInBPM
() Obtains the current tempo, expressed in beats per minute. |
| float |
getTempoInMPQ
() Obtains the current tempo, expressed in microseconds per quarter note. |
| long |
getTickLength
() Obtains the length of the current sequence, expressed in MIDI
ticks, or 0 if no sequence is set.
|
| long |
getTickPosition
() Obtains the current position in the sequence, expressed in MIDI ticks. |
| boolean |
getTrackMute
(int track) Obtains the current mute state for a track. |
| boolean |
getTrackSolo
(int track) Obtains the current solo state for a track. |
| boolean |
isRecording
() Indicates whether the Sequencer is currently recording. |
| boolean |
isRunning
() Indicates whether the Sequencer is currently running. |
| void |
recordDisable
(
Track
track) Disables recording to the specified track. |
| void |
recordEnable
(
Track
track, int channel) Prepares the specified track for recording events received on a particular channel. |
| int[] |
removeControllerEventListener
(
ControllerEventListener
Removes a controller event listener's interest in one or more types of controller event. |
| void |
removeMetaEventListener
(
MetaEventListener
listener) Removes the specified meta-event listener from this sequencer's list of registered listeners, if in fact the listener is registered. |
void
|
setLoopCount
(int count)
Sets the number of repetitions of the loop for playback.
|
void
|
setLoopEndPoint
(long tick)
Sets the last MIDI tick that will be played in the loop.
|
void
|
setLoopStartPoint
(long tick)
Sets the first MIDI tick that will be played in the loop.
|
| void |
setMasterSyncMode
(
Sequencer.SyncMode
sync) Sets the source of timing information used by this sequencer. |
| void |
setMicrosecondPosition
(long microseconds) Sets the current position in the sequence, expressed in microseconds |
| void |
setSequence
(
InputStream
stream) Sets the current sequence on which the sequencer operates. |
| void |
setSequence
(
Sequence
sequence) Sets the current sequence on which the sequencer operates. |
| void |
setSlaveSyncMode
(
Sequencer.SyncMode
sync) Sets the slave synchronization mode for the sequencer. |
| void |
setTempoFactor
(float factor) Scales the sequencer's actual playback tempo by the factor provided. |
| void |
setTempoInBPM
(float bpm) Sets the tempo in beats per minute. |
| void |
setTempoInMPQ
(float mpq) Sets the tempo in microseconds per quarter note. |
| void |
setTickPosition
(long tick) Sets the current sequencer position in MIDI ticks |
| void |
setTrackMute
(int track, boolean mute) Sets the mute state for a track. |
| void |
setTrackSolo
(int track, boolean solo) Sets the solo state for a track. |
| void |
start
() Starts playback of the MIDI data in the currently loaded sequence. |
| void |
startRecording
() Starts recording and playback of MIDI data. |
| void |
stop
() Stops recording, if active, and playback of the currently loaded sequence, if any. |
| void |
stopRecording
() Stops recording, if active. |
| Methods inherited from interface javax.sound.midi. MidiDevice |
|---|
close
,
getDeviceInfo
,
getMaxReceivers
,
getMaxTransmitters
,
getReceiver
,
getReceivers
,
getTransmitter
,
getTransmitters
,
isOpen
,
open
|
Field Detail
|
|---|
LOOP_CONTINUOUSLY
static final int
LOOP_CONTINUOUSLY
A value indicating that looping should continue indefinitely rather than complete after a specific number of loops.
Since:
1.5
See Also:
setLoopCount(int)
,
Constant Field Values
| Method Detail |
|---|
void setSequence(Sequence sequence)
throws InvalidMidiDataException
This method can be called even if the Sequencer is closed.
void setSequence(InputStream stream)
throws IOException,
InvalidMidiDataException
This method can be called even if the Sequencer is closed.
Sequence getSequence()
This method can be called even if the Sequencer is closed.
void start()
Playback will begin from the current position. If the playback position reaches the loop end point, and the loop count is greater than 0, playback will resume at the loop start point for the number of repetitions set with setLoopCount. After that, or if the loop count is 0, playback will continue to play to the end of the sequence.
The implementation ensures that the synthesizer is brought to a consistent state when jumping to the loop start point by sending appropriate controllers, pitch bend, and program change events.
Throws:
IllegalStateException
- if the Sequencer is closed.
setLoopStartPoint(long)
,
setLoopEndPoint(long)
,
setLoopCount(int)
,
stop()
void stop()
Throws:
IllegalStateException
- if the Sequencer is closed.
boolean isRunning()
void startRecording()
Note that tracks are not by default enabled for recording. In order to record MIDI data, at least one track must be specifically enabled for recording.
Throws:
IllegalStateException
- if the Sequencer is closed.
void stopRecording()
Throws:
IllegalStateException
- if the Sequencer is closed.
boolean isRecording()
void recordEnable(Track track,
int channel)
void recordDisable(Track track)
float getTempoInBPM()
void setTempoInBPM(float bpm)
float getTempoInMPQ()
void setTempoInMPQ(float mpq)
void setTempoFactor(float factor)
Note that the tempo factor cannot be adjusted when external synchronization is used. In that situation, setTempoFactor always sets the tempo factor to 1.0.
float getTempoFactor()
long getTickLength()
ticks, or 0 if no sequence is set.
long getTickPosition()
void setTickPosition(long tick)
long getMicrosecondLength()
microseconds, or 0 if no sequence is set.
microseconds.
long getMicrosecondPosition()
void setMicrosecondPosition(long microseconds)
void setMasterSyncMode(Sequencer.SyncMode sync)
Sequencer.SyncMode getMasterSyncMode()
Sequencer.SyncMode[] getMasterSyncModes()
void setSlaveSyncMode(Sequencer.SyncMode sync)
Sequencer.SyncMode getSlaveSyncMode()
Sequencer.SyncMode[] getSlaveSyncModes()
void setTrackMute(int track,
boolean mute)
boolean getTrackMute(int track)
void setTrackSolo(int track,
boolean solo)
This method may fail for a number of reasons. For example, the track number specified may not be valid for the current sequence, or the sequencer may not support this functionality. An application which needs to verify whether this operation succeeded should follow this call with a call to getTrackSolo(int) .
boolean getTrackSolo(int track)
boolean addMetaEventListener(MetaEventListener listener)
void removeMetaEventListener(MetaEventListener listener)
int[] addControllerEventListener(ControllerEventListener listener,
int[] controllers)
The returned array contains the MIDI controller numbers for which the listener will now receive events. Some sequencers might not support controller event notification, in which case the array has a length of 0. Other sequencers might support notification for some controllers but not all. This method may be invoked repeatedly. Each time, the returned array indicates all the controllers that the listener will be notified about, not only the controllers requested in that particular invocation.
int[] removeControllerEventListener(ControllerEventListener listener,
int[] controllers)
setLoopStartPoint
void
setLoopStartPoint
(long tick)
Sets the first MIDI tick that will be played in the loop. If the loop count is greater than 0, playback will jump to this point when reaching the loop end point.
A value of 0 for the starting point means the beginning of the loaded sequence. The starting point must be lower than or equal to the ending point, and it must fall within the size of the loaded sequence.
A sequencer's loop start point defaults to start of the sequence.
Parameters:
tick - the loop's starting position, in MIDI ticks (zero-based)
Throws:
IllegalArgumentException
- if the requested loop start point cannot be set, usually because it falls outside the sequence's duration or because the start point is after the end point
Since:
1.5
See Also:
setLoopEndPoint(long)
,
setLoopCount(int)
,
getLoopStartPoint()
,
start()
getLoopStartPoint
long
getLoopStartPoint
()
Obtains the start position of the loop, in MIDI ticks.
Returns:
the start position of the loop, in MIDI ticks (zero-based)
Since:
1.5
See Also:
setLoopStartPoint(long)
setLoopEndPoint
void
setLoopEndPoint
(long tick)
Sets the last MIDI tick that will be played in the loop. If the loop count is 0, the loop end point has no effect and playback continues to play when reaching the loop end point.
A value of -1 for the ending point indicates the last tick of the sequence. Otherwise, the ending point must be greater than or equal to the starting point, and it must fall within the size of the loaded sequence.
A sequencer's loop end point defaults to -1, meaning the end of the sequence.
Parameters:
tick - the loop's ending position, in MIDI ticks (zero-based), or -1 to indicate the final tick
Throws:
IllegalArgumentException
- if the requested loop point cannot be set, usually because it falls outside the sequence's duration or because the ending point is before the starting point
Since:
1.5
See Also:
setLoopStartPoint(long)
,
setLoopCount(int)
,
getLoopEndPoint()
,
start()
getLoopEndPoint
long
getLoopEndPoint
()
Obtains the end position of the loop, in MIDI ticks.
Returns:
the end position of the loop, in MIDI ticks (zero-based), or -1 to indicate the end of the sequence
Since:
1.5
See Also:
setLoopEndPoint(long)
setLoopCount
void
setLoopCount
(int count)
Sets the number of repetitions of the loop for playback. When the playback position reaches the loop end point, it will loop back to the loop start point count times, after which playback will continue to play to the end of the sequence.
If the current position when this method is invoked is greater than the loop end point, playback continues to the end of the sequence without looping, unless the loop end point is changed subsequently.
A count value of 0 disables looping: playback will continue at the loop end point, and it will not loop back to the loop start point. This is a sequencer's default.
If playback is stopped during looping, the current loop status is cleared; subsequent start requests are not affected by an interrupted loop operation.
Parameters:
count - the number of times playback should loop back from the loop's end position to the loop's start position, or
LOOP_CONTINUOUSLY
to indicate that looping should continue until interrupted
Throws:
IllegalArgumentException
- if count is negative and not equal to
LOOP_CONTINUOUSLY
Since:
1.5
See Also:
setLoopStartPoint(long)
,
setLoopEndPoint(long)
,
getLoopCount()
,
start()
getLoopCount
int
getLoopCount
()
Obtains the number of repetitions for playback.
Returns:
the number of loops after which playback plays to the end of the sequence
Since:
1.5
See Also:
setLoopCount(int)
,
start()