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

时间:2014-03-15 17:24:53

标签: javascript audio web-audio

我试图通过在页面中注入一些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);

我设置了这个,即使我正在播放视频或其他音频源,我也从未获得任何非零样本。我忘了把事情搞砸了吗?这甚至可能吗?

2 个答案:

答案 0 :(得分:1)

不,您无法访问"所有传出的音频"在使用Web Audio API的页面(例如Flash视频)中。

如果页面上有HTML视频或音频标记,则可以使用AudioContext#createMediaElementSource,假设媒体元素的src来自与页面相同的来源(或如果媒体资产是使用CORS标头提供的。)

答案 1 :(得分:1)

您当然可以获取页面的所有元素,并将其传递给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中的情况。