CARingBuffer替代Swift

Vla*_*lad 7 core-audio ios swift

对于使用以下API的音频应用程序中的C++类CARingBuffer,可能有什么好的Swift替换:

CARingBuffer *mBuffer = new CARingBuffer()
mBuffer->Allocate(...)
mBuffer->Store(...)
mBuffer->Fetch(...)
mBuffer->GetTimeBounds(...)
Run Code Online (Sandbox Code Playgroud)

谢谢!

更新:对纯Swift实现感兴趣(没有C/C++桥接).

UDPATE 2:迅速执行允许使用低级别的C API,诸如memcpy,OSAtomicCompareAndSwapLongBarrier

更新3:让我们假设处理的链接器问题Whole Module Optimization是临时的,并将在较新版本的swift工具链中解决.

更新4:在Swift中实现CARingBuffer并运行性能测试(C++和Swift)后,我得到了一些数字:

2 000 000个周期(2个通道,44100 Hz,每帧512个样本,缓冲容量4096帧)

  • C++:0.48s
  • 斯威夫特:0.58秒(慢1.208)

20 000 000个周期

  • C++:4.8s
  • 斯威夫特:6.3s(慢1.313)

2亿次循环

  • C++:47.43s
  • 斯威夫特:58.13秒(慢1.226)