如何在 Swift 3 中创建 AudioQueueInputCallback?

How to create an AudioQueueInputCallback in Swift 3?

Apples Swift3APICore Audio使用方法AudioQueueNewInput(...)创建一个新的录音音频队列对象。

参数之一 inCallbackProc 的类型为 AudioQueueInputCallback。有关 AudioQueueNewInput 函数的完整声明,请参阅 this

AudioQueueInputCallback 本身的声明如下所示:

typealias AudioQueueInputCallback = (UnsafeMutableRawPointer?, AudioQueueRef, AudioQueueBufferRef, UnsafePointer<AudioTimeStamp>, UInt32, UnsafePointer<AudioStreamPacketDescription>?) -> Void

我想创建一个函数,我可以安全地将其传递给 AudioQueueNewInput 函数。我试过的是这样的:

func audioQueueInputCallback(inUserData: UnsafeMutableRawPointer?,
                           inQueue: AudioQueueRef,
                           inBuffer: AudioQueueBuffer,
                           inStartTime: UnsafePointer<AudioTimeStamp>,
                           inNumPackets: UInt32,
                           inPacketDesc: UnsafePointer<AudioStreamPacketDescription>?) {
   // Handle stuff
}

遗憾的是 Xcode 似乎无法将我的函数转换为类型 AudioQueueInputCallback。我在这里错过了什么?

回调函数的第三个参数应该是 AudioQueueBufferRef,而不是 AudioQueueBuffer。

参见:https://developer.apple.com/reference/audiotoolbox/audioqueuebufferref