【发布时间】:2016-11-07 07:02:34
【问题描述】:
我正在线程中处理由 AudioRecord 录制的音频,但如果我在记录器线程中运行处理,则会丢弃一些帧。根据android, AudioRecord.read() --> bufferoverflow, how to handle the buffer?,我需要在单独的线程中运行处理,但是如何?我需要为每一帧(每秒 2-3 个)创建一个新线程吗?
这是我目前的解决方案,但我想知道是否有更好的方法来做到这一点?
//in the AudioRecord thread
while (!break_condition) {
int num_read = recorder.read(buffer, 0, buffer.length);
HeavyProcessingRunnable myRunnable = new HeavyProcessingRunnable(buffer);
Thread t = new Thread(myRunnable)
t.start();
}
用于繁重处理的可运行对象
public class HeavyProcessingRunnable implements Runnable {
private byte[] var;
public HeavyProcessingRunnable(byte[] var) {
this.var = var;
}
public void run() {
//if this is executed in audio recorder thread, frames get dropped
someHeavyProcessing(var);
}
}
【问题讨论】:
-
你最后是怎么解决这个问题的?能举个例子吗?
标签: java android multithreading audiorecord