将 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))
我目前正在尝试将音频样本从 AVAudioPCMBuffer
转换为 NSData
- 我已经查看了关于此 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))