Ancora musica tempo e metronomo

gerrix
Salve a tutti,
premetto che grazie a questo forum ho quasi risolto tutte le mie difficoltà per ottenere i calcoli necessari per il funzionamento di un piccolo software musicale che sto creando in javascript.

Ora me ne rimane una :oops: sono arrivato ad un punto ma non so più andare avanti.

quello che dovrei riuscire ad ottenere è che, partendo da un numero espresso in millisecondi (per esempio 7860) e sapendo che il click metronomico è impostato a 120 Bmp ed il tempo è in 4/4

a che battuta mi trovo (a)? su quale movimento (b)? quale sottomovimento (c)? e quale sottomovimento di C (d)?

in sostanza dovrebbe uscire qualcosa di analogo a questo 3 3 2 145
---------------------------------------------------------------------------------------
ho iniziato i calcoli in questo modo
1) 60.000 / 120 = 500(il risultato è la lunghezza di ogni quarto, la durata di ogni clic)
2) 7860 / 500 = 15,72 (15 quarti ottenuti in eccedenza sono i 72)

per impostare un intero di un 4/4 ci vogliono 4 quarti quindi il primo valore ottenuto e 3 poiché mi trovo alla terza misura
in quanto 15,72/4 = 3,93
quindi (a)= 3 con eccedenza di 93
i movimenti sono 15 e quindi anche (b) dovrebbe essere = a 3 :oops:
dovrei trovare c e d ma per il momento non ci riesco, spero che qualcuno di voi riesce ad aiutarmi.

(c) per ogni ciclo di b a 4 sottomovimenti

(d) per ogni ciclo di c a 240 movimenti

Grazie in ogni caso.
gerrix

Risposte
gygabyte017
Ciao, mi spiace ma non esiste un numero tra 500 e 600 con tale proprietà! Per conoscere il più piccolo numero che diviso per tutti quelli dà un risultato intero, basta fare l'mcm che è 10080 :)

gerrix
:) si hai ragione :)

:oops: scusami se ne approfitto della tua bravura

Adesso sto passando alla fase di stampare le note a schermo e mi servirebbe sapere se esiste una formula o calcolo per ottenere, da un numero che può essere compreso tra 500 e 600, che dividendo tra uno di questi numeri (48 -72 -96 -120 -144 - 168) mi dia sempre come risultato un numero intero. (non posso utilizzare una funzione di arrotondamento automatico perché le distanze devono essere precise)

Tutti questi numeri divisi per 24 danno sempre un numero intero, però mi servirebbe saper se c'è un numero tra 500 e 600 che divisi danno un numero intero.

Grazie, :) nel frattempo provo manualmente uno alla volta.

Gerrix

gygabyte017
Ciao Gerrix, mi fa piacere che sia riuscito a fare passi avanti nel progetto!

Quanto alla tua ultima domanda, se non ho capito male il tutto è già così! Se ci fai caso nella formula che ho scritto per calcolare l'smpte a partire da X:Y:Z:W compare, tra le tante cose, anche il parametro $B$ che era definito come $B = (60000) / (\mbox{velocità del metronomo})$
Infatti, se provi a fissare i quattro numeri $X,Y,Z,W$ (e a fissare ovviamente anche $n$ $h$ e $k$), non puoi ancora calcolare $T$ senza sapere il valore di $B$ che dipende dal metronomo. Variando la velocità del metronomo, varierà $B$ e di conseguenza varierà $T$ tenendo tutto il resto fermo. Questo dovrebbe essere proprio quello che cerchi.

Dimmi ovviamente se ho capito bene :D

Ciao!

gerrix
Ok Gygabyte :D :D :D , funziona tutto meravigliosamente. G R A Z I E. sei stato formidabile :D :D :D

Ora ti vorrei chiedere solo un ultima cosa su questo argomento:

Forse ti ho fatto fare un po di confusione tra smpte, midi timecode etc etc., ma ora ho le idee più chiare.

