如何生成波形 table 以实现更快的实时音频合成

How to generate a waveform table for quicker realtime audio synthesis

几个月前我为 iOS 设备开发了一个应用程序,可以生成实时谐波丰富的无人机。它在较新的设备上运行良好,但在较慢的设备上 运行 进入缓冲区不足。我需要优化这个东西,需要一些精神上的帮助。这是我目前正在做的事情的超级基本概述:

再一次,它工作得很好,直到它不工作。我想优化这个东西,所以我不使用实时计算的正弦波的粗暴加法合成。如果我将谐波数 ("banks") 限制为 2,它将适用于旧设备。不酷。在较新的设备上,它低于大约 50 个谐波。还不错。但是如果我想同时播放多个无人机来创建一些和弦,那处理能力就太大了....所以...

还有我的大算法问题(非常非数学):

也许我把事情复杂化了......对多个添加的正弦进行快速、处理器友好的实时合成的标准方法是什么?

在此期间我会继续四处寻找。

谢谢!

我在服务器端用 golang 编写了这样一个野兽......对于初学者来说是使用单精度浮点

为了解决 table 人口问题,我会通过合成方波来确保您的实施是可靠的。可视化每个 运行 的输出,因为你给它每个额外的频率(及其相应的振幅和相移参数)......根据定义,只要你正确使用足够的周期来覆盖,一个周期就足够了一个样本的时间段

重要的是要利用以下知识:从输入的一组正弦波(每个都有频率、振幅、相移)生成输出曲线有助于进行反向操作……即对该输出曲线执行 FFT让 api 为您提供基础正弦波的版本(同样每个都有频率、振幅和相位)...这将确认您的系统是准确的

您正在实施的过程的名称是:逆傅里叶变换并且有用于此的库但是我也更喜欢滚动我的拥有

您(或者您可以,不是 iOS 人)增加缓冲区大小吗?可能会给你足够的开销,你不需要这个。否则 yes wave-table synthesis 是一个可行的方法。仅当参数发生变化时,您才能根据所有谐波的总和计算出新的波表。