Se connecter
Se connecter

ou
Créer un compte

ou

Vumètre MIDI Arduino

  • 27 réponses
  • 5 participants
  • 874 vues
  • 7 followers
Sujet de la discussion Vumètre MIDI Arduino
Bonjour

J’ai réussi à concevoir un contrôleur MIDI type table de mixage DJ 4 voies qui pilote Ableton et Traktor.
5 potentiomètres 1 fader 1 bouton rétro éclairé par voie.

Maintenant je bloque sur les vumètres. J’aimerais mettre 1 vumètre/voie qui serai contrôlé par Ableton.

Je ne sais pas si je dois le créer moi même LED par LED ou s’il existe des tout fait. Et surtout le code, je bloque.

Est-ce qu’une âme charitable pourrait me venir en aide? Je suis preneur de tout conseil!!!!

Merci

Afficher le sujet de la discussion
21
Bonjour,

essaie ceci :

if (rx.byte1 = 15) & (rx.byte 2 = 21) & (velocity < 1) 

A noter que

(velocity < 1)
(velocité = 0)

ne peut que correspondre à un évènement NoteOff.
Mais c'est peut-être ce que tu veux...

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

22
En effet c'est la ligne de la NoteOff
J'ai pris ça comme exemple parce que c'était la premiere ligne, mais après j'ai (velocity > 30) par exemple.

Sinon la compile passe pas comme tu l'as écrit.

Citation :
/Users/remybertrand/Documents/Arduino/NeoPixel_Vu/NeoPixel_Vu.ino:159:40: error: invalid operands of types 'uint8_t* {aka unsigned char*}' and 'bool' to binary 'operator&'
if (rx.byte1 = 15) & (rx.byte2 = 21) & (velocity > 30) {


J'ai ça comme erreur.

23
& est un operateur artihmetique, c'est le "et" binaire : 8 & 4 = 0
&& est l’opérateur logique : 8 && 4 = <pas zero>

Attention : "a = b" c'est a prend la valeur de b, et (a = b) peut valoir a peu près n'importe quoi, sans garantie (a, ou zero, ou 1, autre chose). On écrit normalement pas ce genre de chose.
"a == b" c'est un test qui vaut 0 si a n'a pas la même valeur que b, <pas zero> sinon.

La precedence des operateurs "if", "&" ... etc dans ton exemple fait que le code ne veut rien dire (heureusement il n'est pas non plus correct).

suggestion :
Citation :

if ((rx.byte1 == 15) && (rx.byte2 == 21) && (velocity > 30)) {



J'ai aussi rajoute des parenthèses, ça ne mange pas de pain.

[ Dernière édition du message le 25/04/2022 à 15:20:34 ]

24
Merci Zorks pour tes corrections.
Cela m'apprendra à donner un exemple dans un langage que je ne maîtrise pas, même si l'idée était là. :bravo:

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

25
Ça ne marche pas :(

les LED ne s'allument meme plus.
J'ai tenté "rx.byte2 == 21", les LED s'allument comme avant, c'est comme si j'avais rien mis.

J'arrive vraiment pas à comprendre comment limiter l'allumage des LED à Channel 16 note A0

Voilà ce que j'ai en entré de l'arduino pour être sûr que je me plante pas.
1jck.png

[ Dernière édition du message le 25/04/2022 à 21:11:46 ]

26
C’est difficile à suivre car ton code est morcelé sur plusieurs posts …

Il sort d’où ce “value” ? Dans le décodage de l’entrée midi tu utilise “velocity”, mais après c’est value ?

Ensuite, … dans les exemples ci dessus tu mets strip.offColor quand tu vérifies la condition du if. C’est donc pour l’éteindre

Ensuite encore, avec ces leds série tu ne perds rien à écrire toutes les leds à chaque fois que tu fais un changement. Ou à minima effacer tout strip avant.

Enfin, 21 c’est peut être le décimal pour AO, je ne sais pas. Si tu es sur de ton coup … ok.

Il serait peut-être bien de tester tes fonctions de led dans un sketch à part, t’assurer que tu peux bien allumer les leds que tu veux avec les bonnes commandes, indépendamment des entrées midi et de leur décodage.

Si tu veux un retour sur ton code, il faut le mettre en entier, dans un spoiler.
27
Ok j'avoue que je pars un peu dans tous les sens à chercher à droite à gauche. et du coup j'oublie d'enlever les modifications.

Pour repartir sur un code propre (voir le spoiler) et une explication claire :

J'ai un Arduino Leonardo avec un strip de 8 NeoPixels branché dessus. La DIN du strip est branché sur le PIN 6 de l'Arduino. Mon but est d'allumer les 8 LED du strip au rythme de la musique (style vumètre de table de mixage), en me servant des messages midi que le logiciel Traktor envoi.

voici ce que le mapping de Traktor (à gauche) et ce qu'il envoi comme message(à droite) :
mque.png

le sketch :
Spoiler - Cliquer ici pour lire la suite


Citation :
Enfin, 21 c’est peut être le décimal pour AO, je ne sais pas. Si tu es sur de ton coup … ok.


Il semblerait que ce soit bon. j'ai vérifié sur le net avec un MIDI Chart. apparemment le A0 correspond à 21 ou à 33 selon si le Middle C est C3 ou C4. mais j'ai testé les 2 ça change rien.


En l'état ça fonctionne quasiment comme je le voudrais, les LED s'allument au rythme de la musique. Sauf que le strip s'allume que ce soit la deck 1 2 3 ou 4 qui tourne. le strip réagit a tous les messages MIDI venant de Traktor, peut importe le channel et la note.
J'ai aussi fait un test avec le bouton "SYNC" de Traktor qui n'envoie qu'un NoteOn/NoteOff (127/0) en le mettant sur channel 13 note G#3. Le strip s'allume quand je l'active.
Donc pour remédier à ça, je voudrais limiter la réaction du strip à la note A0 channel 16.

[ Dernière édition du message le 26/04/2022 à 11:55:45 ]

28
C'est bon j'ai trouvé mon probléme. en regardant le log du serial monitor je me suis rendu compte que je n'avais pas de valeur de pitch qui remontait.

Du coup j'ai rajouté ce qu'il fallait :

Spoiler - Cliquer ici pour lire la suite