Wie rufe ich CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer auf?

Ich versuche herauszufinden, wie man das nenntAVFoundation Funktion in Swift. Ich habe eine Menge Zeit damit verbracht, mich mit Deklarationen und Syntax auseinanderzusetzen, und bin so weit gekommen. Der Compiler ist größtenteils glücklich, aber ich habe noch ein letztes Dilemma.

public func captureOutput(
    captureOutput: AVCaptureOutput!,
    didOutputSampleBuffer sampleBuffer: CMSampleBuffer!,
    fromConnection connection: AVCaptureConnection!
) {
    let samplesInBuffer = CMSampleBufferGetNumSamples(sampleBuffer)
    var audioBufferList: AudioBufferList

    var buffer: Unmanaged<CMBlockBuffer>? = nil

    CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(
        sampleBuffer,
        nil,
        &audioBufferList,
        UInt(sizeof(audioBufferList.dynamicType)),
        nil,
        nil,
        UInt32(kCMSampleBufferFlag_AudioBufferList_Assure,16ByteAlignment),
        &buffer
    )

    // do stuff
}

Der Compiler beschwert sich über das 3. und 4. Argument:

Adresse der Variablen 'audioBufferList' vor der Initialisierung

un

Variable 'audioBufferList' wird vor der Initialisierung verwendet

So was soll ich denn hier machen?

Ich arbeite aus vondiese StackOverflow-Antwort aber es ist Ziel-C. Ich versuche es in Swift zu übersetzen, stoße aber auf dieses Problem.

Oder gibt es evtl. einen besseren ansatz? Ich muss die Daten einzeln aus dem Puffer lesen, also versuche ich im Grunde, ein Array der Samples zu erhalten, über die ich iterieren kann.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage