Можно ли использовать 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.

Другие вопросы по тегам