mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			403 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			403 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* Sequencer.java -- A MIDI sequencer object
 | |
|    Copyright (C) 2005 Free Software Foundation, Inc.
 | |
| 
 | |
| This file is part of GNU Classpath.
 | |
| 
 | |
| GNU Classpath is free software; you can redistribute it and/or modify
 | |
| it under the terms of the GNU General Public License as published by
 | |
| the Free Software Foundation; either version 2, or (at your option)
 | |
| any later version.
 | |
| 
 | |
| GNU Classpath is distributed in the hope that it will be useful, but
 | |
| WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
| General Public License for more details.
 | |
| 
 | |
| You should have received a copy of the GNU General Public License
 | |
| along with GNU Classpath; see the file COPYING.  If not, write to the
 | |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | |
| 02110-1301 USA.
 | |
| 
 | |
| Linking this library statically or dynamically with other modules is
 | |
| making a combined work based on this library.  Thus, the terms and
 | |
| conditions of the GNU General Public License cover the whole
 | |
| combination.
 | |
| 
 | |
| As a special exception, the copyright holders of this library give you
 | |
| permission to link this library with independent modules to produce an
 | |
| executable, regardless of the license terms of these independent
 | |
| modules, and to copy and distribute the resulting executable under
 | |
| terms of your choice, provided that you also meet, for each linked
 | |
| independent module, the terms and conditions of the license of that
 | |
| module.  An independent module is a module which is not derived from
 | |
| or based on this library.  If you modify this library, you may extend
 | |
| this exception to your version of the library, but you are not
 | |
| obligated to do so.  If you do not wish to do so, delete this
 | |
| exception statement from your version. */
 | |
| 
 | |
| 
 | |
| package javax.sound.midi;
 | |
| 
 | |
| import java.io.IOException;
 | |
| import java.io.InputStream;
 | |
| 
 | |
| /**
 | |
|  * A Sequencer object plays MIDI sequences described as Sequence objects.
 | |
|  * This class provides methods for loading and unloading sequences, as well
 | |
|  * as basic transport controls.
 | |
|  *
 | |
|  * @author Anthony Green (green@redhat.com)
 | |
|  * @since 1.3
 | |
|  *
 | |
|  */
 | |
| public interface Sequencer extends MidiDevice
 | |