L'Smpte è usato soprattutto per sincronizzare i video alla musica ma è anche usato nel midi per il motivo che ti vado a spiegare.

La prima cosa che ti devo chiarire che l'SMPTE non va a modificare la posizione temporale delle note ma modifica solo la velocità di andamento.

Ad esempio se ho organizzato un brano midi file che ha come tempo metronomico 120 e, ad esempio, una nota è posta sulla posizione di: 3:3:1:1 il tempo in millesecondi corrisponde esattamente a 5000 e cioè la nota si trova ad iniziare a suonare esattamente a 5 secondi dallo start.

Se io prima di iniziare a mandare in play il sequencer(o anche nel mentre) diminuisco la velocità del metronomo la corrispondenza in secondi del valore SMPTE aumenta in proporzione e se aumento diminuisce in proporzione perchè, ovviamente, nel caso aumento la velocità, ad arrivare al punto 3:3:1:1 ci metterà meno tempo come al contrario ci metterà piu tempo ad arrivare al punto 3:3:1:1. Spero non ti sto incasinando un altra volta la testa :oops: :D

Quindi fondamentalmente mentre il valore 3:3:1:1 rimane invariato L'SMPTE cambia in base alla velocità di esecuzione. Quindi se parto da un valore espresso in millesecondi ad esempio 91250 lo converto in 960esimi e mi ritrovo 95052

Quindi T =95052 che messo come SMPTE dovrebbe essere qualcosa di simile a questo ORE "00" MINUTI "01" SECONDI "35" MILLESECONDI "52" che in una vista tipo sequencer apparirebbe cosi:
[size=150]00:01:35:052[/size]

Ora la difficoltà è nel capire come modificare questo valore in base alla velocità del metronomo :oops: come al solito ti posto un video dove appare evidente che. rimanendo invariato la posizione 3:3:1:1 il valore Smpte varia a seconda della modifica della velocità del metronomo e cioè se si alza il valore (del metronomo) diminuisce il tempo e, al contrario, aumenta. Ti lascio guardare questi 30 secondi di video e capirai subito.
Grazie ancora.
Gerrix
P.S.
Un dettaglio, non so... se può tornare utile
L'Smpte solitamente va a 24 Frames al secondo, quindi il contatore dovrebbe avanzare ogni 40 millesecondi considerando sempre un 960esimo


gerrix
Ciao Gyga :oops: ,
si, hai ragione e forse ho usato impropriamente la parola "base", in effetti perchè avevo notato, sempre guardando il player di logic, che qui , sotto a 4/4 si puo impostare un altro numero che parte dal primo denominatore e quindi 4. I numeri sotto( :oops: che io ho chiamato base :D ), come puoi vedere sono 4, 12 e 16. Se il tempo è 4/4 e quel numero sotto è impostato su 4, poichè 4 x 240 = 960 non c'è bisogno che, X per intenderci, perchè, se pensiamo per note, e come volessi dire che ogni 960 esimi ottengo un quarto con una ( :oops: e qui introduco un altro termine utilizzato nel midi) quantizzazione a 4. Cio significa che quando registro delle note utilizzando una tastiera midi, sia che la suono sul 340esimo movimento, sia sul 560esimo movimento etc.etc Y riporterà 1 se è il primo giro di 960, 2 se è il secondo giro e cosi via fino ad arrivare al quarto giro dopodiché avanzerà anche la misura a +1 e poi si riprende da capo... e anche le note sul pentagramma non potranno essere che semiminime da 1/4 (è una sorta di forzatura sulla imprecisione dell'esecutore chiaramente si fa anche con quantizzazione piu alte e la piu usata è a 16 esimi)e quindi, restando nell'esempio precedente, non avendo bisogno di semicrome(16esimi) esse non appaiono ma, virtualmente ci sono sempre nelle sottodivisioni :D .

