AudioContext przesuwanie dźwięku odtwarzanych mediów

Zastanawiam się, czy istnieje sposób na przesuwanie dźwięku wideo za pomocą JavaScript.

W ten sam sposób, w jaki można regulować głośność, muszę przesuwać dźwięk stereo w lewo do prawej lub od prawej do lewej.

Ta funkcja byłaby przydatna w przypadku wydarzeń wielojęzycznych, w których można utworzyć wideo w dwóch językach za pomocą stereo, na przykład pan english audio do lewego i niemieckiego do prawej. Następnie odtwarzacz może przekształcić ścieżkę stereo w mono muting jednego z języków w zależności od wyboru użytkownika.

Zaimplementowałem tę funkcję w pamięci flash przy użyciu klasy SoundTransformhttp://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/SoundTransform.html#pan.

Myślę, że odpowiednikiem html SoundTransform jest AudioContexthttp://www.w3.org/TR/webaudio/#AudioContext-section.

Czy mogę uzyskać dostęp do kontekstu audio odtwarzanego wideo?

AKTUALIZACJA: Po kilku intensywnych badaniach odkryłem rozwiązanie. Oto kod javascript, którego użyłem do stworzenia wtyczki videjs-stereopanner:

//Init AudioContext
var context = new AudioContext();
var gainL = context.createGainNode();
var gainR = context.createGainNode();
gainL.gain.value = 1;
gainR.gain.value = 1;
var merger = this.context.createChannelMerger(2);
var splitter = this.context.createChannelSplitter(2);

//Connect to source
var source = context.createMediaElementSource(node);
//Connect the source to the splitter
source.connect(splitter, 0, 0);
//Connect splitter' outputs to each Gain Nodes
splitter.connect(gainL, 0);
splitter.connect(gainR, 1);

//Connect Left and Right Nodes to the Merger Node inputs
//Assuming stereo as initial status
gainL.connect(merger, 0, 0);
gainR.connect(merger, 0, 1);

//Connect Merger output to context destination
merger.connect(context.destination, 0, 0);

//Disconnect left channel and connect right to both stereo outputs
var function = panToRight(){
    gainL.disconnect();
    gainR.connect(merger, 0, 1);
};

//Disconnect right channel and connect left to both stereo outputs
var function = panToLeft(){
    gainR.disconnect();
    gainL.connect(merger,0,0);
}

//Restore stereo
var function = panToStereo(){
    gainL.connect(merger, 0, 0);
    gainR.connect(merger, 0, 1);
}

To działa dla mnie tylko w Chrome. Jeśli spróbuję wykonać ten skrypt na iPadzie / Safari, otrzymuję denerwujący dźwięk, który prawie mnie ogłuszył. Czekam, aż Safari zaimplementuje całe API audio.

questionAnswers(2)

yourAnswerToTheQuestion