aka*_*aii 1 iphone audio objective-c audioqueue ios
我对 AudioQueueEnqueueBuffer 的调用失败,OSStatus -66686。我以前从未见过此错误代码,并且在任何地方都找不到有关它的信息。将其转换为 NSError 并打印其描述会得到以下控制台输出:
\n\n错误:错误域=NSOSStatusErrorDomain代码=-66686“操作无法完成\xe2\x80\x99。(OSStatus错误-66686。)”
\n\n这是我所有相关的 AudioQueue 初始化代码:
\n\nAudioQueueRef audioQueue;\nAudioQueueBufferRef aq_buffer[3];\nAudioStreamBasicDescription streamFormat;\nstreamFormat.mSampleRate = 44100;\nstreamFormat.mFormatID = kAudioFormatLinearPCM;\nstreamFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;\nstreamFormat.mBitsPerChannel = 16;\nstreamFormat.mChannelsPerFrame = 1;\nstreamFormat.mBytesPerPacket = 2 * streamFormat.mChannelsPerFrame;\nstreamFormat.mBytesPerFrame = 2 * streamFormat.mChannelsPerFrame;\nstreamFormat.mFramesPerPacket = 1;\nstreamFormat.mReserved = 0;\n\nOSStatus err;\nerr = AudioQueueNewOutput(&streamFormat, AudioPlayCallback, self, \n CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &audioQueue);\n\n// Start playback\nerr = AudioQueueStart(audioQueue, NULL);\n\n// Enqueue buffers\nfor (int i = 0; i < 3; i++) {\n err = AudioQueueAllocateBuffer (audioQueue, 1024, &aq_buffer[i]); \n err = AudioQueueEnqueueBuffer (audioQueue, aq_buffer[i], 0, NULL);\n NSLog(@"err : %d", err);\n NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain\n code:err\n userInfo:nil];\n NSLog(@"Error: %@", [error description]);\n} \n
Run Code Online (Sandbox Code Playgroud)\n\n我尝试修改分配的缓冲区的大小,但这没有任何效果(并且对 AudioQueueAllocateBuffer 的调用无论如何也不会失败)。我尝试在 AudioQueueStart 和缓冲区分配以及排队调用之间切换调用顺序,但没有效果。我检查了 AudioQueue.h 中的注释,但没有看到我做错了什么。错误描述太模糊,没有帮助。
\n\n为什么我的 AudioQueueEnqueueBuffer 调用失败?
\n使用 Spotlight 进行搜索表明可以在以下位置找到“66686”AudioQueue.h
:
kAudioQueueErr_BufferEmpty = -66686
Run Code Online (Sandbox Code Playgroud)
因此,无论您尝试做什么,缓冲区都是空的。
快速浏览一下上面的代码,我觉得它就像 SpeakHere 录音代码。不过,您已在上面对其进行了播放设置。
无论哪种情况,您都需要在启动队列之前分配队列的缓冲区。对于记录,当新记录的数据可用时,将定期调用您的函数回调。
对于播放,当您需要向队列提供更多音频数据时,将定期调用函数回调。
归档时间: |
|
查看次数: |
3593 次 |
最近记录: |