How should I use AudioFileStreamOpen Xcode 12

278 views Asked by At

I have a parser class to play Audio Files, It works on Xcode 11 (swift 4.2), Recently updated to Xcode 12 only this part of code is not working(swift 4.2). Image

Error:

Cannot convert value of type '(UnsafeMutableRawPointer, UInt32, UInt32, UnsafeRawPointer, UnsafeMutablePointer<AudioStreamPacketDescription>) -> ()' to expected argument type 'AudioFileStream_PacketsProc' (aka '@convention(c) (UnsafeMutableRawPointer, UInt32, UInt32, UnsafeRawPointer, Optional<UnsafeMutablePointer<AudioStreamPacketDescription>>) -> ()')

This the method :

func ParserPacketCallback(_ context: UnsafeMutableRawPointer, _ byteCount: UInt32, _ packetCount: UInt32, _ data: UnsafeRawPointer, _ packetDescriptions: UnsafeMutablePointer<AudioStreamPacketDescription>) {
let parser = Unmanaged<Parser>.fromOpaque(context).takeUnretainedValue()
let packetDescriptionsOrNil: UnsafeMutablePointer<AudioStreamPacketDescription>? = packetDescriptions
let isCompressed = packetDescriptionsOrNil != nil

/// At this point we should definitely have a data format
guard let dataFormat = parser.dataFormat else {
    return
}

/// Iterate through the packets and store the data appropriately
if isCompressed {
    for i in 0 ..< Int(packetCount) {
        let packetDescription = packetDescriptions[i]
        let packetStart = Int(packetDescription.mStartOffset)
        let packetSize = Int(packetDescription.mDataByteSize)
        let packetData = Data(bytes: data.advanced(by: packetStart), count: packetSize)
        parser.packets.append((packetData, packetDescription))
    }
} else {
    let format = dataFormat.streamDescription.pointee
    let bytesPerPacket = Int(format.mBytesPerPacket)
    for i in 0 ..< Int(packetCount) {
        let packetStart = i * bytesPerPacket
        let packetSize = bytesPerPacket
        let packetData = Data(bytes: data.advanced(by: packetStart), count: packetSize)
        parser.packets.append((packetData, nil))
    }
}}

May you please help me to solve it?) Thanks.

1

There are 1 answers

1
tinhuynh On

You should change packetDescriptions to Optional<UnsafeMutablePointer<AudioStreamPacketDescription>> type. This work for me