将 AVAudioPCMBuffer 转换为 NSData

Converting AVAudioPCMBuffer to NSData

我目前正在尝试将音频样本从 AVAudioPCMBuffer 转换为 NSData - 我已经查看了关于此 and this code 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 值...感谢任何帮助!

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

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