Cambiamenti in momenti stabiliti del brano
Si ottengono confrontando a ogni fotogramma la posizione raggiunta nel brano con un elenco di momenti, ognuno con il suo valore. Qui i momenti sono gli attacchi della prima parte del brano, misurati sul file, e a ognuno lo sfondo cambia colore.
Files
- CARTELLA-SKETCH
- index.html
- sketch.js
- style.css
- liszt.mp3
Algoritmo
all'avvio: setup()
caricare il brano
a ogni clic: mousePressed()
se il brano è in esecuzione, fermarlo
altrimenti avviarlo e memorizzare il momento d'avvio millis()
a ogni fotogramma: draw()
partire dal bianco e dalla posizione 0
se il brano è in esecuzione: if()
calcolare i secondi passati dall'avvio
per ogni momento già raggiunto, usare il suo colore for()
colorare lo sfondo con il colore scelto background()
scrivere la posizione in basso
Istruzioni
La libreria non dice in che punto del brano è arrivata la riproduzione, ma basta memorizzare il momento in cui parte: millis() restituisce i millisecondi trascorsi dall’avvio dello sketch.
La differenza, divisa per 1000, dà i secondi trascorsi dall’avvio del brano, cioè la posizione raggiunta, finché la riproduzione è continua: con pause(), rate() o jump() il calcolo va corretto. Il suono parte in realtà circa un decimo di secondo dopo play(), un ritardo che qui non si nota.
A ogni fotogramma il colore riparte dal bianco, e il ciclo controlla tutti i momenti in ordine: alla fine resta il colore dell’ultimo momento già superato. Ogni momento ha il suo colore nella stessa posizione dei due array.
Variazioni
Con momenti a intervalli regolari il colore cambia ogni cinque secondi, senza più nessun legame con la musica:
Note
La versione precedente di p5.sound.js aveva il metodo
addCue(), che chiamava una funzione in un momento stabilito del brano, ecurrentTime(), che ne restituiva la posizione. Nella versione 0.4.1 non ci sono più: la guida a p5.sound.js ne ricostruisce una versione completa, che funziona anche con i brani in ripetizione e calcola la posizione con l’orologio dell’audio, più preciso dimillis().