mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			272 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			272 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Java
		
	
	
	
/*
 | 
						|
   Copyright (C) 2005-2007 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.sampled;
 | 
						|
 | 
						|
import gnu.java.lang.CPStringBuilder;
 | 
						|
 | 
						|
/**
 | 
						|
 * The DataLine interface adds data-related functionality to the Line
 | 
						|
 * interface.  For example, it adds methods to start and stop the data
 | 
						|
 * on the line.
 | 
						|
 * @since 1.3
 | 
						|
 */
 | 
						|
public interface DataLine extends Line
 | 
						|
{
 | 
						|
  /**
 | 
						|
   * This class extends Line.Info with information specific to DataLine.
 | 
						|
   * In particular it adds information about buffer sizes, and about supported
 | 
						|
   * audio formats.
 | 
						|
   * @since 1.3
 | 
						|
   */
 | 
						|
  class Info extends Line.Info
 | 
						|
  {
 | 
						|
    private int minBufferSize;
 | 
						|
    private int maxBufferSize;
 | 
						|
    private AudioFormat[] formats;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new Info given the line's class and a supported
 | 
						|
     * audio format.  The buffer sizes default to AudioSystem.NOT_SPECIFIED.
 | 
						|
     * @param klass the class of the line
 | 
						|
     * @param fmt the supported format
 | 
						|
     */
 | 
						|
    public Info(Class<?> klass, AudioFormat fmt)
 | 
						|
    {
 | 
						|
      super(klass);
 | 
						|
      this.minBufferSize = AudioSystem.NOT_SPECIFIED;
 | 
						|
      this.maxBufferSize = AudioSystem.NOT_SPECIFIED;
 | 
						|
      this.formats = new AudioFormat[] { fmt };
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new Info given the line's class, the supported audio formats,
 | 
						|
     * the minimum buffer size, and the maximum buffer size.
 | 
						|
     * @param klass the class of the linee
 | 
						|
     * @param fmts the supported audio formats
 | 
						|
     * @param minSize the minimum buffer size
 | 
						|
     * @param maxSize the maximum buffer size
 | 
						|
     */
 | 
						|
    public Info(Class<?> klass, AudioFormat[] fmts, int minSize, int maxSize)
 | 
						|
    {
 | 
						|
      super(klass);
 | 
						|
      this.minBufferSize = minSize;
 | 
						|
      this.maxBufferSize = maxSize;
 | 
						|
      this.formats = fmts;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new Info given the line's class, a supported
 | 
						|
     * audio format, and a buffer size.  Both the minimum and maximum
 | 
						|
     * sizes are set from this size.
 | 
						|
     * @param klass the class of the line
 | 
						|
     * @param fmt the supported format
 | 
						|
     * @param size the buffer size
 | 
						|
     */
 | 
						|
    public Info(Class<?> klass, AudioFormat fmt, int size)
 | 
						|
    {
 | 
						|
      super(klass);
 | 
						|
      this.minBufferSize = size;
 | 
						|
      this.maxBufferSize = size;
 | 
						|
      this.formats = new AudioFormat[] { fmt };
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return the supported audio formats.
 | 
						|
     */
 | 
						|
    public AudioFormat[] getFormats()
 | 
						|
    {
 | 
						|
      // FIXME: clone?
 | 
						|
      return formats;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return the maximum buffer size.
 | 
						|
     */
 | 
						|
    public int getMaxBufferSize()
 | 
						|
    {
 | 
						|
      return maxBufferSize;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return the minimum buffer size.
 | 
						|
     */
 | 
						|
    public int getMinBufferSize()
 | 
						|
    {
 | 
						|
      return minBufferSize;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return true if the indicated audio format is supported by this
 | 
						|
     * Info, false otherwise.
 | 
						|
     * @param fmt the audio format
 | 
						|
     * @return true if the format is supported
 | 
						|
     */
 | 
						|
    public boolean isFormatSupported(AudioFormat fmt)
 | 
						|
    {
 | 
						|
      for (int i = 0; i < formats.length; ++i)
 | 
						|
        {
 | 
						|
          if (fmt.matches(formats[i]))
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return true if this Info matches another Info object.
 | 
						|
     */
 | 
						|
    public boolean matches(Line.Info o)
 | 
						|
    {
 | 
						|
      if (! super.matches(o) || ! (o instanceof Info))
 | 
						|
        return false;
 | 
						|
 | 
						|
      Info other = (Info) o;
 | 
						|
      if (minBufferSize < other.minBufferSize ||
 | 
						|
          maxBufferSize > other.maxBufferSize)
 | 
						|
        return false;
 | 
						|
 | 
						|
      for (int i = 0; i < formats.length; ++i)
 | 
						|
        {
 | 
						|
          boolean ok = false;
 | 
						|
          for (int j = 0; j < other.formats.length; ++j)
 | 
						|
            {
 | 
						|
              if (formats[i].matches(other.formats[j]))
 | 
						|
                {
 | 
						|
                  ok = true;
 | 
						|
                  break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
          if (! ok)
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return a description of this Info object.
 | 
						|
     */
 | 
						|
    public String toString()
 | 
						|
    {
 | 
						|
      CPStringBuilder result = new CPStringBuilder();
 | 
						|
      result.append("formats: [");
 | 
						|
      for (int i = 0; i < formats.length; ++i)
 | 
						|
        {
 | 
						|
          if (i > 0)
 | 
						|
            result.append(", ");
 | 
						|
          result.append(formats[i].toString());
 | 
						|
        }
 | 
						|
 | 
						|
      result.append("]; minBufferSize: ");
 | 
						|
      result.append(minBufferSize);
 | 
						|
      result.append("; maxBufferSize: ");
 | 
						|
      result.append(maxBufferSize);
 | 
						|
      return result.toString();
 | 
						|
    }
 | 
						|
 | 
						|
  } // end class: Info
 | 
						|
 | 
						|
  /**
 | 
						|
   * Return the number of bytes currently available on this DataLine.
 | 
						|
   */
 | 
						|
  int available();
 | 
						|
 | 
						|
  /**
 | 
						|
   * This method blocks until whatever data is buffered in the
 | 
						|
   * DataLine's internal buffer has been drained.
 | 
						|
   */
 | 
						|
  void drain();
 | 
						|
 | 
						|
  /**
 | 
						|
   * This flushes the DataLine by discarding any buffered data.
 | 
						|
   */
 | 
						|
  void flush();
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the size of the DataLine's internal buffer, in bytes.
 | 
						|
   */
 | 
						|
  int getBufferSize();
 | 
						|
 | 
						|
  /**
 | 
						|
   * Return the current format of the data associated with this DataLine.
 | 
						|
   */
 | 
						|
  AudioFormat getFormat();
 | 
						|
 | 
						|
  /**
 | 
						|
   * Return the current frame position.
 | 
						|
   */
 | 
						|
  int getFramePosition();
 | 
						|
 | 
						|
  /**
 | 
						|
   * Return the volume level for this DataLine.
 | 
						|
   */
 | 
						|
  float getLevel();
 | 
						|
 | 
						|
  /**
 | 
						|
   * Return the current frame position.
 | 
						|
   * @since 1.5
 | 
						|
   */
 | 
						|
  long getLongFramePosition();
 | 
						|
 | 
						|
  /**
 | 
						|
   * Return the number of microseconds this DataLine has been playing.
 | 
						|
   */
 | 
						|
  long getMicrosecondPosition();
 | 
						|
 | 
						|
  /**
 | 
						|
   * Return true if this line is active, meaning that it is actively
 | 
						|
   * performing audio I/O.
 | 
						|
   */
 | 
						|
  boolean isActive();
 | 
						|
 | 
						|
  /**
 | 
						|
   * Return true if this line is running, meaning that it has been
 | 
						|
   * started.  When the line is stopped, this method will return false.
 | 
						|
   */
 | 
						|
  boolean isRunning();
 | 
						|
 | 
						|
  /**
 | 
						|
   * Start processing data.  This will emit a START event.
 | 
						|
   */
 | 
						|
  void start();
 | 
						|
 | 
						|
  /**
 | 
						|
   * Stop processing data.  This will emit a STOP event.
 | 
						|
   */
 | 
						|
  void stop();
 | 
						|
}
 |