package ch.retorte.intervalmusiccompositor.encoder;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.UnsupportedAudioFileException;
import ch.retorte.intervalmusiccompositor.spi.progress.ProgressListener;
import ch.retorte.intervalmusiccompositor.spi.encoder.AudioFileEncoder;
import ch.retorte.intervalmusiccompositor.spi.progress.ProgressUpdatable;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
/**
* @author nw
*/
public class Mp3AudioFileEncoder implements AudioFileEncoder, ProgressUpdatable {
private static final String EXTENSION = "mp3";
private LameByteArrayEncoder encoder;
private ProgressListener progressListener;
public void encode(AudioInputStream audioInputStream, long streamLengthInBytes, File outputFile) throws UnsupportedAudioFileException, IOException {
createEncoderWithSettings(audioInputStream.getFormat());
Files.write(Paths.get(outputFile.getAbsolutePath()), encodeToMp3(audioInputStream, streamLengthInBytes));
}
private void createEncoderWithSettings(AudioFormat audioFormat) {
encoder = new LameByteArrayEncoder(audioFormat, progressListener);
}
private byte[] encodeToMp3(AudioInputStream audioInputStream, long streamLengthInBytes) throws IOException {
return encoder.encodeToMp3(audioInputStream, streamLengthInBytes);
}
public boolean isAbleToEncode() {
return true;
}
public String getFileExtension() {
return EXTENSION;
}
public String getIdentificator() {
return EXTENSION;
}
@Override
public void setProgressListener(ProgressListener progressListener) {
this.progressListener = progressListener;
}
}