iphone - AudioQueueEnqueueBuffer 失败

标签 iphone objective-c ios audio audioqueue

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

错误:Error 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 调用失败了?

最佳答案

使用 Spotlight 搜索显示 “66686” 可在 AudioQueue.h 中找到:

kAudioQueueErr_BufferEmpty          = -66686

因此,无论您尝试做什么,缓冲区都是空的。

快速浏览一下上面的代码,在我看来它就像是 SpeakHere 录音代码。但是,您已经在上面对其进行了设置以进行播放。

无论哪种情况,您都需要在启动队列之前分配队列的缓冲区。对于记录,当新记录的数据可用时,您的函数回调将被定期调用。

对于播放,当您需要向队列提供更多音频数据时,将定期调用回调函数。

关于iphone - AudioQueueEnqueueBuffer 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6136064/

相关文章:

iphone - 在选择时更改 UITableViewCell 布局

ios - 在不使用循环但使用游标的情况下遍历 NSArray?

ios - 如何让导航栏显示在 AVCapture session 中

ios - 如何在 iOS 中使用 Tesseract OCR 获取准确的文本?

iphone - 如何从一个类中更新另一个类中的变量?

objective-c - 自动释放的对象什么时候真正释放?

objective-c - UILabel 的 backgroundColor 是不可动画的吗?

ios - 是否可以从 struct 数组中获取一个项目,然后附加到 SwiftUI 中的不同数组?

ios - Swift:在文本字段内单击时将 self.view 向上移动时出现问题

iphone - 错误代码:ERROR ITMS-3000