Nous avons réussi à déterminer l’intensité des frappes. Cependant, c’est plutôt un estimé de l’intensité de la frappe, puisqu’il est pratiquement impossible de déterminer quand une frappe « commence » (composante en y initiale) sans avoir un bouton ou un certain dispositif pour nous aider à déterminer ce moment. Alors, nous avons estimé l’intensité de la frappe. De plus, la librairie Sound de Processing nous permet de régler l’amplitude du son .mp3 que nous avons donné au programme. Ceci dit, nous n’utiliserons pas de langage MIDI pour le restant du projet, puisque changer l’amplitude du son est déjà possible seulement avec du code d’une librairie.
Pour arriver à estimer la vitesse d’une frappe, nous avons défini une ArrayList, qui est un tableau dynamique, donc qui change de grandeur tout seul, et où il est facile d’ajouter et de supprimer des éléments. Dans notre cas, cette liste est utilisée pour stocker les frames (qui est l’image affichée sur l’écran, à chaque seconde elle change habituellement). Étant donné que Processing affiche des images à 60fps par défaut, nous avons créé une liste de 59 éléments, ce qui inclut le 0 pour donner 60 éléments au total. La liste enregistre constamment les positions de la baguette. Lorsque la liste est pleine de 60 éléments, le premier élément se fait supprimer, et l’entièreté des éléments se tassent vers le début pour permettre à un nouveau élément de rentrer à la fin de la liste. Ce cycle se déroule sans arrêt.
Enfin, pour calculer une vitesse, il faut une distance (ici, la distance entre le tambour et la baguette au début de la frappe) et un temps (ici, le temps entre le début de la frappe et le tambour). En ce qui concerne la distance, nous avons décidé de prendre la liste des 60 dernières positions de la baguette et de prendre la valeur à l’élément 56, en d’autres mots, 4 frames avant la frappe. Évidemment, dans notre cas, nous n’avons pas besoin de tous ces autres frames, mais c’est parce qu’on va jouer au drum relativement vite. Pour quelqu’un qui ne jouera pas aussi vite que nous, il pourra changer le code pour prendre la valeur à l’élément 34, par exemple. Par contre, pour nous, l’élément 56 fonctionne parfaitement. Donc, nous prenons la position de la baguette à ce 56e frame et nous trouvons la distance entre le tambour et cette dernière. Pour la différence de temps entre ces deux moments, il suffit simplement de partir un chronomètre à chaque 4 frames avec un modulo, puis arrêter ce chronomètre lorsqu’une frappe est exécutée. Bref, c’est pour ces raisons que la vitesse que nous calculons est un estimé.
Voici le code en lien avec ces explications (seulement pour le rouge, pour éviter la redondance):




Sources:
Comment utiliser une ArrayList: https://www.w3schools.com/java/java_arraylist.asp
Pour faire un timer: https://github.com/Lord-of-the-Galaxy/Timing-Utilities
Pour les sons .mp3: https://www.fesliyanstudios.com/