// Path: src/uk/ac/open/audio/AudioException.java
// public class AudioException extends Exception
// {
// 	/**
// 	 * @param cause Underlying exception
// 	 */
// 	public AudioException(Throwable cause)
// 	{
// 		super(cause);
// 	}
// 
// 	/**
// 	 * @param message Informational message
// 	 */
// 	public AudioException(String message)
// 	{
// 		super(message);
// 	}
// }
// 
// Path: src/uk/ac/open/audio/mp3/MP3Decoder.java
// public class MP3Decoder implements StreamableDecoder
// {
// 	private Decoder d;
// 	private Bitstream b;
// 	private Header h;
// 
// 	/**
// 	 * Initialises the decoder.
// 	 * @param input InputStream used for input data
// 	 * @throws AudioException If there is a problem reading the MP3
// 	 */
// 	public void init(InputStream input) throws AudioException
// 	{
// 		try
// 		{
// 			d = new Decoder();
// 			if (!input.markSupported())
// 			{
// 				input = new MarkResetStream(input);
// 			}
// 	  	b=new Bitstream(input,false);
// 	  	h=b.readFrame();
// 	  	if(h==null) throw new AudioException("Cannot play empty MP3");
// 	  	SampleBuffer buffer=new SampleBuffer(
// 	  		h.frequency(),
// 	  		h.mode()==Header.SINGLE_CHANNEL ? 1 : 2);
// 	  	d.setOutputBuffer(buffer);
// 		}
// 		catch(JavaLayerException e)
// 		{
// 			throw new AudioException(e);
// 		}
// 	}
// 
// 	/**
// 	 * Decodes the next frame of the MP3 and returns audio data. This may cause
// 	 * the thread to block while waiting for data from the InputStream.
// 	 * @return Decoded data in 44.1kHz stereo 16-bit little-endian format;
// 	 *   or null if MP3 has ended
// 	 * @throws AudioException
// 	 */
// 	public byte[] decode() throws AudioException
// 	{
// 		if(h==null) return null;
// 
// 		try
// 		{
// 			SampleBuffer output=(SampleBuffer)d.decodeFrame(h, b);
// 			short[] data=output.getBuffer();
// 			int length=output.getBufferLength();
// 
// 			// Upsample if required
// 			boolean stereo=output.getChannelCount()==2;
// 			int frequency=output.getSampleFrequency();
// 			if(frequency!=44100)
// 			{
// 				data=AudioUtil.resample(data,length,stereo,frequency,44100);
// 				length=data.length;
// 			}
// 
// 			// Convert to bytes for audio output
// 			byte[] byteData=AudioUtil.shortToByte(data, length, !stereo);
// 
// 			b.closeFrame();
// 	  	h=b.readFrame();
// 
// 			return byteData;
// 		}
// 		catch(JavaLayerException e)
// 		{
// 			throw new AudioException(e);
// 		}
// 	}
// 
// }


import java.io.*;
import uk.ac.open.audio.AudioException;
import uk.ac.open.audio.mp3.MP3Decoder;
		File[] files = folder.listFiles();
		if(files == null)
		{
			return true;
		}

		// Loop through files
		boolean ok = true;
		for(File file  : files)
		{
			if(file.isDirectory())
			{
				ok = checkFolder(file) && ok;
			}
			else if(file.getName().toLowerCase().endsWith(".mp3"))
			{
				ok = checkFile(file) && ok;
			}
		}
		return ok;
	}

	private static boolean checkFile(File mp3) throws IOException
	{
		try
		{
			// Print file path
			System.out.print(mp3 + ": ");

			// Now test it...
// Path: src/uk/ac/open/audio/AudioException.java
// public class AudioException extends Exception
// {
// 	/**
// 	 * @param cause Underlying exception
// 	 */
// 	public AudioException(Throwable cause)
// 	{
// 		super(cause);
// 	}
// 
// 	/**
// 	 * @param message Informational message
// 	 */
// 	public AudioException(String message)
// 	{
// 		super(message);
// 	}
// }
// 
// Path: src/uk/ac/open/audio/mp3/MP3Decoder.java
// public class MP3Decoder implements StreamableDecoder
// {
// 	private Decoder d;
// 	private Bitstream b;
// 	private Header h;
// 
// 	/**
// 	 * Initialises the decoder.
// 	 * @param input InputStream used for input data
// 	 * @throws AudioException If there is a problem reading the MP3
// 	 */
// 	public void init(InputStream input) throws AudioException
// 	{
// 		try
// 		{
// 			d = new Decoder();
// 			if (!input.markSupported())
// 			{
// 				input = new MarkResetStream(input);
// 			}
// 	  	b=new Bitstream(input,false);
// 	  	h=b.readFrame();
// 	  	if(h==null) throw new AudioException("Cannot play empty MP3");
// 	  	SampleBuffer buffer=new SampleBuffer(
// 	  		h.frequency(),
// 	  		h.mode()==Header.SINGLE_CHANNEL ? 1 : 2);
// 	  	d.setOutputBuffer(buffer);
// 		}
// 		catch(JavaLayerException e)
// 		{
// 			throw new AudioException(e);
// 		}
// 	}
// 
// 	/**
// 	 * Decodes the next frame of the MP3 and returns audio data. This may cause
// 	 * the thread to block while waiting for data from the InputStream.
// 	 * @return Decoded data in 44.1kHz stereo 16-bit little-endian format;
// 	 *   or null if MP3 has ended
// 	 * @throws AudioException
// 	 */
// 	public byte[] decode() throws AudioException
// 	{
// 		if(h==null) return null;
// 
// 		try
// 		{
// 			SampleBuffer output=(SampleBuffer)d.decodeFrame(h, b);
// 			short[] data=output.getBuffer();
// 			int length=output.getBufferLength();
// 
// 			// Upsample if required
// 			boolean stereo=output.getChannelCount()==2;
// 			int frequency=output.getSampleFrequency();
// 			if(frequency!=44100)
// 			{
// 				data=AudioUtil.resample(data,length,stereo,frequency,44100);
// 				length=data.length;
// 			}
// 
// 			// Convert to bytes for audio output
// 			byte[] byteData=AudioUtil.shortToByte(data, length, !stereo);
// 
// 			b.closeFrame();
// 	  	h=b.readFrame();
// 
// 			return byteData;
// 		}
// 		catch(JavaLayerException e)
// 		{
// 			throw new AudioException(e);
// 		}
// 	}
// 
// }


// Path: src/uk/ac/open/jlayertest/CompatibilityTest.java
import java.io.*;
import uk.ac.open.audio.AudioException;
import uk.ac.open.audio.mp3.MP3Decoder;

		File[] files = folder.listFiles();
		if(files == null)
		{
			return true;
		}

		// Loop through files
		boolean ok = true;
		for(File file  : files)
		{
			if(file.isDirectory())
			{
				ok = checkFolder(file) && ok;
			}
			else if(file.getName().toLowerCase().endsWith(".mp3"))
			{
				ok = checkFile(file) && ok;
			}
		}
		return ok;
	}

	private static boolean checkFile(File mp3) throws IOException
	{
		try
		{
			// Print file path
			System.out.print(mp3 + ": ");

			// Now test it...
			MP3Decoder decoder = new MP3Decoder();