안녕하세요.
voip개발에 앞서서 AudioRecord도 공부해봐야 될꺼같아서.
통신보다는 녹음을 먼저 공부하던 도중에 궁금한점이 생겨서 이렇게 여쭤봅니다.
다름이 아니라 일정시간마다 PCM데이터를 획득하는 방법에 대해서 인데요.
AudioRecordInstance.read()라는 함수로 PCM데이터를 획득 할 수 있더라구요.
그런데 while문을 돌려서 계속해서 read를 호출하니 일정한 FrameSize만큼 계속 획득이 되긴하나
획득하는 시간이 일정하지 않더라구요?
8khz샘플링 레이트로 프레임사이즈를 160으로 잡았을때 8000/160 = 50 이므로
1초에 50번을 획득해야되니 read()함수는 20ms마다 호출이 되어야되는데요.
실질적으로는 20ms인 주기를 정확히 맞추기가 힘드네요..
로그를 중간 중간 삽입해 보니 어떤건 1ms마다 호출할때도 존재하고.
또 다른건 120ms마다 호출할 때도 있고 너무 들쭉날쭉이 심해서요..
찾아보니 리스너가 있더라구요.
리스너를 통해서 실행을 해보니
계속적인 콜백 효과를 내보았지만 이것도 역시나 들쭉 거리긴 해도 while문 보다는 변동폭이 작긴하지만
그래도 역시 들쭉 거려서 문제입니다...
그나마 가장 효율이 높았던건 while문으로 돌리면서
과거 실행시간과 현재 실행시간을 비교해서 sleep을 주는 정도로
트릭을 쓴게 3ms차이 내외로 왔다갔다 할 수 있게 만들긴 했는데...
프로그램에 너무 무리가 가는게 아닌가 생각하고 있습니다.
좀더 정확한 콜백함수 제작방법이 없을까요..
고수님들의 답변을 기다립니다.
읽어주셔서 감사합니다.