package com.sixin.speex;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
*
* @author Gauss
* ʹ��OGG��װ��д�ļ�
*
*/
public class SpeexWriter implements Runnable {
// private Logger log = LoggerFactory.getLogger(SpeexWriter.class);
private final Object mutex = new Object();
//д�ļ�
private SpeexWriteClient client = new SpeexWriteClient();
private volatile boolean isRecording;
private processedData pData;
private List<processedData> list;
public static int write_packageSize = 1024;
public SpeexWriter(String fileName) {
super();
list = Collections.synchronizedList(new LinkedList<processedData>());
client.setSampleRate(8000);
client.start(fileName);
}
public void run() {
// log.debug("write thread runing");
while (this.isRecording() || list.size() > 0) {
if (list.size() > 0) {
pData = list.remove(0);
// gauss_packageSize/2
// log.info("pData size=" + pData.size);
client.writeTag(pData.processed, pData.size);
// log.debug("list size = {}", list.size());
} else {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// log.debug("write thread exit");
stop();
}
public void putData(final byte[] buf, int size) {
// log.debug("after convert. size=====================[640]:" + size);
processedData data = new processedData();
//data.ts = ts;
data.size = size;
System.arraycopy(buf, 0, data.processed, 0, size);
list.add(data);
}
public void stop() {
client.stop();
}
public void setRecording(boolean isRecording) {
synchronized (mutex) {
this.isRecording = isRecording;
if (this.isRecording) {
mutex.notify();
}
}
}
public boolean isRecording() {
synchronized (mutex) {
return isRecording;
}
}
class processedData {
//private long ts;
private int size;
private byte[] processed = new byte[write_packageSize];
}
}