2012-01-20 22 views
1

我想用Accelerate框架創建一個正弦發音器。我希望我的發生器具有攻擊/釋放設置(即幅度包絡)。使用vecLib/vDSP創建一個帶有信封的正弦發音器

我明白如何創建一個完整的正弦值向量。我不知道的是如何將幅度包絡應用於我的矢量數據。

我知道我可以使用vDSP_vgen創建一個斜坡矢量來創建一個線性音量包絡矢量,並將我的正弦矢量乘以我的包絡矢量。然而,這看起來很浪費,因爲我處理很多數據點並創建一箇中間矢量來存儲幅度包絡對我的環境來說是相當浪費的內存。

使用Accelerate框架處理幅度包絡的最佳方式是什麼?

注:我是新來的矢量編程,所以請裸露在我身邊。

回答

0

您不必僅使用矢量函數來創建或操作矢量。如果矢量函數存在並且速度更快,則它們很有用。我將使用對每個向量元素調用信封()* sinf()的函數來對矢量操作的序列進行基準測試,以創建包含信封的正弦信號,並查看iOS測試設備上哪些信號更快。

如果您有足夠的內存來保存長中間向量並重用它們(例如重用封套),這可能會提高性能,從而提高後續迭代的性能。這是典型的內存使用與性能Ytrade-off。

0

對於音樂應用來說,線性功放信封不是很常見/有用。

用於非線性斜坡,您的主要選項是:

  1. 創建緩衝區的倍增,這是信封的長度 - 然後使用VDSP的乘法。
  2. 只是乘以您在飛行中生成的包絡值。
相關問題