将AVAudioPCMBuffer转换为NSData

时间:2018-04-05 16:21:16

标签: ios swift avfoundation nsdata avaudiopcmbuffer

我目前正在尝试将音频样本从AVAudioPCMBuffer转换为NSData - 我已经查看了此SO Postcode from GitHub上接受的答案}但似乎有些AVFAudio API已更改...以下是AVAudioPCMBuffer的扩展程序:

private extension AVAudioPCMBuffer {

    func toNSData() -> NSData {
        let channels = UnsafeBufferPointer(start: int16ChannelData, count: 1)
        let ch0Data = NSData(bytes: channels[0], length:Int(frameCapacity * format.streamDescription.inTotalBitsPerChannel))

        return ch0Data
    }

}

我看到了Value of type 'UnsafePointer<AudioStreamBasicDescription>' has no member 'inTotalBitsPerChannel'的错误。到目前为止,我还没有找到任何其他方法来查找inTotalBitsPerChannel值...任何帮助表示感谢!

1 个答案:

答案 0 :(得分:0)

我没有在您链接到的任何代码示例中看到任何名为inTotalBitsPerChannel的方法;相反,他们似乎都使用mBytesPerFrame。您还需要.pointee取消引用指针。最后,在现代Swift中,您通常应该使用Data而不是NSData。因此,基本上,如果您将最后一行重写为:

,我认为您的扩展名应该有用
let ch0Data = Data(bytes: channels[0], count: Int(frameCapacity * format.streamDescription.pointee.mBytesPerFrame))