문제

오디오 대기열 서비스를 사용하여 iPhone에서 오디오를 녹음하고 있습니다. 녹음을 시작할 때 대기 시간 문제가 있습니다. 코드는 다음과 같습니다 (대략).

OSStatus status = AudioQueueNewInput(
     &recordState.dataFormat, // 1
     AudioInputCallback, // 2
     &recordState,  // 3
     CFRunLoopGetCurrent(),  // 4
     kCFRunLoopCommonModes, // 5
     0,  // 6
     &recordState.queue);  // 7

// create buffers
for(int i = 0; i < NUM_BUFFERS; i++)
{
    if (status == 0)
        status = AudioQueueAllocateBuffer(recordState.queue, BUFFER_SIZE, &recordState.buffers[i]);
}

DebugLog(@"Starting recording\n");
OSStatus status = 0;
for(int i = 0; i < NUM_BUFFERS; i++)
{
    if (status == 0)
        status = AudioQueueEnqueueBuffer(recordState.queue, recordState.buffers[i], 0, NULL);
}
DebugLog(@"Queued buffers\n");
if (status == 0)
{
    // start audio queue
    status = AudioQueueStart(recordState.queue, NULL);
}
DebugLog(@"Started recording, status = %d\n", status);

로그 출력은 다음과 같습니다.

2009-06-30 19:18:59.631 app[24887:20b] Starting recording
2009-06-30 19:18:59.828 app[24887:20b] Queued buffers
2009-06-30 19:19:00.849 app[24887:20b] Started recording, status = 0

"대기 버퍼"메시지와 두 번째 "녹화 시작"메시지 사이의 1 초 지연에 유의하십시오. 앱을 시작하자마자 녹음을 시작하는 것 외에도 어떻게 제거 할 수 있습니까?

BTW, 1 초는 시뮬레이터와 장치에서 매우 일관되며 버퍼의 수 또는 크기에 영향을받지 않는 것 같습니다. 좋은 오래된 모노 16 비트 PCM 사용.

도움이 되었습니까?

해결책

마이크 타이슨 커버 이것 그의 블로그.

그러나 녹음을 신속하게 시작하려는 경우 원격 오디오 장치를 사용하는 것이 좋습니다. AVAudioEngine.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top