Spero di essere stato chiaro e mi dispiace averti messo un po di confusione sul tutto. Grazie a te sto venendo fuori da questa cosa che mi ha bloccato sulla realizzazione di questo progetto a cui tengo moltissimo e quindi ti prego di scusarmi se mi perdo io :oops: e faccio perdere anche a te.
Dopo riprovo un po e ti faccio sapere.
Spero che in qualche modo riesca a ricambiare tutta la tua disponibilità.
ciao
Gerrix.

gygabyte017
Riciao! :)
Mmm a dirti la verità ora mi sono perso in questo discorso delle divisioni... Per come l'avevo intesa io, $h$ e $k$ rappresentavano rispettivamente il numero di sottodivisioni in ogni battito e il numero di sottosottodivisioni in ogni sottodivisione, e sono parametri generali impostabili da te... nell'esempio sopra io avevo impostato $k=100$, però se preferisci $k=240$ la formula resta invariata!

Quindi quando dici "quando il tempo impostato a 4/4 su base 16 ogni h dura 240" basta impostare $n=4$, $h=16$, $k=240$ e ottieni quello che cerchi (spero :D, sempre che abbia capito cosa intendi per base).

Invece è diverso il discorso se $h$ e $k$ sono in qualche modo funzione del tempo musicale. Nel senso, la formula sempre quella resta, ma $h$ e $k$ forse possono essere ricavati da qualcos'altro invece che impostati come parametri.

Invece, nel caso che dici "nel caso di base 4 il terzo elemento(Z per intenderci) non appare proprio" questo sballa un po' le cose, nel senso non ho idea del perché non dovrebbe comparire!

Spiegami quindi qualcosa di più sul perché delle varie basi/divisioni, che mi sono perso :P

Edit: ora che rileggo, dal video non ho proprio capito che cosa è la base, mi ricordo male o non era stata mai nominata? :D

gerrix
Uhm... ti prego di scusarmi :oops: :oops: :oops: Gyga ma non riesco a capire perché k ti ritorna 100 , non dovrebbe essere 240 per ogni h? forse sono io che mi sono perso...

prendendo a riferimento il player di logic Studio e, come puoi vedere dal filmato che ora ti posto sotto, quando il tempo impostato a 4/4 su base 16 ogni h dura 240, ho avanzato io utilizando il mouse



Ti do anche qualche ulteriore dettaglio che ho notato nel sequencer di Logic.
Sempre prendendo a riferimento il player di logic la durata di h varia a seconda se è base 4, 6, 8,12, 16, 24, 32, 48, 64 o 96.

nel caso di base 4 il terzo elemento(Z per intenderci) non appare proprio, infatti la vista si presenta
tipo cosi: 12: 2: : 240
nel caso di base 6 invece il terzo elemento è formato da 2 valori non eguali e cioè (640 e 320 che comunque sommano 960)
per il resto sono tutti multipli come nello schema che ti riporto sotto:

ecco invece un piccolo video dimostrativo che ho fatto in logic

P.S.
Sei un genio Gyga, grazie per aver fatto anche la conversione al contrario.
Gerrix

gygabyte017
Prego ;)

Dunque sul quarto da come l'ho intesa io, $k$ rappresenta il numero di sottosottodivisioni che ci stanno in ogni sottodivisione. Ad esempio, se siamo in 3/4, e selezioniamo $h=4$ sottodivisioni e $k=100$ sottosottodivisioni, il contatore farà una cosa tipo:
1:1:1:1
1:1:1:2
1:1:1:3
...
1:1:1:99
1:1:1:100
1:1:2:1
1:1:2:2
...
1:1:2:100
1:1:3:1
...
1:1:3:100
1:1:4:1
...
1:1:4:100
1:2:1:1
ecc

Si capisce l'esempio? Lo intendevi diverso tu?

Ecco la formula inversa, per passare da $X:Y:Z:W$ a $T$.
Dunque prima calcoliamo $\bar T$ (espresso in ms):

