France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« on: June 24, 2011, 03:37:05 pm » |
Salut tout le monde ^^ Après une question toute bête de PapyDuino qui demandait comment upgrader l'ATmega168 de son lecteur midi pour un ATmega328 cela m'as donné l'idée de faire un lecteur dans le même genre sous arduino. Le code est en pièce jointe, pour le moment j'ai un soucis j'utilise un delay (100) pour espacer les notes, il faudrait que j'utilise le delta-time à la place ! Problème le delta-time est en 1/4 de note donc pour faire un delay je vois pas trop, des idée ? Le plus gros du code est fait je pense (à voir quand même ^^") Niveau hardware: Lcd 2x16, Carte SD, câble midi (pour le moment je ne gère aucun des boutons prévue pour la suite play/stop/...), carte arduino. Edit: Je ne gère pas non plus les meta-events, c'est aussi un problème, ça décale tout les byte par la suite ... ça devrait pas être trop compliqué à mettre en place (enfin j'espère  ) Edit2: J'ai trouvé ce site: http://253.ccarh.org/handout/vlv/ mais c'est toujours pareil il faudrait que je convertisse le delta-time en ms ... Je suppose que cela est liée au tempo mais j'ai trouvé aucune commande qui parle du tempo ...
|
|
|
|
« Last Edit: July 04, 2011, 03:55:11 pm by skywodd »
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« Reply #1 on: June 24, 2011, 03:55:58 pm » |
Tient histoire de changer je vais avoir l'air c*n ^^"" Meta event: 0x51 (01010001) Data: 03 tttttt Set tempo, tttttt: microseconds/quarter note
Problème ce meta-events n'ai jamais appeler dans mon .mid de test ... Quelqu'un si connait en musique/midi ? 
|
|
|
|
|
Logged
|
|
|
|
|
Celtic Kingdom
Offline
Sr. Member
Karma: 2
Posts: 455
hard oui no!!!
|
 |
« Reply #2 on: June 24, 2011, 06:03:23 pm » |
De souvenir, mais à vérifier, la définition du tempo se fait de cette manière : Meta Event 0xFF -> Type 0x51 -> Length 3 -> Microseconds/Quarter-Note 0~8355711 C'est peut-être cela que tu reçois ?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 92
|
 |
« Reply #3 on: June 24, 2011, 10:27:49 pm » |
Chapeau bas !! Je râle, j'ai 40 ans de trop, et mes neurones ne vont plus assez vite pour les nouvelles technologies. Je vais me procurer un 328 et essayer ce que çà donne; je suis impatient, et curieux de voir la suite. Avec la motivation que tu as, je suis sur que tu vas nous faire un super truc. Pour blaguer, si tu aimes les défis, j' ai sujets de projets dans mes cartons, pour Arduino bien sur. Encore bravo, même s' il reste à fignoler des trucs, en 12 heures, c'est top classe ! A+ PapyDuino
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 92
|
 |
« Reply #4 on: June 24, 2011, 11:12:29 pm » |
Re J' ai trouvé çà; si çà peut t' aider. Encore de l' anglais ! il va falloir que je m' y mette. http://ruinwesen.com/mididuinoA+ PapyDuino
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« Reply #5 on: June 25, 2011, 02:34:18 am » |
De souvenir, mais à vérifier, la définition du tempo se fait de cette manière : Meta Event 0xFF -> Type 0x51 -> Length 3 -> Microseconds/Quarter-Note 0~8355711 C'est peut-être cela que tu reçois ?
J'ai une trame dans le genre (que j'ai pas géré est qui à bugger le prog) mais elle est arriver qu'au ~20eme event, c'est la commande pour gérer le tempo en us j'ai plus aucun doute la dessus mais je pense qu'il doit y avoir un tempo par défaut et que cette meta change ce tempo quand il n'est plus bon ? sinon dans le principe: meta 0x51 -> récup des data (3 bytes) -> data -> (double)tempo DelayMicroseconds(delta * tempo); Pas mal je vais regarder ! ça gére le delta je vais regarder leur méthode. Je vais me procurer un 328 et essayer ce que çà donne; je suis impatient, et curieux de voir la suite. Avec la motivation que tu as, je suis sur que tu vas nous faire un super truc.
J'ai fait en sorte que ce soit compatible sans modification avec ton kit  Et plus généralement compatible avec n'importe quel hardware via le PinMapping. Pour blaguer, si tu aimes les défis, j' ai sujets de projets dans mes cartons, pour Arduino bien sur.
J'adore les défi  je sens qu'on va bien s'entendre  Je vais tenter de géré toute les meta (quitte à faire des fonctions ne retournant rien sur certaine commandes) je suis sur que le probléme vient du fait que tout est décalé si je ne gère pas un seul des events.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 92
|
 |
