package org.myrobotlab.audio;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.TargetDataLine;
import org.myrobotlab.logging.LoggerFactory;
import org.myrobotlab.logging.Logging;
import org.myrobotlab.service.AudioFile;
import org.slf4j.Logger;
class CaptureThread extends Thread {
// An arbitrary-size temporary holding
// buffer
static Logger log = LoggerFactory.getLogger(AudioFile.class);
byte buffer[] = new byte[10000];
OutputStream out = null;
TargetDataLine audioLine;
SourceDataLine sourceDataLine;
boolean done = false;
public CaptureThread(TargetDataLine audioLine) {
this(audioLine, null);
}
public CaptureThread(TargetDataLine audioLine, OutputStream out) {
this.audioLine = audioLine;
if (out == null) {
out = new ByteArrayOutputStream();
;
}
this.out = out;
}
@Override
public void run() {
out = new ByteArrayOutputStream();
try {// Loop until stopCapture is set
// by another thread that
// services the Stop button.
while (!done) {
// Read data from the internal
// buffer of the data line.
int cnt = audioLine.read(buffer, 0, buffer.length);
if (cnt > 0) {
// Save data in output stream
// object.
out.write(buffer, 0, cnt);
} // end if
} // end while
audioLine.close();
out.close();
} catch (Exception e) {
Logging.logError(e);
} finally {
if (out != null) {
try {
out.close();
} catch (Exception e) {
}
}
}
}// end run
public void setBufferLength(int size) {
buffer = new byte[size];
}
public void stopCapture() {
this.interrupt();
}
public OutputStream getOuputStream() {
return out;
}
}