1
AudioRecordで録音したオーディオをスレッドで処理していますが、レコーダースレッドで処理を実行すると、一部のフレームが破棄されます。 android, AudioRecord.read() --> bufferoverflow, how to handle the buffer?によると、私は別のスレッドで処理を実行する必要がありますが、どのように? 1つのフレームごとに新しいスレッドを作成する必要がありますか(毎秒2〜3回)?AudioRecordスレッドでの処理
ここに私の現在の解決策がありますが、これを行うより良い方法があるのでしょうか?
//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);
}
}
num_readは、> 0かどうかを調べるためのものですか? –
@ user09123789542読み込みバイト数(> = 0)またはエラーコード(<0)のチェック。 'read()'は、バッファサイズ[(ドキュメント)](https://developer.android.com/reference/android/media/AudioRecord.html#read(byte []、%20int、%20int) ))。 – nandsito