需要:我有一個音頻隊列和兩個AudioQueueBuffer
。如何在AudioQueueBuffer
中玩 NO.2 AudioQueueBuffer
。 我試過AudioQueueStop
或AudioQueueReset
。需要很長時間才能處理,玩得太晚。音頻隊列如何停止當前播放任務並立即開始播放另一個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