Bonjour à tous
je cherche a crée un tempo pour un programme de musique baser sur le BPM
j'ai trouvé ce bout de code sur internet il semble fonctionner
float bpm = 80; float minute = 60000; float interval = minute / bpm; int time; int beats = 0; int a; void setup() { size(300, 300); fill(255, 0, 0); noStroke(); time = millis(); } void draw() { background(255); if (millis() - time > interval ) { ellipse(width/2, height/2, 50, 50); beats ++; time = millis(); } a = a + 1; text(beats, 30, height - 25); stroke(0); line(a,0,a,height); }
ce que je cherche a faire c'est de faire bouger une ligne sur la largeur de la fenêtre de 0 a "width" baser sur le BPM et sur 4 temps.
je n'arrive pas a trouver la valeur de la variable "a" pour que la ligne ce promène sur 4 temps et ce a n'importe quel BPM
moi j'avais essayer cela comme valeur de "a" mais ça ne fonctionnais pas très bien surtout si on change le BPM
a = a + (interval/100)/8;
il fallait que je le divise par 8 si je voulais avoir quelque chose qui ressemblais a 4 temps
Merci D'avance
Danny
Dernière modification par imdidi (2018-09-20 17:54:46)
Hors ligne
bonjour a tous
il n'y a plus d'aide sur ce forum ?
laisser moi savoir
Merci
Danny
Hors ligne
Je ne comprends pas très bien ce que tu veux faire.
A tu essayer ?
a = (beats%4)*(width/4)
Hors ligne
salut
Merci pour ta réponse
Mais oui j'ai déjà vue cette option. C'était ce qui se rapproche le plus de ce que je veux faire.
En faite mon problème avec cela c'est que la ligne est saccader en bougeant alors que j’aurais besoin que la ligne bouge linéairement.
Mais coter précision c'est en plein ça qu'il me faut. Si il y aurait une façon de modifier l’algorithme que tu ma envoyer pour quelle soit linéaire je suis preneur.
Merci
Danny
Dernière modification par imdidi (2018-10-04 18:23:08)
Hors ligne
Ok alors essaye ceci
if (millis() - time > interval && frameCount%(width/4)==0) { ellipse(width/2, height/2, 50, 50); beats ++; time = millis(); if(beats==4){ beats = 0; a = 0; } } a++;
Hors ligne
salut
oui ça aussi j'ai essayé mais le tien est plus précis que le bout de code que j'avais faite je n'avais pas penser me servir de framecount...
il manque seulement un petit changement car le déplacement de la ligne fonctionne comme prévus sauf que la variable "bpm" n’est pas tenue en compte du coup on ne peux pas faire varier la vitesse de la ligne selon le bpm qu'on set
c'est en plein là que j'ai le problème. Quand tu appelle a++ je ne sais pas quoi mettre comme "algorithme" à la place pour que le "bpm" soit prit en compte et surtout que ça ne change pas l’incidence de la ligne car quand j'essayais de trouver la solution meton "bpm = 60" c'etait correct mais lorsque que je mettais "bpm = 120" la ligne ne bougeais plus a la bonne place
Merci
Danny
Dernière modification par imdidi (2018-10-05 16:18:17)
Hors ligne
essaye avec un float.
a += 0.1; // 0.2, 0.3, ...
Hors ligne
salut
toujours merci pour ton aide c'est apprécier
quand tu me dit essaye avec un float a += 0.1;
j’espère que tu me fais une blague car l’autre post j'ai pris la peine d'écrire "le code fonctionne bien mais la variable "BPM" n'est pas pris en compte"
alors explique moi en quoi " a += 0.1;" va résoudre mon problème ?
ma tu lu avant d'écrire quelque chose ?
ou tu est a bout d'idée et tu ne sais plus quoi faire toi non plus?
Pour l'instant j'ai contourné le problème mais un jour va falloir que je m'y recolle
Merci
Danny
Hors ligne
Ecoute, j'essaye déjà de t'aider ce qui n'est pas si mal, tu pourrais être un peu plus aimable.
Pour ton problème il faudrait voir ton frameRate (combien de fois ta fonction draw est rafraîchie par seconde).
Si c'est 60 (le mode par défaut) et si tu veux un BPM de 80, il faut diviser 80 par 360 (60 seconde X 60 rafraîchissement).
Tu obtiens un float que tu peux additionner à ta variable a.
Il faut surement aussi changer ceci :
if(beats>=4){ ...
Bon travail
Hors ligne
salut
bon Merci la j'ai de la viande a travailler
si je t'ai froisser je m'en excuse se n’était pas le but ici mais avoue que la réponse n’était pas songé
si tu m'avais expliquer cela a la place de a += 0.1; ....
je te remercie pour ton temps je vais travailler avec les nouvelle variable citer dans ton dernier post
et je te tien au courant
Merci
Danny
Hors ligne
Ne t'inquiète pas pour si peu.
Mais ici on essaye de ne pas faire tout le travail à la place de l'autre.
Celui qui pose une question est là aussi pour apprendre et si on fait tout à sa place,
ce n'est pas le cas.
@ ton service
Hors ligne