package com.mogujie.tt.support.audio;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import com.mogujie.tt.log.Logger;
import com.mogujie.tt.task.TaskCallback;
public class SpeexWriter implements Runnable {
private Logger log = Logger.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;
private TaskCallback mCallback;
public static int write_packageSize = 1024;
public SpeexWriter(String fileName, TaskCallback callback) {
super();
list = Collections.synchronizedList(new LinkedList<processedData>());
this.mCallback = callback;
client.setSampleRate(8000);
client.start(fileName);
}
public void run() {
log.d("write thread runing");
while (this.isRecording() || list.size() > 0) {
if (list.size() > 0) {
pData = list.remove(0);
// gauss_packageSize/2
log.i("pData size=" + pData.size);
client.writeTag(pData.processed, pData.size);
log.d("list size = {}" + list.size());
} else {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
log.d("write thread exit");
stop();
mCallback.callback(null);
}
public void putData(final byte[] buf, int size) {
log.d("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];
}
}