1
AudioRecord로 녹음 된 오디오를 스레드에서 처리하고 있지만 레코더 스레드에서 처리를 실행하면 일부 프레임이 삭제됩니다. android, AudioRecord.read() --> bufferoverflow, how to handle the buffer?에 따르면, 나는 별도의 스레드에서 처리를 실행해야하지만 어떻게? 모든 단일 프레임 (초당 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