尝试使用swift与iOS AudioQueues接口,并在尝试通过定义我的状态的对象时遇到障碍。
我的状态对象是一个自定义结构,定义为:
struct UserData {
var active: Bool = false
var audioFileId: AudioFileID = nil
}
我的swift音频输入回调:
let myCallback : @convention(c) (UnsafeMutablePointer<Void>, AudioQueueRef, AudioQueueBufferRef, UnsafePointer<AudioTimeStamp>, UInt32, UnsafePointer<AudioStreamPacketDescription>) -> Void = {
(inUserData, inAQ, inBuffer, inStartTime, inNumberPacketDescriptions, inPacketDescs) -> Void in
...
}
最后,初始化音频队列:
AudioQueueNewInput(&audioStreamBasicDescription, myCallback, &userData, nil, nil, 0, &inputQueue)
我一直在想如何将inUserData: UnsafeMutablePointer<Void>
强制转换为我的UserData结构
或者,当然,任何更好的处理方式。
谢谢!
您可以使用任一
let userData: UserData = UnsafePointer(inUserData).memory
或
let userData = UnsafePointer<UserData>(inUserData).memory
两者是等价的。另请参阅UnsafeMutablePointer结构参考。
要返回一些修改后的数据,可以使用
let userDataReference = UnsafeMutablePointer<UserData>(inUserData)
var userData = userDataReference.memory
userData.… = … /* modifiy local copy */
userDataReference.memory = userData
你也可以直接修改userDataReference.memory
,但我建议不要这样做。