¿Cómo reproduzco múltiples notas una tras otra en Tone.js?
Llegué a esta solución:
for(var i=0; i < max; i++){
var note=arrays[i].pitch;
var time=arrays[i].timing;
if(i===0){synth.triggerAttackRelease(note,time,0)}
if(i===1){synth.triggerAttackRelease(note,time,arrays[0].timing)}
if(i===2){synth.triggerAttackRelease(note,time,arrays[1].timing+arrays[0].timing)}
if(i===3){synth.triggerAttackRelease(note,time,arrays[2].timing+arrays[1].timing+arrays[0].timing)}
if(i===4){synth.triggerAttackRelease(note,time,arrays[3].timing+arrays[2].timing+arrays[1].timing+arrays[0].timing)}
if(i===5){synth.triggerAttackRelease(note,time,arrays[4].timing+arrays[3].timing+arrays[2].timing+arrays[1].timing+arrays[0].timing)}
if(i===6){synth.triggerAttackRelease(note,time,arrays[5].timing+arrays[4].timing+arrays[3].timing+arrays[2].timing+arrays[1].timing+arrays[0].timing)}
if(i===7){synth.triggerAttackRelease(note,time,arrays[6].timing+arrays[5].timing+arrays[4].timing+arrays[3].timing+arrays[2].timing+arrays[1].timing+arrays[0].timing)}
}
Pero es demasiado código y sólo puede reproducir unas 7 notas;
¿Existe un atajo simple para hacerlo en sólo un par de líneas?
davy.ai
Sí, hay una solución más simple. Puede usar Tone.Part para programar el arreglo de notas que se tocarán en tiempos específicos. Aquí hay un ejemplo:
Este código crea una nueva instancia de Tone.Synth, una nueva instancia de Tone.Part que programa el arreglo de notas a ser tocadas en tiempos específicos usando el método triggerAttackRelease de la instancia synth, y luego comienza a tocar las notas. De esta manera, no tiene que escribir una larga declaración if-else para cada nota.