rlm@9: package com.aurellem.capture.audio; rlm@9: rlm@9: import java.io.File; rlm@24: import java.io.FileNotFoundException; rlm@24: import java.io.FileOutputStream; rlm@9: import java.io.IOException; rlm@9: import java.nio.ByteBuffer; rlm@9: rlm@9: import javax.sound.sampled.AudioFormat; rlm@9: import javax.sound.sampled.AudioSystem; rlm@9: rlm@23: import org.tritonus.sampled.file.WaveAudioOutputStream; rlm@24: import org.tritonus.share.sampled.file.TDataOutputStream; rlm@24: import org.tritonus.share.sampled.file.TNonSeekableDataOutputStream; rlm@23: rlm@52: /** rlm@52: * A SoundProcessor that sends all sound data it receives to a wav file. rlm@52: * rlm@52: * @author Robert McIntyre rlm@52: */ rlm@52: rlm@9: public class WaveFileWriter implements SoundProcessor { rlm@9: rlm@68: public File targetFile; rlm@68: private WaveAudioOutputStream wao; rlm@68: private TDataOutputStream tos; rlm@68: private boolean initialized = false; rlm@31: rlm@68: public WaveFileWriter(File targetFile) rlm@68: throws FileNotFoundException{ rlm@68: tos = new TNonSeekableDataOutputStream rlm@68: (new FileOutputStream(targetFile)); rlm@68: } rlm@31: rlm@68: public void init(AudioFormat format){ rlm@68: wao = new WaveAudioOutputStream(format,AudioSystem.NOT_SPECIFIED, tos); rlm@68: } rlm@68: rlm@68: public void process(ByteBuffer audioSamples, int numSamples, AudioFormat format) { rlm@68: audioSamples.clear(); rlm@68: if (!initialized){ rlm@68: init(format); rlm@68: initialized = true; rlm@31: } rlm@31: rlm@68: byte[] data = new byte[numSamples]; rlm@68: audioSamples.get(data, 0, numSamples); rlm@68: try {wao.write(data, 0, numSamples);} rlm@68: catch (IOException e) {e.printStackTrace();} rlm@68: } rlm@9: rlm@68: public void cleanup() { rlm@68: try {wao.close();} rlm@68: catch (IOException e) {e.printStackTrace();} rlm@68: } rlm@9: rlm@24: rlm@9: }