再次将 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 相比,可能会相当好地优化此循环,这样处理器数据缓存效应最终会主导性能。
参考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 相比,可能会相当好地优化此循环,这样处理器数据缓存效应最终会主导性能。