- オーディオ/プログラミング関連のスタック交換サイトはありますか?
- WinFormsで波形を作ろうとしています
- どのアルゴリズムを使用すればよいですか?
たとえば、ピクセル (垂直線) あたり 200 サンプルがある場合、200 サンプルのその部分から最低サンプルと最高サンプルを描画する必要がありますか? または、低いサンプルと高いサンプルの平均を引く必要がありますか? もしかして両方色違い?
たとえば、ピクセル (垂直線) あたり 200 サンプルがある場合、200 サンプルのその部分から最低サンプルと最高サンプルを描画する必要がありますか? または、低いサンプルと高いサンプルの平均を引く必要がありますか? もしかして両方色違い?
dsp.stackexchange.com を試す
ピクセルあたり 200 サンプルの場合、いくつかのアプローチを試すことができます。何をするにしても、各垂直線を 0 より上と下の両方に引くのが最も効果的です。正と負のサンプル値を別々に扱います。おそらく最も簡単なのは、RMS を計算することです。このような低解像度のピーク値では、おそらく波形の誤解を招く表現が得られます。
誰かがこれに遭遇した場合:
ピクセルあたりのサンプルをズーム レベルとして扱うことができます。より高いレベル (さらにズームアウト) では、パフォーマンス上の理由からサブサンプリングすることをお勧めします。
画面に収まる固定幅で描画し、仮想スクロールを使用することをお勧めします (したがって、数百万ピクセルの描画領域を持たない可能性があります)。
次のようにオーディオ データを反復処理することで、各ピクセルの値を計算できます: skip (scroll position * samples per pixel) + (pixel * samples per pixel) take samples per pixel. これにより、ビューを埋めるために最小限の量だけを読み取って描画するため、パフォーマンスの高い無限のズームとスクロールが可能になります。スクロール幅は、オーディオ データの長さ / ピクセルあたりのサンプル数で計算されます。
オーディオ サンプルは、通常、サンプル範囲のピーク値または rms 値の 2 つの方法のいずれかで表示されます。rms 値は、サンプル範囲内のすべての値の 2 乗を合計して計算され、合計をサンプル長で割り、平方根の場合は rms 値です (rms は平均よりも少し高く、知覚されるラウドネスの適切な尺度です)。
サブサンプリングを増やす (詳細が失われる)、スクロールを調整する、前のスクロールがレンダリングされる前に新しいスクロールが発生した場合にドロー リクエストをキャンセルできるようにするなど、複数の方法でパフォーマンスを向上させることができます。