| {
 | |
|   /**
 | |
|    * Set the Sequence object for this sequencer.
 | |
|    *
 | |
|    * @param seq the Sequence to process
 | |
|    * @throws InvalidMidiDataException if the sequence is invalid for any reason
 | |
|    */
 | |
|   public void setSequence(Sequence seq) throws InvalidMidiDataException;
 | |
| 
 | |
|   /**
 | |
|    * Set the sequence for this sequencer.  istream reads on a valid MIDI file.
 | |
|    *
 | |
|    * @param istream an input stream for a valid MIDI file
 | |
|    * @throws IOException if an I/O exception happens
 | |
|    * @throws InvalidMidiDataException if the MIDI file contains bad data
 | |
|    */
 | |
|   public void setSequence(InputStream istream)
 | |
|       throws IOException, InvalidMidiDataException;
 | |
| 
 | |
|   /**
 | |
|    * Get the current sequence object for this sequencer.
 | |
|    *
 | |
|    * @return the current sequence object.  May be null.
 | |
|    */
 | |
|   public Sequence getSequence();
 | |
| 
 | |
|   /**
 | |
|    * Start playback of the current sequence.
 | |
|    */
 | |
|   public void start();
 | |
| 
 | |
|   /**
 | |
|    * Stop playback of the current sequence.
 | |
|    */
 | |
|   public void stop();
 | |
| 
 | |
|   /**
 | |
|    * Returns true if the sequence is playing.
 | |
|    *
 | |
|    * @return true if the sequence is playing and false otherwise
 | |
|    */
 | |
|   public boolean isRunning();
 | |
| 
 | |
|   /**
 | |
|    * Start playback and record of MIDI events.
 | |
|    * Any tracks enabled for recording will have their events replaced.
 | |
|    * Any newly recorded events, and all events from non-recording tracks
 | |
|    * will be sent to the sequencer's transmitter.
 | |
|    */
 | |
|   public void startRecording();
 | |
| 
 | |
|   /**
 | |
|    * Stop recording, although continue playing.
 | |
|    */
 | |
|   public void stopRecording();
 | |
| 
 | |
|   /**
 | |
|    * Returns true if sequence is recording.
 | |
|    *
 | |
|    * @return true if the sequence is recording and false otherwise
 | |
|    */
 | |
|   public boolean isRecording();
 | |
| 
 | |
|   /**
 | |
|    * Enable recording for a specific track using data from a specific channel.
 | |
|    *
 | |
|    * @param track the track to enable for recording
 | |
|    * @param channel the channel from which to record
 | |
|    */
 | |
|   public void recordEnable(Track track, int channel);
 | |
| 
 | |
|   /**
 | |
|    * Disable recording for a specific track.
 | |
|    *
 | |
|    * @param track the track to disable recording for
 | |
|    */
 | |
|   public void recordDisable(Track track);
 | |
| 
 | |
|   /**
 | |
|    * Get the current tempo in beats per minute.
 | |
|    *
 | |
|    * @return the current tempo in beats per minute
 | |
|    */
 | |
|   public float getTempoInBPM();
 | |
| 
 | |
|   /**
 | |
|    * Sets the current tempo in beats per minute.
 | |
|    *
 | |
|    * @param bpm the new tempo in bears per minutes
 | |
|    */
 | |
|   public void setTempoInBPM(float bpm);
 | |
| 
 | |
|   /**
 | |
|    * Get the current tempo in microseconds per quarter note.
 | |
|    *
 | |
|    * @return the current tempo in microseconds per quarter note.
 | |
|    */
 | |
|   public float getTempoInMPQ();
 | |
| 
 | |
|   /**
 | |
|    * Sets the current tempo in microseconds per quarter note.
 | |
|    *
 | |
|    * @param mpq the new tempo in microseconds per quarter note.
 | |
|    */
 | |
|   public void setTempoInMPQ(float mpq);
 | |
| 
 | |
|   /**
 | |
|    * Set a scaling factor for the playback tempo, which is 1.0 by default.
 | |
|    *
 | |
|    * @param factor the new tempo scaling factor
 | |
|    */
 | |
|   public void setTempoFactor(float factor);
 | |
| 
 | |
|   /**
 | |
|    * Get the current scaling factor for the playback tempo.
 | |
|    *
 | |
|    * @return the current tempo scaling factor
 | |
|    */
 | |
|   public float getTempoFactor();
 | |
| 
 | |
|   /**
 | |
|    * Get the length of the current sequence in MIDI ticks.
 | |
|    *
 | |
|    * @return the length of the current sequence in MIDI ticks
 | |
|    */
 | |
|   public long getTickLength();
 | |
| 
 | |
|   /**
 | |
|    * Get the current playback position of the sequencer in MIDI ticks.
 | |
|    *
 | |
|    * @return the current playback position of the sequencer in MIDI ticks
 | |
|    */
 | |
|   public long getTickPosition();
 | |
| 
 | |
|   /**
 | |
|    * Set the current playback position of the sequencer in MIDI ticks.
 | |
|    *
 | |
|    * @param tick the new playback position of the sequencer in MIDI ticks
 | |
|    */
 | |
|   public void setTickPosition(long tick);
 | |
| 
 | |
|   /**
 | |
|    * Get the length of the current sequence in microseconds.
 | |
|    *
 | |
|    * @return the length of the current sequence in microseconds
 | |
|    */
 | |
|   public long getMicrosecondLength();
 | |
| 
 | |
|   /**
 | |
|    * Get the current playback position of the sequencer in microseconds.
 | |
|    *
 | |
|    * @return the current playback position of the sequencer in microseconds
 | |
|    */
 | |
|   public long getMicrosecondPosition();
 | |
| 
 | |
|   /**
 | |
|    * Set the current playback position of the sequencer in microseconds.
 | |
|    *
 | |
|    * @param microsecond the new playback position of the sequencer in microseconds
 | |
|    */
 | |
|   public void setMicrosecondPosition(long microsecond);
 | |
| 
 | |
|   /**
 | |
|    * Set the source of timing information.  sync must be found in the array
 | |
|    * returned by getMasterSyncModes().
 | |
|    * FIXME: What happens if it isn't?
 | |
|    *
 | |
|    * @param sync the new source of timing information
 | |
|    */
 | |
|   public void setMasterSyncMode(SyncMode sync);
 | |
| 
 | |
|   /**
 | |
|    * Get the source of timing information.
 | |
|    *
 | |
|    * @return the current source of timing information
 | |
|    */
 | |
|   public SyncMode getMasterSyncMode();
 | |
| 
 | |
|   /**
 | |
|    * Get an array of timing sources supported by this sequencer.
 | |
|    *
 | |
|    * @return an array of timing sources supported by this sequencer
 | |
|    */
 | |
|   public SyncMode[] getMasterSyncModes();
 | |
| 
 | |
|   /**
 | |
|    * Set the slave synchronization mode for this sequencer.  sync must be
 | |
|    * found in the array returned by getSlaveSyncModes().
 | |
|    * FIXME: What happens if it isn't?
 | |
|    *
 | |
|    * @param sync the new slave sync mode for this sequencer
 | |
|    */
 | |
|   public void setSlaveSyncMode(SyncMode sync);
 | |
| 
 | |
|   /**
 | |
|    * Get the current slave synchronization mode.
 | |
|    *
 | |
|    * @return the current slave synchronization mode
 | |
|    */
 | |
|   public SyncMode getSlaveSyncMode();
 | |
| 
 | |
|   /**
 | |
|    * Get an array of slave sync modes supported by this sequencer.
 | |
|    *
 | |
|    * @return an array of slave sync modes supported by this sequencer
 | |
|    */
 | |
|   public SyncMode[] getSlaveSyncModes();
 | |
| 
 | |
|   /**
 | |
|    * Sets the mute state for a specific track.
 | |
|    *
 | |
|    * @param track the track to modify
 | |
|    * @param mute the new mute state
 | |
|    */
 | |
|   public void setTrackMute(int track, boolean mute);
 | |
| 
 | |
|   /**
 | |
|    * Get the mute state of a specific track.
 | |
|    *
 | |
|    * @param track the track to query
 | |
|    * @return the mute state for track
 | |
|    */
 | |
|   public boolean getTrackMute(int track);
 | |
| 
 | |
|   /**
 | |
|    * Sets the solo state for a specific track.
 | |
|    *
 | |
|    * @param track the track to modify
 | |
|    * @param solo the new solo state
 | |
|    */
 | |
|   public void setTrackSolo(int track, boolean solo);
 | |
| 
 | |
|   /**
 | |
|    * Get the solo state for a specific track.
 | |
|    *
 | |
|    * @param track the track to query
 | |
|    * @return the solo state for track
 | |
|    */
 | |
|   public boolean getTrackSolo(int track);
 | |
| 
 | |
|   /**
 | |
|    * Add a meta event listening object to this sequencer.  It will receive
 | |
|    * notification whenever the sequencer processes a meta event.
 | |
|    * A listener may fail to get added if this sequencer doesn't support
 | |
|    * meta events.
 | |
|    *
 | |
|    * @param listener the listener to add
 | |
|    * @return true if listener was added, false othewise
 | |
|    */
 | |
|   public boolean addMetaEventListener(MetaEventListener listener);
 | |
| 
 | |
|   /**
 | |
|    * Remove a meta event listener from this sequencer.
 | |
|    *
 | |
|    * @param listener the listener to remove
 | |
|    */
 | |
|   public void removeMetaEventListener(MetaEventListener listener);
 | |
| 
 | |
|   /**
 | |
|    * Add a controller event listening object to this sequencer.  It will
 | |
|    * receive notification whenever the sequencer processes a controller
 | |
|    * event for a specified controller number..
 | |
|    *
 | |
|    * @param listener the listener to add
 | |
|    * @param controllers the conroller numbers to listen to
 | |
|    * @return the controller numbers being listened to
 | |
|    */
 | |
|   public int[] addControllerEventListener(ControllerEventListener listener,
 | |
|                                           int controllers[]);
 | |
| 
 | |
|   /**
 | |
|    * Remove a controller listener from this sequencer for the specified
 | |
|    * controller numbers.
 | |
|    *
 | |
|    * @param listener the listener to remove
 | |
|    * @param controllers the controllers to unlisten
 | |
|    * @return the controller numbers being unlistened
 | |
|    */
 | |
|   public int[] removeControllerEventListener(ControllerEventListener listener,
 | |
|                                              int controllers[]);
 | |
| 
 | |
|   /**
 | |
|    * A SyncMode object represents the mechanism by which a MIDI sequencer
 | |
|    * synchronizes time with a master or slave device.
 | |
|    *
 | |
|    * @author green@redhat.com
 | |
|    *
 | |
|    */
 | |
|   public static class SyncMode
 | |
|   {
 | |
|     /**
 | |
|      * A master sync mode indicating the use of an internal sequencer clock.
 | |
|      */
 | |
|     public static final SyncMode INTERNAL_CLOCK = new SyncMode("Internal Clock");
 | |
| 
 | |
|     /**
 | |
|      * A master or slave sync mode indicating the use of MIDI clock messages.
 | |
|      */
 | |
|     public static final SyncMode MIDI_SYNC = new SyncMode("MIDI Sync");
 | |
| 
 | |
|     /**
 | |
|      * A master or slave sync mode indicating the use of MIDI Time Code
 | |
|      * messages.
 | |
|      */
 | |
|     public static final SyncMode MIDI_TIME_CODE = new SyncMode("MIDI Time Code");
 | |
| 
 | |
|     /**
 | |
|      * A slave sync mode indicating that no timing info will be transmitted.
 | |
|      */
 | |
|     public static final SyncMode NO_SYNC = new SyncMode("No Timing");
 | |
| 
 | |
|     // The name
 | |
|     private String name;
 | |
| 
 | |
|     /**
 | |
|      * Create a new SyncMode object
 | |
|      * @param name the SyncMode name
 | |
|      */
 | |
|     protected SyncMode(String name)
 | |
|     {
 | |
|       this.name = name;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * SyncMode objects are only equal when identical.
 | |
|      */
 | |
|     public final boolean equals(Object o)
 | |
|     {
 | |
|       return super.equals(o);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * SyncMode objects use the Object hashCode.
 | |
|      */
 | |
|     public final int hashCode()
 | |
|     {
 | |
|       return super.hashCode();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Use the SyncMode name as the string representation.
 | |
|      * @see java.lang.Object#toString()
 | |
|      */
 | |
|     public final String toString()
 | |
|     {
 | |
|       return name;
 | |
|     }
 | |
|   }
 | |
| }
 |