3

コードで生成されたさまざまなサウンドを再生するアプリがあります。これらのサウンドをAudioBufferSourceNode に配置します。 サウンドを再生する出力デバイスをユーザーが選択できるようにするため、MediaStreamAudioDestinationNodeとそのストリームを Audio Element のソースとして使用します。このようにして、ユーザーがサウンドを再生するオーディオ出力を選択すると、Audio 要素の Sink Id を要求されたオーディオ出力に設定します。

だから私は AudioBufferSourceNode -> いくつかのオーディオ グラフ (ゲイン ノードなど) -> MediaStreamAudioDestinationNode -> オーディオ要素を持っています。

最初のサウンドを再生すると、問題なく聞こえます。しかし、新しいソースを作成して同じ MediaStreamAudioDestinationNode に接続すると、サウンドが間違ったピッチで再生されます。

問題を示すFiddleを作成しました。

これはバグですか、それとも何か間違っていますか?

4

1 に答える 1

-1

.connect()および.disconnect()を使用してグラフ レイアウトを動的に変更することができます。これは、オーディオが再生中またはストリームを介して送信されている場合でも (WebRTC を介してストリーミングすることもできます)。specで参照を見つけることができなかったので、これは当然のことだと確信しています。

たとえば、2 つの AudioBufferSourceNodesbufferSource1bufferSource2、および MediaStreamAudioDestinationNodeがある場合streamDestination:

bufferSource1.connect(streamDestination);

//do some other things here, and after some time, switch to bufferSource2:

//(streamDestination doesn't need to be explicitly specified here)
bufferSource1.disconnect(streamDestination); 
bufferSource2.connect(streamDestination);

実際の例


編集1:

適切な実装:

Editors Draft on the Audio Output APIによると、AudioContext 用のカスタム オーディオ出力デバイスも ( を使用して) 選択できるようになる予定new AudioContext({ sinkId: requestedSinkId });です。進行状況に関する情報を見つけることができず、質問者がすでに読んでいるように見える関連する議論さえ見つけました。これと(多くの)他の参考文献によると、簡単な作業ではないようですが、WA V1 で計画されています。

編集:そのセクションは API ドラフトから削除されましたが、古いバージョン でまだ見つけることができます。

現在の回避策:

私はあなたの回避策を(MediaStreamAudioDestinationNodeandAudioオブジェクトを使用して)いじりましたが、何も接続されていないことに関連しているようです。単一のバッファーを切り替えるように例を変更し (例に似ていますが、 を使用AudioBufferSourceNode)、同様の頻度の低下を観察しました。ただし、GainNodein between を使用して または に設定するとgain.value0周波数の低下がなくなりました (新しい を動的1に作成して接続する場合、これは解決策にはなりません)。AudioBuffer

于 2016-08-18T09:45:46.010 に答える