Можно ли использовать 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);
Я настроил это, и я никогда не получаю никаких ненулевых сэмплов, даже если я играю видео или другой источник звука. Я забыл что-нибудь подключить? Это вообще возможно?
2 ответа
Нет, вы не можете получить доступ ко "всему исходящему аудио" на странице (например, к Flash-видео) с помощью API Web Audio.
Если на странице есть 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.