如何在 Objective-C 中将 AVAudioPCMBuffer 转换为 NSData?

Lor*_*ari 3 iphone objective-c avfoundation ios avaudioengine

正如标题所示。

Swift 中有一个旧的解决方案here。但我很难转换到 Objective-C。似乎没有 Objective-C 的等价物UnsafeBufferPointer

Rhy*_*man 5

Objective-C 语言中内置了不安全的指针,因此转换就变成了:

- (NSData *)bufferToNSData:(AVAudioPCMBuffer *)buffer {
    return [[NSData alloc] initWithBytes:buffer.floatChannelData[0] length:buffer.frameLength * 4];
}
Run Code Online (Sandbox Code Playgroud)

注意,这假设缓冲区中存在单声道 32 位浮点数据。需要做更多的工作才能将所有支持的AVAudioPCMBuffer格式序列化为NSData.