Estoy haciendo una aplicación de música con js y jquery.
Un usuario puede agregar múltiples archivos de audio desde la máquina local.
Quiero aplicar un filtro de ecualizador. Así que he usado AudioContext. Algo como esto:
mediaElement = document.querySelector("#audioFiles_" + nameCounters); sourceNode = audioContext.createMediaElementSource(mediaElement); // Set filters [60, 170, 350, 1000, 3500, 10000].forEach(function (freq, i) { var eq = audioContext.createBiquadFilter(); eq.frequency.value = freq; eq.type = "peaking"; eq.gain.value = 0; filters.push(eq); }); // Connect filters in serie sourceNode.connect(filters[0]); for (var i = 0; i < filters.length - 1; i++) { filters[i].connect(filters[i + 1]); } // Master volume is a gain node masterGain = audioContext.createGain(); masterGain.value = 1; //connect the last filter to the speakers filters[filters.length - 1].connect(masterGain); // for stereo balancing, split the signal stereoPanner = audioContext.createStereoPanner(); // connect master volume output to the panner masterGain.connect(stereoPanner); // Connect the stereo panner to analyser and analyser to destination stereoPanner.connect(audioContext.destination);Este código se ejecuta para cada archivo que se agrega.
Todo funciona bien si solo hay UN archivo de audio.
Si agrego varios archivos de audio, el filtro se aplica varias veces en cada archivo subsiguiente. Para cuando se agrega el archivo 10, el audio está completamente distorsionado.
enlace a la demostración: https://mellowmonks.in/demos/mixtape/10/
He revisado muchos códigos de ejemplo en Internet, sin embargo, todos cubren el trabajo con un solo archivo de audio.
Este es el código que he usado como referencia: https://codepen.io/chi-hin-leung/pen/RwppEKG