Package javazoom.spi.mpeg.sampled.file

Source Code of javazoom.spi.mpeg.sampled.file.SkipTest

/*
*   SkipTest - JavaZOOM : http://www.javazoom.net
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU Library General Public License as published
*   by the Free Software Foundation; either version 2 of the License, or
*   (at your option) any later version.
*
*   This program 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 Library General Public License for more details.
*
*   You should have received a copy of the GNU Library General Public
*   License along with this program; if not, write to the Free Software
*   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
package javazoom.spi.mpeg.sampled.file;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.Properties;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import junit.framework.TestCase;

/**
* Skip bytes before playing.
*/
public class SkipTest extends TestCase
{
  private String basefile=null;
  private String baseurl=null;
  private String filename=null;
  private String fileurl=null;
  private String name=null;
  private Properties props = null;
  private PrintStream out = null;

  /**
   * Constructor for PropertiesTest.
   * @param arg0
   */
  public SkipTest(String arg0)
  {
    super(arg0);
  }
  /*
   * @see TestCase#setUp()
   */
  protected void setUp() throws Exception
  {
    super.setUp();
    props = new Properties();
    InputStream pin = getClass().getClassLoader().getResourceAsStream("test.mp3.properties");
    props.load(pin);
    basefile = (String) props.getProperty("basefile");
    baseurl = (String) props.getProperty("baseurl");
    name = (String) props.getProperty("filename");
    filename = basefile + name;
    fileurl = baseurl + name;
    out = System.out;
  }

  /*
   * @see TestCase#tearDown()
   */
  protected void tearDown() throws Exception
  {
    super.tearDown();
  }

  public void testSkipFile()
  {
    if (out != null) out.println("-> Filename : "+filename+" <-");
        try
        {
            File file = new File(filename);
            AudioFileFormat aff = AudioSystem.getAudioFileFormat(file);
            AudioInputStream in = AudioSystem.getAudioInputStream(file);
            AudioInputStream din = null;
            AudioFormat baseFormat = in.getFormat();
            if (out != null) out.println("Source Format : "+baseFormat.toString());
            AudioFormat  decodedFormat = new AudioFormat(
                  AudioFormat.Encoding.PCM_SIGNED,
                  baseFormat.getSampleRate(),
                  16,
                  baseFormat.getChannels(),
                  baseFormat.getChannels() * 2,
                  baseFormat.getSampleRate(),
                  false);
            if (out != null) out.println("Target Format : "+decodedFormat.toString());
            din = AudioSystem.getAudioInputStream(decodedFormat, in);           
            long toSkip = (long)(file.length()/2);
            long skipped = skip(din,toSkip);
            if (out != null) out.println("Skip : "+skipped+"/"+toSkip+" (Total="+file.length()+")");
            if (out != null) out.println("Start playing");
            rawplay(decodedFormat, din);
            in.close();      
            if (out != null) out.println("Played");
            assertTrue("testSkip : OK",true);           
        }
        catch (Exception e)
        {
            assertTrue(e.getMessage(),false);       
        }
  }
   
    private long skip(AudioInputStream in, long bytes) throws IOException
    {
        long SKIP_INACCURACY_SIZE = 1200;
        long totalSkipped = 0;
        long skipped = 0;
        while (totalSkipped < (bytes - SKIP_INACCURACY_SIZE))
        {
            skipped = in.skip(bytes - totalSkipped);
            if (skipped == 0) break;
            totalSkipped = totalSkipped + skipped;
        }
        return totalSkipped;       
    }

    private SourceDataLine getLine(AudioFormat audioFormat) throws LineUnavailableException
    {
      SourceDataLine res = null;
      DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
      res = (SourceDataLine) AudioSystem.getLine(info);
      res.open(audioFormat);
      return res;
    }
   
    private void rawplay(AudioFormat targetFormat, AudioInputStream din) throws IOException, LineUnavailableException
    {
        byte[] data = new byte[4096];
        SourceDataLine line = getLine(targetFormat);       
        if (line != null)
        {
          // Start
          line.start();
          int nBytesRead = 0, nBytesWritten = 0;
          while (nBytesRead != -1)
          {
            nBytesRead = din.read(data, 0, data.length);
            if (nBytesRead != -1) nBytesWritten = line.write(data, 0, nBytesRead);
          }
          // Stop
          line.drain();
          line.stop();
          line.close();
          din.close();
        }      
    }

}
TOP

Related Classes of javazoom.spi.mpeg.sampled.file.SkipTest

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.