package ch.retorte.intervalmusiccompositor.decoder; import java.io.File; import java.io.IOException; import java.util.Collection; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.UnsupportedAudioFileException; import org.tritonus.sampled.convert.jorbis.JorbisFormatConversionProvider; import org.tritonus.sampled.file.jorbis.JorbisAudioFileReader; import ch.retorte.intervalmusiccompositor.spi.audio.AudioStandardizer; import ch.retorte.intervalmusiccompositor.spi.decoder.AudioFileDecoder; import static com.google.common.collect.Lists.newArrayList; /** * @author nw */ public class OggAudioFileDecoder implements AudioFileDecoder { private OggFileProperties oggFile = new OggFileProperties(); private AudioStandardizer audioStandardizer; public OggAudioFileDecoder(AudioStandardizer audioStandardizer) { this.audioStandardizer = audioStandardizer; } @Override public AudioInputStream decode(File inputFile) throws UnsupportedAudioFileException, IOException { AudioInputStream oggAis; AudioInputStream result; JorbisAudioFileReader reader = new JorbisAudioFileReader(); oggAis = reader.getAudioInputStream(inputFile); AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, oggAis.getFormat().getSampleRate(), 16, oggAis.getFormat().getChannels(), oggAis.getFormat().getChannels() * 2, oggAis.getFormat().getSampleRate(), false); JorbisFormatConversionProvider oggReader = new JorbisFormatConversionProvider(); result = oggReader.getAudioInputStream(decodedFormat, oggAis); return audioStandardizer.standardize(result); } @Override public boolean isAbleToDecode(File file) { return oggFile.isOfThisType(file); } @Override public Collection<String> getExtensions() { return newArrayList(oggFile.getFileExtensions()); } }