#javascript #tone.js
#язык JavaScript #tone.js
Вопрос:
Я придумал это решение:
for(var i=0; i lt; 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)} }
Но это слишком большой код, и он может воспроизводить только 7 нот или около того;
Есть ли для этого простой ярлык всего в нескольких строках?
Ответ №1:
Если вы можете объявить заметки и их длины в массиве (похоже, вы это делаете). Затем вы можете просто перебирать ноты и воспроизводить их, накапливая временную задержку, чтобы рассчитать правильную задержку для каждой ноты с начальной точки.
напр.
const synth = new Tone.Synth().toDestination(); const notes = [ { pitch: "C4", timing: 0 }, { pitch: "D4", timing: 1 }, { pitch: "E4", timing: 1 }, { pitch: "F4", timing: 1 }, { pitch: "G4", timing: 1 } ]; function play() { let delay = Tone.now(); for(let i = 0; i lt; notes.length; i ) { delay = notes[i].timing; synth.triggerAttackRelease(notes[i].pitch, '8n', delay); } } play() // call this when someone interacts with your program.