« Reply #6 on: June 25, 2011, 11:14:26 am » |
Re J'ai été ce matin chercher du matos à Toulouse chez http://shop.snootlab.com/Sympa, ils ont ouvert la boutique pour moi ! si si ! Est-ce que je peux faire un essai avec le code que tu m' as donné, et en implantant ensuite le 328 sur ma carte pseudo Mr Midi 2 , même si tout n'est pas OK ? A+ PapyDuino
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« Reply #7 on: June 25, 2011, 11:24:48 am » |
J'ai été ce matin chercher du matos à Toulouse chez http://shop.snootlab.com/Sympa, ils ont ouvert la boutique pour moi ! si si ! Est-ce que je peux faire un essai avec le code que tu m' as donné, et en implantant ensuite le 328 sur ma carte pseudo Mr Midi 2 , même si tout n'est pas OK ?
J'ai tous fait pour que tu puisse prendre l'atmega328 d'une carte arduino déjà programmer et le mettre comme ça dans ton kit 
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« Reply #8 on: June 25, 2011, 01:12:04 pm » |
Hello tout le monde ! Bon j'ai un soucis ! Et un gros ! J'ai implanter la gestion des meta et des bouton STOP et PAUSE (enfin préparé j'ai pas mis les boutons encore  ) Problème le delay semble complétement foirer ! Je passe 1min 30sec de musique en 5 secondes ! Bizarrement un delayMicroseconds(tempo * delta) me semblé l'idéal vu que le tempo est en us par (1/4 de note) et delta en (1/4 de note) ! Avec delayMicroseconds en 5 secondes toute le .mid est lu direct, avec delay(xx) qui devrait être 1000 fois plus lent c'est encore plus rapide et même en multipliant par 1000 c'est toujours aussi rapide  Je joint la version actuelle de mon code, il marche niquel pour ce qui est de la gestion de tout le reste ^^ juste ce problème de timing !
|
|
|
|
« Last Edit: July 04, 2011, 03:55:16 pm by skywodd »
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 92
|
 |
« Reply #9 on: June 25, 2011, 01:41:38 pm » |
Re J'ai essayé de charger la 1ère version, j'ai les commentaires:
>>Binary sketch size: 17802 bytes (of a 126976 byte maximum) >>avrdude: stk500_getsync(): not in sync: resp=0x30 >>avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
Avec la version actuelle, j'ai:
‘MsTimer2’ has not been declared SkyMidiPlayer.cpp:57:22: error: MsTimer2.h: No such file or directory SkyMidiPlayer.cpp: In function 'void setup()': SkyMidiPlayer:92: error: 'MsTimer2' has not been declared SkyMidiPlayer:93: error: 'MsTimer2' has not been declared SkyMidiPlayer.cpp: In function 'void buttonPlay()': HandleButton:28: error: 'flagInPlay' was not declared in this scope M' y suis-je mal pris ? A+ PapyDuino
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« Reply #10 on: June 25, 2011, 01:54:12 pm » |
>>Binary sketch size: 17802 bytes (of a 126976 byte maximum) >>avrdude: stk500_getsync(): not in sync: resp=0x30 >>avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
Redémarre l'ide, débranche puis rebranche l'arduino est relance l'ide  ‘MsTimer2’ has not been declared SkyMidiPlayer.cpp:57:22: error: MsTimer2.h: No such file or directory SkyMidiPlayer.cpp: In function 'void setup()': SkyMidiPlayer:92: error: 'MsTimer2' has not been declared SkyMidiPlayer:93: error: 'MsTimer2' has not been declared SkyMidiPlayer.cpp: In function 'void buttonPlay()': HandleButton:28: error: 'flagInPlay' was not declared in this scope
Il te faut la librairie MsTimer2 http://www.arduino.cc/playground/Main/MsTimer2Télécharge le zip et dezip le dans le dossier ..\blablabla\libraries blablabla etant le dossier contenant l'executable arduino 
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« Reply #11 on: June 25, 2011, 02:07:54 pm » |
@PapyDuino: l'erreur "flagInPlay not declared in this scope" vient d'une petite erreur de ma part  Dernière version: Tout les boutons ont leur flags pour la gestion par interruptions, Le calcul du delay a été modifié mais toujours aussi buggé T_T, Gestion des sysex event et de plusieurs meta système qui étaient passé à la trappe, Affichage des byte restant en lecture sur le lcd, refresh à une image par seconde -> on vois bien le bug du timing ! 28xxx, bad command, 25xxx, BOOM! 0 Si quelqu'un voit d'où peut venir l'erreur c'est très frustrant, même en y étant passant tout l'aprem j'ai pas trouvé T_T (je suis sur que c'est tout c*n en plus !) @PapyDuino: pour le coup j'ai intégré MsTimer2 dans le zip tu n'aura pas à l'installer 
|
|
|
|
« Last Edit: July 04, 2011, 03:55:20 pm by skywodd »
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 92
|
 |
« Reply #12 on: June 25, 2011, 02:16:53 pm » |
Re Pour le premier, j'avais tout bêtement choisi la mauvaise "board" Pour le second, l'erreur devient: ‘flagInPlay’ was not declared in this scope SkyMidiPlayer.cpp: In function 'void buttonPlay()': HandleButton:28: error: 'flagInPlay' was not declared in this scope A+ PapyDuino
|
|
|
|
« Last Edit: June 26, 2011, 12:14:12 am by Jean-François »
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« Reply #13 on: June 25, 2011, 02:36:14 pm » |
Pour le second, l'erreur devient:
‘flagInPlay’ was not declared in this scope SkyMidiPlayer.cpp: In function 'void buttonPlay()': HandleButton:28: error: 'flagInPlay' was not declared in this scope
Regarde mon post au dessus j'ai encore fait une modif ^^"" réglant cette petite erreur et d'autres trucs 
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4331
Arduino Hacker
|
 |
« Reply #14 on: June 25, 2011, 02:52:59 pm » |
J'entrevois de gros problème à l'horizon ! Depuis le debut je travail depuis ces deux doc: http://faydoc.tripod.com/formats/mid.htmhttp://www.omega-art.com/midi/mfiles.htmlMais je viens de découvrir un truc pas cool du tout, les "running status" et j'ai aucune doc dessus ! Il semblerai qu'il puisse y avoir des events < 0x80 mais lequel ? J'ai pas trouvé. Je pense que aussi j'ai oublier certaine meta et ça pourrai expliquer (en parti) le bug du timing. Si un events est pas géré et qu'il fait plus d'un byte, tout les autres sont décalé et hop bonjours la galère ... Personne pour regarder mon code et m'aider  ?
|
|
|
|
|
Logged
|
|
|
|
|
|