2011-01-04 6 views
2

AudioQueueNewInput에 제공된 콜백을 제공하는 버퍼의 크기와 관계없이 대략 동일한 시간 간격으로 발생합니다. 예를 들어AudioQueueNewInput 콜백 대기 시간

:

당신은 0.05 초 버퍼가 오른쪽 (0.001 초) 후 44K 처음 .09 초에 대한 전화 콜백 후 두 번째 호출이 발생에 기록하는 경우. 그런 다음 ~09 초 기다립니다. 버퍼 크기가 .025 인 경우. 0.09 초를 기다린 다음 즉시 거의 3 개의 버퍼를 더 보게됩니다.

샘플 속도를 변경하면 대기 시간이 길어집니다.

16 비트 8k 오디오를 녹음하면 버퍼 플러드간에 지연 시간이 0.5 초가됩니다.

그래서 나는 배후에서 사용되고있는 8000 바이트 버퍼가 있다고 의심합니다. 그것이 가득 찰 때까지 내 콜백은 비워 질 때까지 주어진 버퍼로 실행됩니다.

최대한 적은 대기 시간으로 16k 16 비트 오디오를 녹음하고 싶습니다. 위의 것을 감안할 때 나는 항상 대략 25 초의 대기 시간을 보았습니다. 대기 시간을 줄일 수있는 방법이 있습니까? 내부 버퍼 크기를 설정하는 오디오 세션 속성이 있습니까? 나는 kAudioSessionProperty_PreferredHardwareIOBufferDuration을 시도했지만 도움이되지 않는다.

감사합니다.

답변

0

Audio Queue API는 Audio Unit RemoteIO API 위에 구축 된 것처럼 보입니다. 작은 오디오 대기열 버퍼는 아마도 더 큰 RemoteIO 버퍼를 채우는 데 사용됩니다. 아마 어떤 비율 리샘플링이 일어날 수도 있습니다 (원래 2G 전화에서).

대기 시간을 줄이려면 RemoteIO Audio Unit API를 직접 사용하고 오디오 세션에 앱의 대기 시간을 줄여야합니다.

+0

조금만 RemoteIO API로 작업 한 후 매우 낮은 대기 시간 기록을 얻을 수있었습니다. 이 웹 사이트는 도움이되었습니다. http://atastypixel.com/blog/using-remoteio-audio-unit/ – madmik3