필요 : 오디오 대기열이 있고 두 개가 AudioQueueBuffer
입니다. NO.1 AudioQueueBuffer
연주 중에 즉시 NO.2 AudioQueueBuffer
을 어떻게 연주 할 수 있습니까? AudioQueueStop
또는 AudioQueueReset
을 사용해 보았습니다. 처리하는 데 오랜 시간이 걸리므로 NO.가 너무 늦게 재생됩니다.Audio Queue가 현재 재생중인 작업을 중단하고 다른 AudioQueueBuffer를 즉시 시작하는 방법은 무엇입니까?
-(void)playBuffer:(AudioBuffer *)buffer format:(const AudioStreamBasicDescription *)format
{
AudioQueueStop(_audioQueue, YES);//this line consuming too much time
AudioQueueDispose(_audioQueue, YES);
AudioQueueRef newAudioQueue;
AudioQueueBufferRef queueBuffer;
AudioQueueNewOutput(format, audioQueueOutputCallback, (__bridge void*)self,
nil, nil, 0, &newAudioQueue);
OSStatus status;
status = AudioQueueAllocateBuffer(newAudioQueue, buffer->mDataByteSize, &queueBuffer);
memcpy(queueBuffer->mAudioData, buffer->mData, buffer->mDataByteSize);
queueBuffer->mAudioDataByteSize=buffer->mDataByteSize;
status = AudioQueueEnqueueBuffer(newAudioQueue, queueBuffer, 0, NULL);
Float32 gain=1.0;
AudioQueueSetParameter(newAudioQueue, kAudioQueueParam_Volume, gain);
AudioQueueStart(newAudioQueue, nil);
AudioQueueFreeBuffer(newAudioQueue, queueBuffer);
_audioQueue = newAudioQueue;
}
그래서 내 질문은 : 나는 대안을 필요로 그것을 가능 audio queue
놀이 다음 오디오 버퍼가 즉시 또는 audio queue
이 작업과 일치하지 않는되고?
'AVAudioUnit'이 좋은 선택 일 수 있습니다. – ooOlly