Script simple pour valider un rythme de note

Bonjour à tous,

Je suis professeur amateur de batterie à mes heures perdus, et j'aimerais mettre en place un exercice rythmique simple pour mes élèves,

étant plutôt moyen sur excel, je fais appel à l'élite pour avoir de l'aide.

Contexte:

Ils doivent suivre et faire de la percussion sur un rythme bien défini, prenons pour exemple un rythme régulier d'un battement toutes les 0.5 sec (120 battements minutes)

J'enregistre les pics de son via audacity, je peux donc voir précisément à quel instant t, le son a été déclenché.

Dans ce cas là, le but est d'avoir des pics de son régulier toutes les 0.5 sec.

La musique s'enclenche et je demande à ce qu'il commence à jouer à t=x sec (imaginons 5 sec)

je leur demande de jouer pendant quelques sec.

Si ils respectent parfaitement le tempo:

Les pics de son de référence/théorique sont les suivants:

5
5.5
6
6.5
7
7.5
8
8.5
9
9.5
10

Maintenant en pratique, c'est pas encore ça,

Imaginons les pics de son d'un élève:

5
5.2
5.5
6
6.55
7.02
7.5
8.2
8.91
9.5
10

Je voudrais donc, faire une petite formule si possible ou macro, pour :

Mettre en face de chaque valeur de référence si possible la valeur la plus proche.

On considère le son valide si compris dans un intervalle de temps de +ou-0.1 de la valeur de ref

5 ---> 5 OK

5.5 ----> 5.5 OK

6 ---> 6 OK

6.5 ---> 6.55 OK

7 ---> 7.02 OK

7.5 ---> 7.5 OK

8 ---> aucune valeur satisfaisante trouvée

8.5 ----> aucune valeur satisfaisante trouvée

9 ----> 8.91 OK

9.5 -----> 9.5 OK

10 ------> 10 OK

5.2 sec et 8.2sec sont des notes "à côté du rythme", la note 8.5 sec a été oubliée. (total 3 erreurs)

Remarque: la note 5.2 n'apparait pas dans les "notes corrigés".

Ce n'est pas très grave, il faudrait juste qu'au final l'algorithme ou la formule disent X valeur on pu être intégrer dans les intervalles de référence

et X valeur n'ont pas pu être intégrés. A savoir bien sur qu'un intervalle ne peut contenir qu'une seule valeur.

ici l'élève a fait 3 faute donc obtient un score de 8/11.

Je ne crois malheureusement pas qu'on puisse faire ce genre de chose via une formule et je suis totalement paumé sur la programmation VBA.

J'ai mis un exemple d enchainement de percussion beaucoup plus long en fichier excel ci joint pour tester le script.

Si vous avez une idée de script, je suis preneur.

A savoir que c'est mon premier message sur cette plateforme, et je ne sais pas si mon problème peut être traiter à l'aide d'un script VBA ou si une formule pourrait faire l'affaire.

Si vous avez des questions, ou que ce n'est pas clair, n'hésitez pas

Merci d'avance, je sais qu'il y a des monstres en programmations par ici qui prendront très peu de temps, là ou moi il me faudrait 1 semaine

Bonsoir,

vous parlez d'une tolérance de 0.1 pour un exemple à une décimale, dans votre fichier on est à trois décimales, la tolérance est elle de 0.001 ?

@ bientôt

LouReeD

Bonsoir @LouReed et merci pour ton message

les décimales ne sont pas très importantes, l'intervalle est de + ou - 0.1 quoiqu'il arrive donc même pour un nombre à 3 décimales par exemple 9.772 ,

l'intervalle de confiance est (9.672; 9,872)

Pas importantes ? Si on code avec une tolérance il faut la connaitre, non ? Avec des valeurs comme celles-ci : 5.872 et 6.097 en référence et une tolérance à 0.1 près laquelle doit on pointé comme étant celle de référence lorsque l'on a pour l'élève 5.877 et 6.083 ?

Soit ligne par ligne on dit si le temps de l'élève est bon ou hors tolérance, ce qui peut donner des temps "verts" et des temps "rouges".

@ bientôt

LouReeD

Oui la tolérance est connue c'est + ou - 0.100 , elle est arbitraire, je pense que c'est dejà pas mal.

A voir si je la garde,

Il y a 2 philosophies à mon avis pour traiter le problème:

- Case par case on regarde si la valeur est dans le bon intervalle (ce qui devient infame s' il manque un tempo ou des tempo sont oubliés), il faut alors tout décaler

- Comme je l'ai expliqué, dans mon premier message, on fait une sorte de matrice puis on disperse les valeurs de la matrice dans les intervalles dans lesquels ils peuvent rentrer.

Je comprend mieux et le deuxième cas me parait également le plus clair et "simple"...

@ bientôt

LouReeD

Si le problème est trop complexe et nécessite trop de temps, je suis prêt à payer pour avoir une macro propre, venir message privé.

Pas de ça entre nous !

Voici un premier jet, mais il n'y a pas de "trous" dans l'exemple, et il ne fait pas le compte des bonnes et mauvaise synchros :

Après s'il faut du "pro" alors il me faudra peut-être passer la main, et dans ce cas il vous faudra ouvrir un nouveau post afin de relancer les réponses...

@ bientôt

LouReeD

Merci pour ton fichier @LouReeD

Effectivement tu as traité le fichier ligne par ligne et à partir de la note 54, tout est désormais faux car il y a une note manquante / en trop chez l'élève

ce qui entraine tout le reste des notes fausses.

L'objectif serait d'utiliser la deuxième méthode, à savoir faire une matrice et disperser les valeurs de l'élève dans les intervalles de référence.

Par exemple: la note numéro 63 dans la colonne temps de ref a en réalité bien été joué mais décalée, elle se trouve dans la colonne élève à la position 62.

Elle ne devrait pas être comptée comme fausse, et c'est là tout le cœur du problème.

Dois je refaire un topic pour relancer les réponses ?

Je relance mon topic pour essayer de trouver une âme charitable qui pense pouvoir réaliser le script demandé

Bonjour

Pas toujours disponible, quelque fois dernière l'ordi et d'autre comme maintenant derrière le tel... Alors oui, je prends du retard...

Mais pour relancer le sujet avec l'espoir qu'un nouvel intervenant intervienne c'est un nouveau sujet qu'il faut créer, avec comme info 0 réponse, là il y aura une nouvelle interaction.

Sinon dès que je peux j'essaie de corriger le code.

@ bientôt

LouReeD

Rechercher des sujets similaires à "script simple valider rythme note"