AudioRecord 기능을 사용할때
val recorder = AudioRecord(
MediaRecorder.AudioSource.MIC,
sampleRate,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT,
bufferSize // ✅ 내부 버퍼 크기
)
val buf = ShortArray(bufferSize / 2) // ✅ 내가 읽는 버퍼 크기
val n = recorder.read(buf, 0, buf.size) // ✅ 읽기 시도
이렇게 버퍼 사이즈를 정의 해야한다. 여기서의 버퍼는 마이크 → OS → 앱 사이에서 오디오 데이터를 임시 저장는 역할을 한다. 즉 소리의 데이터들이 계속 내부 버퍼로 전달이 된다는것이다.
만약 내부 버퍼가 가득찬 상태에서 데이터가 전달이 되면 기존 가장 오래된 데이터가 삭제가 되고 새로운 데이터가 버퍼에 들어간다.(AudioRecord의 내부 버퍼 구조가 순환 구조(링 구조) 여서 그렇다.)
buf 는 이제 read 할때 읽어올 데이터의 size(앱 버퍼 라고하겠다.) 이다.
여기서 read는 블로킹 함수여서 read에서의 데이터 size가 다 찰때까지 기다린다.
그래서 read 할때 앱 버퍼의 크기를 잘 정의해야한다.