У меня есть простой звуковой анализатор для моего сайта: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
? Если да, то как мне это сделать?
Я только что столкнулся с этой проблемой, но я не понимаю, что вы подразумеваете под «Вместо того, чтобы использовать элемент