$\bar T = (W - 1) * (B / (h * k)) + (Z - 1) * (B / h) + (Y - 1) * (B) + (X - 1) * (n * B)$,

e infine calcoliamo $T$ riconvertendo in 960esimi: $T = \bar T * (960)/(1000)$.

Ad esempio, impostando come nel tuo esempio $14:3:3:210$, $4/4$, $120$bpm, $h=4$ e $k=1000$, ottieni
$\bar T = 27276,125$ms e quindi $T = 26185,08$ 960esimi


Ciao :)

gerrix
:D :D :D

Straordinario con che facilità hai realizzato questo calcolo, con poche righe hai ottenuto tutto ed io, invece :oops: con una valanga di righe non riuscivo mai a trovarmi. GRAZIE veramente di cuore.

allora, i primi tre valori li ottengo perfettamete, il quarto, invece (per colpa mia) ancora no, ma sto provando. Non riesco a capire k come lo devo ottenere :oops: e quindi non riesco a concludere il calcolo. Mi fai un esempio piu semplice possibile?

Si, Gigaby, :D sarebbe magnifico poter ottener anche il contrario cioè da un numero tipo 14:3:3:210 saper a quanti millisecondi corrisponde.

Grazie ancora.

Gerrix

gygabyte017
Riciao :)

Dunque dimmi se sto capendo bene, mettiamo caso che ho un evento che succede 10 volte al secondo, chiaramente questo evento succedera al tempo 0ms, 100ms, 200ms, 300ms, ..., 900ms, 1000ms, ecc; ma se noi invece di considerare il ms come unità di misura, considerassimo i 960esimi effettivi, l'evento succederebbe ai tempi 96, 192, 288, ..., 960, ma praticamente in realtà l'evento succede sempre agli stessi momenti, è solo un modo diverso di contare; tuttavia poi andiamo a considerare questi tempi espressi in 960esimi come fossero tempi espressi in ms, quindi 96ms, 192ms, 288ms, ..., 960ms e da 960ms a 999ms salta. Dico bene? Quindi l'intervallo [0,1000]ms viene compresso in [0,960]ms, e [960,999]ms muore.

In funzione di questo cambio un attimo l'approccio dei 960esimi per non fare casini :)

Veniamo ai conti finali.
1) Conversione da $T$ a $X:Y:Z:W$

- Innanzitutto converto $T$ in ms e lo chiamo $\bar T$, ovvero: $\bar T = T * (1000)/(960)$, cosi lavoriamo in ms che è molto più comodo;
- Calcoliamo a che battuta stiamo: basta fare $X=\mbox{floor}(\bar T / (n * B)) + 1$, dove floor è la funzione di arrotondamento alla parte intera;
- Calcoliamo a che battito stiamo: basta fare $Y=\mbox{floor}((\bar T - (X - 1) * (n * B)) / B) + 1$;
- Calcoliamo a che sottodivisione stiamo: basta fare $Z=\mbox{floor}((\bar T - (X - 1) * (n * B) - (Y - 1) * (B)) / (B / h)) + 1$;
- Calcoliamo a che sottosottodivisione stiamo: basta fare $W=((\bar T - (X - 1) * (n * B) - (Y - 1) * (B) - (Z - 1) * (B / h)) / (B / (h * k))) + 1$.

Nella $W$ non ho messo la funzione parte intera perché essendo l'ultimo resto si prende diciamo tutto quello che ancora non è stato considerato di $\bar T$. Se ti serve puoi fare il floor pure lì, ma poi ti perderesti le cifre dopo la virgola e non hai più una corrispondenza esatta esatta tra i 4 numeri e il T, ma vedi tu come ti serve.

Provalo e dimmi se funziona.
Ti serve anche il viceversa?

