ミュージシャン向けの共同オーディオ録音プラットフォーム (GitHub と結合したクラウド DAW のようなもの) を開発しています。簡単に言うと、セッション (曲) は一連のオーディオ トラックで構成され、AAC でエンコードされ、HTML5<audio>
要素を介して再生されます。各トラックは、MediaElementAudioSourceNode を介して Web Audio API に接続され、目的地まで一連のノード (現時点ではゲインとパン) を介してルーティングされます。ここまでは順調ですね。
それらを同期、一時停止、停止、シークでまったく問題なく再生でき、一般的な DAW の通常のミュート、ソロ機能、および波形の視覚化とナビゲーションを正常に実装できました。これが再生部分です。
記録部分については、getUserMedia() からの出力を MediaStreamAudioSourceNode に接続し、Web ワーカーを使用して、記録されたバッファーを配列に書き込む ScriptProcessorNode にルーティングします。記録プロセスが終了すると、記録されたバッファは PCM の wave ファイルに書き込まれ、サーバーにアップロードされますが、同時に<audio>
要素に接続されてすぐに再生されます (そうしないと、wav ファイルが再生されるまで待たなければなりません)。利用できるようにサーバーにアップロードされます)。
ここで問題があります。録音したトラックを最初から再生すると、前のトラックと完全に同期して再生できますが、シークがうまくいきません。新しく録音したトラックの currentTime プロパティを変更すると、乱雑になり、ひどく同期が取れなくなります。繰り返しますが、これは「ローカル」トラックが追加された場合にのみ発生します。位置を変更すると、他のトラックは問題なく動作するからです。
誰がこれを引き起こしているのか考えていますか? 他に提供できる有用な情報はありますか?
前もって感謝します。