Мои вызовы AudioQueueEnqueueBuffer не выполняются, с OSStatus -66686.Я никогда не видел этот код ошибки раньше, и я не могу найти информацию о нем нигде.Преобразование его в NSError и печать его описания дает мне следующий вывод консоли:
Ошибка: Ошибка Domain = NSOSStatusErrorDomain Code = -66686 "Операция не может быть завершена. (Ошибка OSStatus -66686.)"
Вот весь мой соответствующий код инициализации AudioQueue:
AudioQueueRef audioQueue;
AudioQueueBufferRef aq_buffer[3];
AudioStreamBasicDescription streamFormat;
streamFormat.mSampleRate = 44100;
streamFormat.mFormatID = kAudioFormatLinearPCM;
streamFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
streamFormat.mBitsPerChannel = 16;
streamFormat.mChannelsPerFrame = 1;
streamFormat.mBytesPerPacket = 2 * streamFormat.mChannelsPerFrame;
streamFormat.mBytesPerFrame = 2 * streamFormat.mChannelsPerFrame;
streamFormat.mFramesPerPacket = 1;
streamFormat.mReserved = 0;
OSStatus err;
err = AudioQueueNewOutput(&streamFormat, AudioPlayCallback, self,
CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &audioQueue);
// Start playback
err = AudioQueueStart(audioQueue, NULL);
// Enqueue buffers
for (int i = 0; i < 3; i++) {
err = AudioQueueAllocateBuffer (audioQueue, 1024, &aq_buffer[i]);
err = AudioQueueEnqueueBuffer (audioQueue, aq_buffer[i], 0, NULL);
NSLog(@"err : %d", err);
NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain
code:err
userInfo:nil];
NSLog(@"Error: %@", [error description]);
}
Я пытался изменить размер буфера, который я выделяю, но это не имеет никакого эффекта (и вызов AudioQueueAllocateBuffer все равно не завершается ошибкой),Я попытался переключить порядок вызовов между AudioQueueStart и распределением буфера и ставить в очередь вызовы, безрезультатно.Я проверил комментарии в AudioQueue.h, и я не вижу, что я делаю неправильно.Описание ошибки слишком расплывчато, чтобы быть полезным.
Почему происходит сбой вызова AudioQueueEnqueueBuffer?