Package sc

Source Code of sc.PlayWav

package sc;

import java.io.IOException;
import java.net.URL;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;

public class PlayWav extends Thread
{
  private SourceDataLine auline = null;
  private URL url;
  private Position curPosition;

  private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb

  enum Position
  {
    LEFT, RIGHT, NORMAL
  };

  public PlayWav(String wavfile)
  {
    url = this.getClass().getResource(wavfile);
    curPosition = Position.NORMAL;
  }

  public PlayWav(String wavfile, Position p)
  {
    url = this.getClass().getResource(wavfile);
    curPosition = p;
  }
 
  public void end()
  {
    auline.close();
  }

  public void run()
  {
    AudioInputStream audioInputStream = null;
    try
    {
      audioInputStream = AudioSystem.getAudioInputStream(url);
    }
    catch (UnsupportedAudioFileException e1)
    {
      e1.printStackTrace();
      return;
    }
    catch (IOException e1)
    {
      e1.printStackTrace();
      return;
    }

    AudioFormat format = audioInputStream.getFormat();
   
    DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

    try
    {
      auline = (SourceDataLine) AudioSystem.getLine(info);
      auline.open(format);
    }
    catch (LineUnavailableException e)
    {
      e.printStackTrace();
      return;
    }
    catch (Exception e)
    {
      e.printStackTrace();
      return;
    }

    if (auline.isControlSupported(FloatControl.Type.PAN))
    {
      FloatControl pan = (FloatControl) auline
          .getControl(FloatControl.Type.PAN);
      if (curPosition == Position.RIGHT)
        pan.setValue(1.0f);
      else if (curPosition == Position.LEFT)
        pan.setValue(-1.0f);
    }

    auline.start();
    int nBytesRead = 0;
    byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];

    try
    {
      while (nBytesRead != -1)
      {
        nBytesRead = audioInputStream.read(abData, 0, abData.length);
        if (nBytesRead >= 0)
          auline.write(abData, 0, nBytesRead);
      }
    }
    catch (IOException e)
    {
      e.printStackTrace();
      return;
    }
    finally
    {
      auline.drain();
      auline.close();
    }

  }
}
TOP

Related Classes of sc.PlayWav

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.