Ad esempio, prendendo $120$bmp, il tempo in $4//4$, $h=4$, $k=100$ e $T =25654$ 960esimi come nel tuo esempio (ovvero $\bar T = 26722,91667$ ms), otteniamo $14:2:2:79,4$. Ti risulta?

gerrix
ciao :)
A) Innanzitutto è corretto quello che ho scritto?


si mi sembra di si :oops:

Il valore di T è espresso in 1000esimi o 960esimi?!?


L'smpte solitamente si setta a 24 frames al secondo quindi a 960esimi e si applica il dropframe che dovrebbe essere una cosa del tipo quando arrivo al frame 24 lo salto e vado direttamente al 26 quando arrivo al frame 48 lo salto e arrivo direttamente al 50 il che significa che mentre arrivo a 1000 ne salterò 40 (960 + 40 = 1000)
ho fatto un piccolo schema in excel



Per le altre domande:
tutto inizia sempre da 1 :)

Grazie infinitamente.
gerrix

gygabyte017
Molto bene, quindi possiamo dire che l'unità di misura sono i 960esimi, invece dei classici 1000esimi. Confermami se ho capito bene. Il problema aggiuntivo quindi è che si parte sempre dal metronomo, che misura in 1000esimi, e il risultato finale invece dovrà essere in 960esimi.

Ok dunque ricapitoliamo la questione. Userò sempre le notazioni $B$ per indicare la durata in 1000esimi di ogni battito del metronomo, e $n//d$ per indicare il tempo musicale. Faccio un ragionamento scrivendo di getto, se scrivo corbellerie segnalamelo :D

Dei 4 numeri che tu indichi:
1) Il primo numero indica la battuta, giusto? Abbiamo detto che una battuta dura $n * B$ 1000esimi, quindi $(n * B)*(960/1000)$ 960esimi;
2) Il secondo numero indica il battito all'interno della battuta, giusto? Ogni battito dura $B$ 1000esimi, quindi $B *(960/1000)$ 960esimi;

Ora introduco altre due lettere per dare tenere sempre le cose in generale:
- chiamo $h$ il numero (intero) di sottodivisioni di ogni battito
- chiamo $k$ il numero (intero) di sottosottodivisioni di ogni sottodivisione precedente
Praticamente, in ogni battito ci sono $h$ sottodivisioni, in ogni sottodivisione ci sono $k$ sottosottodivisioni, quindi in un battito ci sono $h*k$ sottosottodivisioni.

Quindi:
3) Il terzo numero indica la sottodivisione all'interno del battito, giusto? Ogni battito dura $B *(960/1000)$ 960esimi, quindi ognuna delle $h$ sottodivisioni del battito dura $B/h *(960/1000)$ 960esimi;
4) Il quarto numero indica la sottosottodivisione all'interno del battito, giusto? Ogni sottodivisione dura $B/h *(960/1000)$ 960esimi, quindi ognuna delle $k$ sottosottodivisioni di una sottodivisione dura $B/(h*k) *(960/1000)$ 960esimi.

-------------------------------------------------------
Se fin qui non ho detto corbellerie, veniamo al punto. Chiamo $T$ il smpte. Chiamo $X:Y:Z:W$ quei quattro numeri.

Prima di proseguire, ti chiedo alcuni chiaramenti ulteriori:
A) Innanzitutto è corretto quello che ho scritto?
B) Il valore di $T$ è espresso in 1000esimi o 960esimi?!?

In un dato momento $T$:
C) la battuta corrente $X$, parte da zero o da uno?
D) il battito corrente $Y$ all'interno della battuta in cui siamo, ricordando che il tempo musicale è $n//d$, va da $0$ a $n-1$ oppure da $1$ a $n$? Nel senso se ad esempio siamo in $3//4$, $Y$ conta 0,1,2 oppure 1,2,3?
E) La sottodivisione corrente $Z$ all'interno del battito in cui siamo, ricordando che ce ne sono $h$ in un battito, va da
$0$ a $h-1$ oppure da $1$ a $h$?
F) La sottosottodivisione corrente $W$ all'interno della sottodivisione in cui siamo, ricordando che ce ne sono $k$ in una sottodivisione, va da $0$ a $k-1$ oppure da $1$ a $k$?

