我对 AudioQueueEnqueueBuffer 的调用失败,OSStatus -66686。我以前从未见过此错误代码,并且无法在任何地方找到有关它的信息。将其转换为 NSError 并打印其描述会给我以下控制台输出:
错误:错误域=NSOSStatusErrorDomain 代码=-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 调用失败?