我正在开发语音应用程序。
我需要某种类型的缓冲区队列,以便我在线程中连续记录,将充满字节的缓冲区放入队列并传输到服务器,然后从队列中取出下一个缓冲区。
下面是录制代码:
Queue<byte[]> qArray = new LinkedList<byte[]>();
recordingThread = new Thread(new Runnable() {
@Override
public void run() {
bData = new byte[BufferElements];
while (isRecording) {
recorder.read(bData, 0, BufferElements);
qArray.add(bData);
if (AudioRecord.ERROR_INVALID_OPERATION != 0) {
SendAudio();
}
}
}
}, "AudioRecorder Thread");
recordingThread.start();
但是在将其发送到服务器时仍然缺少一些 byte[] 数据
这是向服务器发送语音的代码:
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(ServerUrl.url_audio);
// Json Format
JSONObject holder = new JSONObject();
JSONArray jArray = new JSONArray();
try {
byte[] tmparr = qArray.poll();
for (int i = 0; i < tmparr.length; i++) {
jArray.put(i, tmparr[i]);
}
holder.put("Voice", jArray);
我不想错过任何正在记录的数据。
任何帮助将不胜感激。谢谢