1

试图将我的代码迁移到 Swift 3,但我似乎无法解决这个问题。需要一些帮助!

我有这个音频缓冲区和一个指向它的通道数据的指针......就像这样

var buffer: AVAudioPCMBuffer  
var bufPtrs = [UnsafeMutablePointer<Float>]()  
for index in 0..<outputChannelCount {  
     let channelPtr = buffer.floatChannelData?[index]  
      bufPtrs.append(channelPtr!)  
} 

现在我需要将此指针交给一个 C 库函数,该函数会进行一些重采样。

这个函数需要一个指向 UInt8 元素数组的 UInt8 指针,像这样......

func swr_convert(_ s: OpaquePointer!,
 _ out: UnsafeMutablePointer<UnsafeMutablePointer<UInt8>?>!,
 _ out_count: Int32,
 _ in: UnsafeMutablePointer<UnsafePointer<UInt8>?>!,
 _ in_count: Int32) -> Int32

在 Swift 3 之前,我刚刚成功使用了这段代码。

numSamplesDecoded = swr_convert(audioPlayer.swrContext!,  
                        UnsafeMutablePointer(bufPtrs),  
                        frame.memory.nb_samples,  
                        UnsafeMutablePointer(frame.memory.extended_data),  
                        frame.memory.nb_samples)

但这在 Swift 3 中不起作用。

如何在 Swift 3 中引用这块内存以便 C 库函数接受它?

我真的不明白 Swift 3 文档中的解释。

请帮助/约根

4

0 回答 0