Cocoa で、さまざまなズーム オプションを備えたオーディオ波形エディターを作成しています。幅を最大にすると、曲全体の波形が表示されます (最大 1,000 万サンプルが表示されます)。最も狭い範囲では、音波のピクセル精度の表現が表示されます (1 ビューで最大 1,000 サンプル)。これらのズーム レベル間をスムーズに移行できるようにしたいと考えています。Ableton Live などの一部の商用エディターは、非常に安価な方法でこれを行っているようです。
私の現在の実装は、希望するズーム範囲を満たしていますが、非効率的で途切れ途切れです。このデザインは、クォーツを使用した波形の描画に関する次の優れた記事に大きく影響を受けています。
http://supermegaultragroovy.com/blog/2009/10/06/drawing-waveforms/
さまざまな削減レベルでオーディオ ファイル用に複数の CGMutablePathRef を作成します。完全にズームアウトすると、x 千サンプルごとに 1 つのポイントに縮小されたパスを使用します。完全にズームインすると、すべてのサンプルのポイントを含むそのパスを使用します。削減レベルの間にいるときは、パスを水平方向にスケーリングします。これにより機能しますが、それでもかなりコストがかかり、削減レベル間を移行するときにアーティファクトが表示されます。
これをより安価にする方法についての 1 つの考えは、アンチエイリアシングを取り除くことです。私のエディタの波形はアンチエイリアスされていますが、Ableton の波形はそうではありません (以下の比較を参照)。
CGMutablePathRef のアンチエイリアシングをオフにする方法がわかりません。Cocoa の世界で CGMutablePathRef に代わるアンチエイリアスのない代替手段はありますか? そうでない場合、巨大な線をより効率的に描画するためのコースに私を設定する可能性のある OpenGL クラスまたはサンプル コードを知っている人はいますか?
2014 年 1 月 21 日更新:まさに私が探していた機能を備えた優れたライブラリがあります: https://github.com/syedhali/EZAudio