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

Я настроил это, и у меня никогда не было ненулевых сэмплов, даже если я воспроизводил видео или какой-либо другой источник звука. Я забыл что-то подключить? Это вообще возможно?


person ZECTBynmo    schedule 15.03.2014    source источник


Ответы (2)


Нет, вы не можете получить доступ ко «всем исходящим аудио» на странице (например, Flash-видео) с помощью Web Audio API.

Если на странице есть HTML-тег видео или аудио, вы можете использовать AudioContext#createMediaElementSource, предполагая, что src медиа-элемента происходит из того же источника, что и страница (или если медиа-ресурс обслуживался с заголовками CORS).

person Kevin Ennis    schedule 15.03.2014
comment
Есть ли какой-то другой API, который я мог бы использовать? - person ZECTBynmo; 16.03.2014
comment
Неа. По крайней мере, мне ничего не известно. - person Kevin Ennis; 16.03.2014

Вы, безусловно, можете получить все элементы и на странице и передать их в веб-аудио, например (основываясь на вашем примере):

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. Однако это работает только в том случае, если аудио- и видеоэлементы действительно находятся в доме.

person padenot    schedule 17.03.2014