Ciao :)

gerrix
Ciao gygabyte017, grazie per il tuo prezioso apporto.
Si sui due punti ci siamo.
ti passo questo link cosi penso ti sarà piu chiaro il fatto di 960.

In pratica, se ci pensi, si parte da 4 8 12 16 24 32 48 64 96 che sono tutti valori multipli che pui identificare con le note musicali, quindi si rende necessario, anche per prevedere la stampa a schermo delle note che il tutto venga diviso in 960 o 480 o 240 e cosi via
collegati a questo link sotto e capirai sicuramente
http://web.physik.rwth-aachen.de/~harm/ ... itmcn.html.

Io dovrei riuscire ad ottenere alla perfezione il calcolo in qualsiasi situazione 4/4 3/4 3/8 etc etc ed anche il valore Smpte come nel video 1


e nl video 2

gygabyte017
Ciao, dunque

"gerrix":

La cosa che vorrei ottenere è che sapendo che sto in un tempo ad esempio di 4/4 ad una velocità di 120 Bmp, avendo un numero espresso in millesecondi (esempio 25654) a che misura si trova la nota (1), su quale quarto(2) su quale sottodivisione del quarto(3) e quale sottodivisione della sottodivisione(4)


ok la richiesta è chiara, io personalmente uso programmi di composizione musicale/sequencer quindi ho presente di che divisioni stai parlando, anche non avevo mai pensato ai calcoli sotto :)

La prima cosa che ho capito e che non devo ragionare a millesimi ma a Novecentosessantesimi, per tutte una serie di problematiche di sincronizzazione con la notazione musicale, quindi ho fatto:
  porta_a_960 =  Math.round((numero_in_millesecondi /1000) * 960);


Ok questa cosa non mi è chiara, di che problematiche parli?

poi ottengo quanto dura ogni quarto (ogni movimento del metronomo) cosi
60,000/velocità del metronomo  (per esempio alla velocità di 120 la durata di ogni quarto e pari a 500 millesecondi) 


PUNTO N1
In realtà per evitare equivoci io direi che con $(60000)/(\mbox{velocità del metronomo})$ hai la durata in ms di ogni battito. Chiamiamo questo valore $B$.

Poi in base al tempo espresso tipo 4/4 divido il Numeratore dal denominatore


PUNTO N2
Mmm aspetta, per generalizzare un po', supponiamo che il tempo musicale sia $ n // d$. Ora, la $d$ è un valore puramente musicale che non serve per i calcoli, è ininfluente contare sulle semiminime, crome ecc. Che io sappia, il metronomo conta invece ogni singolo $n$-esimo della battuta, cioè se ad esempio sto in 3/4 oppure in 3/2 oppure in 3/8 (che è la stessa cosa ai fini dei conti) il metronomo batte 3 volte per fare una battuta.
Quindi io direi:
1) Ogni battito della battuta, ovvero ogni $n$-esimo, dura quanto dura ogni tic del metronomo, ovvero $B$;
2) Ogni battuta, che contiene $n$ battiti, durerà $n*B$.


ottengo anche la durata in singoli quarti usando i 960 esimi, quindi
  Math.round((500/1000) * 960);


E qui ti ho perso di nuovo.
Dunque, dimmi innanzitutto se siamo d'accordo sui punti N1 e N2; poi per favore chiarisci un attimo il motivo dietro ai 960 esimi; e poi possiamo continuare :D

Ciao

