EDITAR: Actualizar en otros intentos. La parte clave de la siguiente pregunta es la línea sampler.triggerRelease(["A1"], 'now') que no funciona. Otras cosas que he probado incluyen:
sampler.releaseAll(Tone.now())sampler.releaseAll()sampler.triggerRelease(["A1"], Tone.now())La parte relevante de los documentos de Tone.js está aquí .
Lo que no funcionará es sampler.dispose() , porque esencialmente desconecta el instrumento sampler de la salida. Pero necesito seguir usando el muestreador para volver a disparar la misma nota poco después de apagarlo.
Estoy tratando de presionar un botón para detener la reproducción de una nota 'Sampler' mientras se está reproduciendo actualmente. Pensé que activar la fase de lanzamiento haría esto (como en mi código a continuación), pero esto no parece tener ningún efecto. He probado muchos métodos. Esta pregunta no responde a la mía, en parte porque es para el 'Polysynth', no para el 'Sampler'. ¡Gracias por adelantado!
const readyOverlay = document.querySelector('#readyOverlay') readyOverlay.addEventListener('click', async () => { readyOverlay.style.display = 'none' await Tone.start() const sampler = new Tone.Sampler({ urls: { A1: "A1.mp3" }, baseUrl: "https://tonejs.github.io/audio/casio/", onload: () => { sampler.triggerAttackRelease(["A1"], 5); } }).toDestination(); sampler.release = 0 document.querySelector('#stop').addEventListener('click', () => { sampler.triggerRelease(["A1"], 'now') }) }) #readyOverlay { position: absolute; z-index: 9; width: 100%; height: 100%; background: white; text-align: center; display: flex; flex-direction: column; justify-content: center; } <script src="https://unpkg.com/tone@14.7.77/build/Tone.js"></script> <div id="readyOverlay">Press anywhere to start!</div> <button id="stop" >stop</button>Reemplazar triggerAttackRelease con solo triggerAttack funciona:
const readyOverlay = document.querySelector('#readyOverlay') readyOverlay.addEventListener('click', async () => { readyOverlay.style.display = 'none' await Tone.start() const sampler = new Tone.Sampler({ urls: { A1: "A1.mp3" }, baseUrl: "https://tonejs.github.io/audio/casio/", onload: () => { sampler.triggerAttack(["A1"]); } }).toDestination(); sampler.release = 0; document.querySelector('#stop').addEventListener('click', () => { sampler.triggerRelease(["A1"]); }) }) #readyOverlay { position: absolute; z-index: 9; width: 100%; height: 100%; background: white; text-align: center; display: flex; flex-direction: column; justify-content: center; } <script src="https://unpkg.com/tone@14.7.77/build/Tone.js"></script> <div id="readyOverlay">Press anywhere to start!</div> <button id="stop" >stop</button> triggerAttackRelease es solo una secuencia de llamadas triggerAttack y triggerRelease . Significa que ya ha programado un lanzamiento de nota en la onload de llamada de carga en su ejemplo inicial.
Tone.js ignora la segunda llamada de liberación porque la sampler ya ha marcado "A1" como liberada ( esta declaración if asegura que la nota se libera solo una vez después del ataque ).