再次将 AudioBufferList 与 Swift 一起使用

Using AudioBufferList with Swift once again

参考Using AudioBufferList with Swift

我在 Stack Overflow 上找到了以下解决方案,用于使用音频单元播放一些声音。我的问题是我无法像正弦波数据那样将实际数据放入缓冲区。我用 memcpy 而不是 memset 尝试过,但是这个 UnsafePointer 的东西非常累人。

那么有人会阐明我如何将实际数据放入我的缓冲区,还是我应该拿一本 Objective-C 书然后重新做一遍?

func renderCallback(ioData: UnsafeMutablePointer<AudioBufferList>) -> OSStatus 
{
    let abl = UnsafeMutableAudioBufferListPointer(ioData)
    for buffer in abl {
        memset(buffer.mData, 0, Int(buffer.mDataByteSize))
    }
    return noErr
}

您可以在 "for" 循环中逐个元素地将数据复制到字节或 Int16 数组中。 Swift 与 memset 相比,可能会相当好地优化此循环,这样处理器数据缓存效应最终会主导性能。