gerrix
provo a spiegarmi meglio e con più dettagli.
La cosa che vorrei ottenere è che sapendo che sto in un tempo ad esempio di 4/4 ad una velocità di 120 Bmp, avendo un numero espresso in millesecondi (esempio 25654) a che misura si trova la nota (1), su quale quarto(2) su quale sottodivisione del quarto(3) e quale sottodivisione della sottodivisione(4)

vi posto un video che ho realizzato velocemente catturando le immagini di un sequencer professionale che questa cosa la fa, le immagini dovrebbe rendere meglio l'idea di quello che cerco di ottenere :D



Scusate la mia ignoranza e il modo di porre le domande e realizzare i calcoli in modo grossolano, grazie.

La prima cosa che ho capito e che non devo ragionare a millesimi ma a Novecentosessantesimi, per tutte una serie di problematiche di sincronizzazione con la notazione musicale, quindi ho fatto:
  porta_a_960 =  Math.round((numero_in_millesecondi /1000) * 960);


poi ottengo quanto dura ogni quarto (ogni movimento del metronomo) cosi
60,000/velocità del metronomo (per esempio alla velocità di 120 la durata di ogni quarto e pari a 500 millesecondi)


Poi in base al tempo espresso tipo 4/4 divido il Numeratore dal denominatore

ottengo anche la durata in singoli quarti usando i 960 esimi, quindi
  Math.round((500/1000) * 960);


con questi valori quindi posso ottenere una misura completa quanto dura, quindi nell'esempio del tempo 4/4 a 120 una misura completa dura 4 movimenti da 500 Millesecondi e quindi 2000 Millesecondi, se fosse stata in un tempo di 3/4 sarebe durata 1500 Millesecondi etc etc.

Rimango con l'esempio di una misura che dura 2000 Millesecondi (1920 con la trasformazione)
Se il numero che devo analizzare, ad esempio, è 7522(diventa 7221 con la trasformazione in 960 esimi) so che la misura dove va collocata è la 3, perchè 7221 / 1960 restituisce 3 e torna una differenza di 1341. (7221 -5880 )
Quindi il primo numero è 3

Il secondo lo posso ottenere dividendo 1341 * la durata dei quarti, quindi
1341/480 = 2,79375 quindi il secondo numero è=a 2
quindi ho ottenuto i primi due valori
3:2:
ed è qui che mi sono bloccato e non riesco ad andare avanti

devo ottenere il terzo ed il quarto valore
il terzo valore, in questo caso, si deve calcolare tenendo presente che ogni quarto (480) deve essere diviso in 4, quindi ogni sottomovimento è pari a 120 millesecondi, mentre il quarto valore dovrebbe essere un numero espresso in millesecondi da 1 a 240.

Grazie e scusate la confusione con cui ho post tutto :)
Gerrix

Quinzio
Cerco di razionalizzare tutto quanto, anche cercando di ricordare i tempi lontani in cui suonavo un po' la chitarra e facevo finta di saper leggere qualche spartito.

Il metronomo batte un click a cadenza costante. 120 Bpm (non Bmp) significa 120 battiti per minuto, quindi sono 2 al secondo, quindi la cadenza è 0.5 secondi.

Questo è il tempo di 1/4 .
4/4 saranno 0,5 s x 4 = 2 s

Quindi nel tuo software hai un timer che parte all'inizio del brano. Ti conviene fare una funzione semplice che lo converte subito in secondi, così ci si semplifica la vita. t = t'[ms] /1000.

Quindi per sapere in che battuta sei devi calcolare $b=floor(t/2)$, dove floor ti da l'interno minore del numero. Es: floor(5,3)=5, floor(9,99)=9 floor(9)=9. Questa funzione floor c'è anche in javascript di sicuro ma non so come si chiama.
Quindi b è la battuta in cui sei, la prima battuta è la zero, non la 1.
Per sapere in quale quarto sei farai $m=floor((t-b*2)/(0.5))$

quando parli di movimenti e sottomovimenti non ti capisco.

Stellinelm
Forse dovresti provare nella sezione informatica.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.