be.tarsos.dsp.writer.WriterProcessor Maven / Gradle / Ivy
package be.tarsos.dsp.writer;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import be.tarsos.dsp.AudioEvent;
import be.tarsos.dsp.AudioProcessor;
import be.tarsos.dsp.io.TarsosDSPAudioFormat;
/**
* This class writes the ongoing sound to an output specified by the programmer
*
*/
public class WriterProcessor implements AudioProcessor {
RandomAccessFile output;
TarsosDSPAudioFormat audioFormat;
private int audioLen=0;
private static final int HEADER_LENGTH=44;//byte
/**
*
* @param audioFormat which this processor is attached to
* @param output randomaccessfile of the output file
*/
public WriterProcessor(TarsosDSPAudioFormat audioFormat,RandomAccessFile output){
this.output=output;
this.audioFormat=audioFormat;
try {
output.write(new byte[HEADER_LENGTH]);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean process(AudioEvent audioEvent) {
try {
audioLen+=audioEvent.getByteBuffer().length;
//write audio to the output
output.write(audioEvent.getByteBuffer());
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
@Override
public void processingFinished() {
//write header and data to the result output
WaveHeader waveHeader=new WaveHeader(WaveHeader.FORMAT_PCM,
(short)audioFormat.getChannels(),
(int)audioFormat.getSampleRate(),(short)16,audioLen);//16 is for pcm, Read WaveHeader class for more details
ByteArrayOutputStream header=new ByteArrayOutputStream();
try {
waveHeader.write(header);
output.seek(0);
output.write(header.toByteArray());
output.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy