使用vecLib / vDSP创建带有信封的正弦音发生器

时间:2012-01-20 14:36:24

标签: ios audio accelerate-framework vdsp

我想用Accelerate框架创建一个正弦音生成器。我希望我的发生器具有攻击/释放设置(即振幅包络)。

我理解如何创建一个充满正弦值的向量。我不知道的是如何将幅度包络应用于我的矢量数据。

我知道我可以使用vDSP_vgen创建一个渐变矢量来创建一个线性体积包络矢量,并将我的正弦矢量乘以我的包络矢量。这看起来很浪费,因为我正在处理许多数据点并且创建一个中间向量来存储振幅包络在我的环境中非常浪费内存。

使用Accelerate框架处理振幅包络的最佳方法是什么?

注意:我是矢量编程的新手,所以请光临我。

2 个答案:

答案 0 :(得分:0)

您不必仅使用向量函数来创建或操作向量。如果矢量函数存在且速度更快,则它们很有用。我会对矢量操作的序列进行基准测试,以防止使用信封创建正弦,并使用每个矢量元素调用信封()* sinf(),并查看iOS测试设备上哪个更快。

如果你有足够的内存来保留长中间向量并重用它们(例如重用包络),这可能会为后续迭代提供性能提升。这是典型的内存使用与性能Ytrade-off。

答案 1 :(得分:0)

对于音乐应用,线性放大器包络不是很常见/有用。

对于非线性斜坡,您的主要选项是:

  1. 创建一个缓冲区来乘以,即信封的长度 - 然后使用vdsp的乘法。
  2. 只需乘以您即时生成的信封值。