【发布时间】:2013-11-29 14:24:04
【问题描述】:
我想知道是否有办法使用 JavaScript 平移视频的音频。
与调节音量的方法相同,我需要从左到右或从右到左平移立体声音频。
此功能对于多语言活动非常有用,您可以使用立体声制作两种语言的视频,例如,将英语音频平移到左侧,将德语翻译平移到右侧。然后播放器可以根据用户的选择将立体声轨道转换为单声道静音其中一种语言。
我已经在 Flash 中使用 SoundTransform 类 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/SoundTransform.html#pan 实现了这个功能。
我猜 SoundTransform html-equivalent 是 AudioContext http://www.w3.org/TR/webaudio/#AudioContext-section。
我可以访问正在播放的视频的音频上下文吗?
更新:经过深入研究,我找到了解决方案。 这是我用来开发videojs插件videjs-stereopanner的一些javascript代码:
//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 实现整个音频 API。
【问题讨论】:
标签: javascript html audio html5-video media-player