我试图通过在页面中注入一些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);
我设置了这个,即使我正在播放视频或其他音频源,我也从未获得任何非零样本。我忘了把事情搞砸了吗?这甚至可能吗?
答案 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中的情况。