是否可以使用WebAudio来处理所有传出的浏览器音频?



我试图通过向页面注入一些JavaScript来构建一些代码来处理在其他页面中发现的音频。我的印象是我可以创建一个AudioContext然后创建一个onaudioprocess函数,它会被所有传出的音频调用。

var AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();
var proc = context.createScriptProcessor(16384, 0, 2);
proc.onaudioprocess = function (event) {
    var buffer= event.outputBuffer.getChannelData(0);
    for( var iSample in buffer )
        if( buffer[iSample] > 0.0 )
            alert( "SDRFSDF" );
};
proc.connect(context.destination);

我设置了这个,我从来没有得到任何非零样本,即使我正在播放视频或其他一些音频源。我忘了接什么东西吗?这可能吗?

不行,你不能使用Web audio API访问页面中的"所有输出音频"(例如Flash视频)。

如果页面上有一个HTML视频或音频标签,您可以使用AudioContext#createMediaElementSource,假设媒体元素的src来自与页面相同的起源(或者如果媒体资产使用CORS标头)

您当然可以获取页面的所有和元素,并将其管道到Web Audio,就像这样(基于您的示例):

var av = document.querySelectorAll('audio, video');
// for each source, connect it to the script processor node
for (var i = 0; i < av.length; i++) {
    context.createMediaElementSource(av[i]).connect(proc);
}`

这将只工作,如果来源是相同的来源,但是,或者如果服务器回答CORS头。但是,这只适用于音频和视频元素实际上在dom中的情况。

最新更新