es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  ,

Answer

  1. Avatar for 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:

    const synth = new Tone.Synth().toDestination();
    const part = new Tone.Part((time, note) => {
      synth.triggerAttackRelease(note.pitch, note.timing, time);
    }, array_of_notes);
    
    part.start(); // comienza a tocar las notas
    

    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.

Comments are closed.