2016-02-09 1 views
2

У меня есть простой звуковой анализатор для моего сайта:Chrome - createMediaElementSource не работает

var analyser = document.getElementById('analyzer'); 
var beat = document.getElementById('track_meta') 
var canvas, ctx, source, context, analyser, fbc_array, bars, bar_x, 
bar_width, bar_height; 

function playAnalyzer() { 
    context = new AudioContext(); 
    analyser = context.createAnalyser(); 
    canvas = document.getElementById('analyzer'); 
    ctx = canvas.getContext('2d'); 
    source = context.createMediaElementSource(playerE); 
    source.connect(analyser); 
    analyser.connect(context.destination); 
    frameLooper(); 
} 

function frameLooper() { 
    canvas.width = canwidth; 
    canvas.height = canheight; 
    ctx.imageSmoothingEnabled = false; 
    window.requestAnimationFrame(frameLooper); 
    fbc_array = new Uint8Array(analyser.frequencyBinCount); 
    analyser.getByteFrequencyData(fbc_array); 
    ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas 
    ctx.fillStyle = "white"; // Color of the bars 
    function valBetween(v, min, max) { 
    return (Math.min(max, Math.max(min, v))); 
    } 
    var beatc = fbc_array[2]/4; 
    var beatround = Math.round(beatc); 
    //if (beatround < 10) { 
    // ctx.globalAlpha = '0.1125'; 
    //} 
    //else { 
    // ctx.globalAlpha = '0.' + beatround; 
    //} 
    bars = canbars; 
    for (var i = 0; i < bars; i += canmultiplier) { 
     bar_x = i * canspace; 
     bar_width = 2; 
     bar_height = -3 - (fbc_array[i]/2); 
     ctx.fillRect(bar_x, canvas.height, bar_width, bar_height); 
    } 
} 

Моя проблема заключается в том, что это не работает, если я не нахожусь в режиме инкогнито на хроме, в противном случае я получаю эту ошибку:

Uncaught InvalidStateError: Failed to execute 'createMediaElementSource' on 'AudioContext': HTMLMediaElement already connected previously to a different MediaElementSourceNode.

Я протестировал это в Edge, Firefox и Opera, и там он отлично работает. Я даже переустановил хром, чтобы убедиться, что проблема не будет решена. Я просто не понимаю, почему он отлично работает в режиме инкогнито, но не в противном случае.

Так что мой вопрос в том, можно ли вместо использования элемента <audio> подключить анализатор к var audio = new Audio? Если да, то как мне это сделать?

ответ

1

Так что для меня это сработало:

Вместо использования <audio> элемента, используйте HTMLMediaElement с помощью JavaScript. И тогда единственное, что вам нужно сделать, чтобы подключить анализатор к вашему var audio = new Audio(), просто ссылается на вашу переменную audio в переменной source = context.createMediaElementSource(audio);.

Это также фиксировало мои ошибки.

+0

Я только что столкнулся с этой проблемой, но я не понимаю, что вы подразумеваете под «Вместо того, чтобы использовать элемент

1

Возможно, у вас установлено расширение Chrome, которое вставляет аудиоконтексты и создает MediaElementSources? Попробуйте отключить свои расширения по одному.

+0

У меня есть плагин EQ, но я отключил все, и он все еще не работает. Однако я нашел решение своей проблемы и вскоре отправлю ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^