2009-06-30 7 views
2

오디오 대기열 서비스를 사용하여 iPhone에 오디오를 녹음하고 있습니다. 녹음을 시작할 때 대기 시간 문제가 발생합니다.AudioQueueStart() 사용시 지연

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 

참고 "대기 버퍼"메시지 2 시작 "기록"메시지의 1 초의 지연 여기 (약) 코드이다. 어떤 아이디어라도 어떻게하면 제거 할 수 있습니까? 단, 앱을 시작하자마자 녹음을 시작해야합니까?

실제로 1 초는 시뮬레이터와 장치에서 일관되고 버퍼의 수 또는 크기의 영향을받지 않는 것 같습니다. 좋은 구형 모노 16 비트 PCM 사용.

답변

-2

마이크 타이슨은 blog에서 this을 다룹니다.

그러나 녹음을 빨리 시작하려면 원격 오디오 장치 인 AVAudioEngine을 사용하는 것이 좋습니다.

+0

감사합니다.이 페이지는 도움이됩니다. http://michael.tyson.id.au/2009/02/15/developing-loopy-part-2-implementation/ – sehugg

+0

그게 내가 찾고있는 페이지입니다. 좋은 물건이야. –

+0

당신이이 일을하기 위해 무엇을했는지 말해 줄 수 있습니까? 나는 똑같은 문제가있어서 그 블로그에서 올바른 정보를 찾지 못하는 것 같습니다. 당신은 kAudioSessionProperty_PreferredHardwareIOBufferDuration에 대해 이야기하고 있습니까? – madmik3