【发布时间】:2018-03-14 16:12:12
【问题描述】:
几个月前,我为 iOS 设备开发了一款应用,它可以生成实时谐波丰富的无人机。它在较新的设备上运行良好,但在较慢的设备上遇到缓冲区不足。我需要优化这个东西,需要一些精神上的帮助。这是我目前正在做的事情的超级基本概述:
- 创建一个包含 X 个谐波的“振荡器组”(简单地根据给定的基频计算。这里没什么特别的。)
- 在将样本输出到 iOS 音频缓冲区的 DAC 函数中,我调用了一个“GetNextSample()”函数,该函数通过正弦振荡器组,计算每个振荡器的样本并将它们相加。一些简单的加法合成。
- 享受无人机之美。
再次,它工作得很好,直到它没有。我想优化这个东西,所以我不使用实时计算正弦波的粗略加法合成。如果我将谐波(“银行”)的数量限制为 2,它将适用于较旧的设备。不酷。在较新的设备上,它低于大约 50 个谐波。还不错。但是如果我想同时演奏多个无人机来创建一些和弦,那处理能力就太大了......所以......
- 我应该生成波形表来循环而不是不断计算吗? (我认为是的......)
- 我应该将我对双精度浮点的使用转换为基于整数的计算吗? (我认为是的......)
还有我的大算法问题(非常非数学):
- 如果我使用波形表,如何准确确定波形/表应该多长?根据我开发此应用程序的经验,如果我只是走到一个周期的末尾 (2*PI) 并重新开始,将相位重置回 0,我会得到一个声音伪影,因为我正在强制偏移相位。换句话说,我不能保证一个时期会给我正确的结果...
也许我把事情复杂化了……快速、处理器友好的多个添加正弦的实时合成器的标准方法是什么?
在此期间,我会继续闲逛。
谢谢!
【问题讨论】:
标签: ios audio optimization signal-processing waveform