Mac/iPhoneで音楽アプリを作りたいとき、音響合成を行う時にvDSPを使うと高いパフォーマンスを出す事ができます。使い方は簡単ですがウェブ上に情報が少ないので、後で調べる方と自分のためにここに記事として情報を残しておきます。
vDSPってなに?
vDSPはOS X、iPhoneなどに搭載されている信号処理用のライブラリvecLibの中の、DSP(信号処理)用の機能がまとめられたものです。元々はPowerPC G4時代にAltiVecというベクトル演算機構を有効活用するために用意されていたライブラリですが、その後Intel Macでも使えるようになり、今はiPhone / iPadでも使えます。
なにがいいの?
1. 速い。アセンブラも書かなくてよい。
音響合成処理は計算量が多いので、効率化のためにアセンブラを書く事が多いですが、vDSPを使えばアセンブラを書かなくてもCPUを効率的に使えるようになります。アセンブラを書く場合にくらべて、ソースコードの可読性とメンテナンス性も高いです。
2. 自分でアルゴリズムを実装しなくても高速フーリエ変換が使える。
高速フーリエ変換のように実装の難易度が高いけど使用頻度の高い機能が用意されています。
3. OSに最初からついている。
DSP用のライブラリとして有名はFFTWはGPLライセンスのため、使用したプログラムを配布したい時などに色々問題がでてきますが、vDSPはOS X/iOSに最初から搭載されているのでこの問題と無縁になります。また、インストール/設定の手間がないのもメリットです。
どれくらいはやいの?
肝心な速度ですが、例えば単純な信号(floatの配列)の加算であれば、普通に要素をforループで加算するコードを書いた場合とvDSPのメソッドを使った場合で計測すると処理にかかる時間は1/2以下になります。
デバイス | 通常のコード | vDSP |
---|---|---|
MacBook (Core2Duo 2.4G) | 0.51 sec. | 0.25 sec. |
iPhone 3GS | 5.73 sec. | 1.78 sec. |
iPod touch 4 Gen. | 4.10 sec. | 1.30 sec. |
通常のコード
for (int i=0; i<8; i++) { outVector[i] = inVector1[i] + inVector2[i]; }
vDSPを使ったコード
vDSP_vadd(inVector1, 1, inVector2, 1, outVector, 1, 8);
使い方
少し長くなってしまったので、使い方等はまた次の記事にて書きます。
iPhoneで楽器アプリを作るときに抑えておきたいvDSPの概要 | なんてこったいブログ http://t.co/Iytwu3Ly #tech
iPhoneで楽器アプリを作るときに抑えておきたいvDSPの概要 http://t.co/v2Ggg9OX @croquette0212さんから
iPhoneで楽器アプリを作るときに抑えておきたいvDSPの概要 | なんてこったいブログ http://t.co/batPupjqkL