/*
* @(#)Sequencer.java 1.37 05/11/17
*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package javax.sound.midi;
import java.io.InputStream;
import java.io.IOException;
/**
* A hardware or software device that plays back a MIDI
* <code>{@link Sequence sequence}</code> is known as a <em>sequencer</em>.
* 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.
* <p>
* The <code>Sequencer</code> interface includes methods for the following
* basic MIDI sequencer operations:
* <ul>
* <li>obtaining a sequence from MIDI file data</li>
* <li>starting and stopping playback</li>
* <li>moving to an arbitrary position in the sequence</li>
* <li>changing the tempo (speed) of playback</li>
* <li>synchronizing playback to an internal clock or to received MIDI
* messages</li>
* <li>controlling the timing of another device</li>
* </ul>
* In addition, the following operations are supported, either directly, or
* indirectly through objects that the <code>Sequencer</code> has access to:
* <ul>
* <li>editing the data by adding or deleting individual MIDI events or entire
* tracks</li>
* <li>muting or soloing individual tracks in the sequence</li>
* <li>notifying listener objects about any meta-events or
* control-change events encountered while playing back the sequence.</li>
* </ul>
*
* @see Sequencer.SyncMode
* @see #addMetaEventListener
* @see ControllerEventListener
* @see Receiver
* @see Transmitter
* @see MidiDevice
*
* @version 1.37, 05/11/17
* @author Kara Kytle
* @author Florian Bomers
*/
public interface Sequencer extends MidiDevice {
/**
* A value indicating that looping should continue
* indefinitely rather than complete after a specific
* number of loops.
*
* @see #setLoopCount
* @since 1.5
*/
public static final int LOOP_CONTINUOUSLY = -1;
/**
* Sets the current sequence on which the sequencer operates.
*
* <p>This method can be called even if the
* <code>Sequencer</code> is closed.
*
* @param sequence the sequence to be loaded.
* @throws InvalidMidiDataException if the sequence contains invalid
* MIDI data, or is not supported.
*/
public void setSequence(Sequence sequence) throws InvalidMidiDataException;
/**
* Sets the current sequence on which the sequencer operates.
* The stream must point to MIDI file data.
*
* <p>This method can be called even if the
* <code>Sequencer</code> is closed.
*
* @param stream stream containing MIDI file data.
* @throws IOException if an I/O exception occurs during reading of the stream.
* @throws InvalidMidiDataException if invalid data is encountered
* in the stream, or the stream is not supported.
*/
public void setSequence(InputStream stream) throws IOException, InvalidMidiDataException;
/**
* Obtains the sequence on which the Sequencer is currently operating.
*
* <p>This method can be called even if the
* <code>Sequencer</code> is closed.
=1= |