2016-12-08 13 views
0

私はshowing the wave image of the audio fileになるオーディオを再生するツールを構築しています。
オーディオ画像は、次のようになります。キャンバスとSVGのオーディオウェーブイメージの相互作用

enter image description here

UIは未演奏エリアとして別の色で再生エリアを示し、また、特定の領域にズームすることができます。

私は、キャンバスでこれを行うと音声での位置に応じてleft位置を変え、演奏/未再生エリアを表示するには上の層として不透明度div要素を追加することができます。代わりに、再生された/再生されていない領域で異なる色を表示するために、位置の更新が発生するたびに再レンダリングすることがあります。

キャンバスでのズームの可能性も再レンダリングされます。

私はまた、SVGでこれを行うことができ、この場合、ズームはおそらくeasyerだろう、と演奏エリアを示すことは、特定のpathまたはlinestroke色の変化だろう。

私の質問:

が、これは「両方のオプションが有効である」シナリオです、または私は他の上tecnologiesの使用する必要があり、その理由は?

+0

ストロークカラーの変更をsvgで使用できるかどうかはわかりませんが、ストロークカラーを混在させることはできません。しかし、キャンバスの提案と同じことを行うことができ、不透明度のオーバーレイがあります。個人的に私は書くことを得て、可能な限りライブラリの無関係なコードを作るので、他のソリューションと交換して、コードをあまりリファクタリングする必要はありません。あなたが波とうまくやりとりする必要があるなら、私はキャンバス上でsvgを使うでしょうが、それが必要なようには聞こえませんのでどちらかが大丈夫だと思います。 – Ian

答えて

1

この場合、キャンバスを使用することをお勧めします。 SVGがキャンバス上に提供しなければならないものすべてDOM、ヒット検出、アニメーション、フィルタなどは使用されませんが、あなたのアプリケーションのパフォーマンスに悪影響を与えます。

+0

こんにちは、これをチェックしていただきありがとうございます。私は、再生された&再生されていない領域とズーム可能性をアニメーション化することに言及した。これらの機能では、「キャンバス」がSVGよりも優れていると思います。 – Rikard

+0

@Rikard私はこの答えに同意します。 SVGは非常に単純なレンダリングジョブであるべきものを複雑にするでしょう。しかし、これはプログラマーとしてのあなたのスキルと、SVGまたはCanvas APIのどれがどれくらい知っているかによって異なります。これは特に、デコードされたサウンドストリームのような大きなデータセットを扱うときには多くのトラップが存在するためです。 44kHzでの5分間のステレオトラックは、サンプル数に加えて2600万であり、リアルタイムでズームしてパンするのは簡単ではありません。それはあなたが集中しているべき場所です、何がapiがレンダリングをするかではありません。 – Blindman67

+0

@ Blindman67素晴らしいフィードバックありがとうございます。はい、私はそれらのトラップを知っている、ズームツールは、ズームのすべてのステップと呼ばれるズームロジックを避けるために、おそらくデバウンサーやスロットルが必要になります。私が経験していないところでは、すべてのズームや再生のステップでキャンバスを生成する 'loop'が、SVGパス(例えば、波形)よりも速く/全体的に速く、SVGで拡大/縮小する場合です。 – Rikard

関連する問題