Pude agregar filtros a una transmisión de audio existente usando el biquadfilter, pero estaba interesado en intentar usar Tone.js en su lugar. Pero tengo problemas para conectar todo junto. Sigo recibiendo una DomException cuando intento conectar el filtro a un audioContext.
function addFilter(fq) { var audioCtx = new (window.AudioContext || window.webkitAudioContext); var mediaElem = document.getElementById('myAudioElement'); //Tone.context = audioCtx; Tone.context.createMediaElementSource(mediaElem) const bqfilter = new Tone.Filter(fq, 'lowpass').toDestination(); Tone.connect(bqfilter, audioCtx.destination); //bqfilter.chain(audioCtx.destination) });El mensaje de error es simplemente DomException cuando intento conectar o encadenar el filtro al audioCtx.destination. Esto parece seguir la mayoría de los otros ejemplos que he encontrado en línea, por lo que no estoy seguro de por qué esto genera una excepción.
* editar: incluido el stacktrace de la consola de desarrollo
Uncaught DOMException Tone.js:formatted:2181 connect @ Tone.js:formatted:2181 To @ Tone.js:formatted:8710 (anonymous) @ audiocontrols:983 dispatch @ jquery.min.js:2 v.handle @ jquery.min.js:2No necesita crear su propio AudioContext . Puedes usar el de Tone.js. De hecho, eso es incluso necesario. De lo contrario, su propio AudioNode no se puede conectar al creado por Tone.js.
Lo siguiente debería funcionar:
function addFilter(fq) { const audioElement = document.getElementById('myAudioElement'); const mediaElementSource = Tone.context.createMediaElementSource(audioElement); const filter = new Tone.Filter(fq, 'lowpass').toDestination(); Tone.connect(mediaElementSource, filter); }); Tenga en cuenta que AudioContext puede estar bloqueado por la política de reproducción automática del navegador, como se describe aquí: https://github.com/Tonejs/Tone.js#starting-audio .