2016-05-06 11 views
2

У меня есть AURenderCallbackStruct с аудиоустройством. В обратных вызовах я получаю аудиоданные как ioData: UnsafeMutablePointer<AudioBufferList>. проверьте приведенный ниже код.Как преобразовать UnsafeMutablePointer <AudioBufferList> в AudioBuffer в Swift?

func renderCallback(inRefCon: UnsafeMutablePointer<Void>, ioActionFlag: UnsafeMutablePointer<AudioUnitRenderActionFlags>, inTimeStamp: UnsafePointer<AudioTimeStamp>, inBufferNumber: UInt32, inNumberFrames: UInt32, ioData: UnsafeMutablePointer<AudioBufferList>) -> OSStatus { 

    // How can i get AudioBuffer from iodate here ? 

    return noErr 
} 

Как я могу получить AudioBuffer от ioDate здесь? Пожалуйста, предложите ...

N.B. Я использую swift 2.2

ответ

3

Просто используйте memory собственность любого UnsafeMutablePointer<> для доступа к необработанной памяти. Так что ваш код должен выглядеть примерно так.

var audioBufferListPtr = UnsafeMutableAudioBufferListPointer(ioData).unsafeMutablePointer.memory 
for i in 0 ..< Int(inBufferNumber) { 
    var buffer: AudioBuffer = audioBufferListPtr.mBuffers 
} 

N.B. Свифт - быстро развивающийся язык. Таким образом, этот код может измениться в будущем.