package ca.carleton.gcrc.atlas.tracks.conversion;

import java.net.URL;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException;

import ca.carleton.gcrc.atlas.logger.Logger;

public class SystemConverter implements InternalConverter {
	private Logger logger = Logger.forClass(this.getClass());
	
	static private SystemConverter converter = new SystemConverter();
	
	static public SystemConverter createInstance() {
		// Singleton
		return converter;
	}
	
	private SystemConverter() {
		
	}

	public AudioInputStream getAudioInputStream(URL url) {
		try {
			AudioInputStream inputStream = AudioSystem.getAudioInputStream(url);
			return inputStream;
		} catch (UnsupportedAudioFileException exIAE) { // installed libs on client system didn't include this format? Try compressed!
			// do nothing
		} catch (Exception exGeneral) {
			logger.error("getAudioInputStreamFromUrl: Unknown error when attempting to open input stream using system providers: " + url,exGeneral);
		}
		return null;
	}

	public AudioInputStream getAudioInputStream(AudioFormat format, AudioInputStream inStream) {
		try {
			AudioInputStream convertedStream = AudioSystem.getAudioInputStream(format, inStream);
			return convertedStream;
		} catch (IllegalArgumentException exIAE) { // installed decoders on client system not appropriate.  Try vorbis!
			// do nothing
		} catch (Exception exGeneral) {
			logger.error("getConversionAudioInputStream: unknown error when converting non-PCM audio to PCM.",exGeneral);
		}
		return null;
	}
}
