AudioContext панорамирование аудио воспроизведения медиа

Интересно, есть ли способ панорамировать аудио видео с помощью JavaScript.

Так же, как вы можете регулировать громкость, мне нужно панорамировать стереозвук слева направо или справа налево.

Эта функция будет полезна для многоязычных мероприятий, где вы можете создать видео на двух языках, используя стерео, например, панорамирование аудио на английском языке слева и перевод на немецком языке справа. Затем проигрыватель может преобразовать стерео-трек в монофонический звук на одном из языков в зависимости от выбора пользователя.

Я уже реализовал эту функцию во Flash, используя класс SoundTransformhttp://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/SoundTransform.html#pan.

Я думаю, что SoundTransform HTML-эквивалент является AudioContexthttp://www.w3.org/TR/webaudio/#AudioContext-section.

Могу ли я получить доступ к звуковому контексту воспроизводимого видео?

ОБНОВИТЬПосле некоторых интенсивных исследований я нашел решение. Вот код JavaScript, который я использовал для разработки плагина videojs 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);
}

Это работает для меня только в Chrome. Если я пытаюсь выполнить этот скрипт на iPad / Safari, я получаю раздражающий звук, который почти оглушил меня. Я'жду пока Safari реализует весь Audio API.

Ответы на вопрос(2)

Ваш ответ на вопрос