2012-01-20 4 views
1

Accelerateフレームワークでサイントーンジェネレータを作成したいとします。私は、私の発電機にアタック/リリース設定(すなわち、振幅エンベロープ)を持たせたいと思います。vecLib/vDSPを使用してエンベロープ付きのサイントーンジェネレータを作成する

私は正弦値でいっぱいのベクトルを作成する方法を理解しています。私が知らないのは、ベクトルデータに振幅エンベロープを適用する方法です。

私は、vDSP_vgenを使って傾斜ベクトルを作成して、線形のボリュームエンベロープベクトルを作成し、サインベクトルをエンベロープベクトルで掛けることができることは知っています。しかし、私は多くのデータ点を扱っており、振幅エンベロープを格納するための中間ベクトルを作成することは、私の環境ではかなり無駄なメモリなので、無駄に思えます。

Accelerateフレームワークで振幅エンベロープを使用する最も良い方法は何ですか?

注:私はベクトルプログラミングの初心者ですので、私と一緒に裸をしてください。

答えて

0

ベクトルを作成または操作するためにベクトル関数のみを使用する必要はありません。ベクトル関数は、存在し、より高速な場合に便利です。私は、各ベクトル要素のエンベロープ()* sinf()への呼び出しを使用して、エンベロープを使ってサインを作成しないようにベクトル演算のシーケンスをベンチマークし、iOSテストデバイスでどちらが高速かを確認します。

長い中間ベクトルを保持し、それらを再利用するための十分なメモリがある場合(エンベロープの再利用など)、後続の繰り返しに対してパフォーマンスが向上する可能性があります。これは典型的なメモリ使用対パフォーマンスYtrade-offです。

0

音楽アプリケーションでは、リニアアンプエンベロープはあまり一般的ではありません。

非線形ランプのために、あなたの主なオプションは次のとおりです。

  1. 封筒の長さである、ことによって増殖するバッファを作成 - その後、VDSPの乗算を使用しています。
  2. ただちに生成するエンベロープ値を乗算するだけです。
関連する問題