Pages: [1] 2 3 ... 7   Go Down
Author Topic: Player Midi Autonome  (Read 6862 times)
0 Members and 1 Guest are viewing this topic.
France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-confuse)

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 ...


* P1020803.JPG (788.02 KB, 3264x2448 - viewed 40 times.)
« Last Edit: July 04, 2011, 03:55:11 pm by skywodd » Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tient histoire de changer je vais avoir l'air c*n ^^""
Quote
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 ? smiley-kiss
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Celtic Kingdom
Offline Offline
Sr. Member
****
Karma: 2
Posts: 455
hard oui no!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 94
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 94
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Re
J' ai trouvé çà; si çà peut t' aider. Encore de l' anglais ! il va falloir que je m' y mette.

http://ruinwesen.com/mididuino

A+
PapyDuino
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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);

Re
J' ai trouvé çà; si çà peut t' aider. Encore de l' anglais ! il va falloir que je m' y mette.

http://ruinwesen.com/mididuino
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 smiley-wink
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 smiley-grin je sens qu'on va bien s'entendre smiley-lol

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

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Jr. Member
**
Karma: 0
Posts: 94
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai été ce matin chercher du matos à Toulouse chez
 http://shop.snootlab.com/
Sympa, ils ont ouvert la boutique pour moi ! si si !
smiley-eek

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 smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink)

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 smiley-cry

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

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Jr. Member
**
Karma: 0
Posts: 94
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

>>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 smiley-wink

‘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/MsTimer2
Télécharge le zip et dezip le dans le dossier ..\blablabla\libraries
blablabla etant le dossier contenant l'executable arduino smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@PapyDuino: l'erreur "flagInPlay not declared in this scope" vient d'une petite erreur de ma part  smiley-red

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 smiley-wink
« Last Edit: July 04, 2011, 03:55:20 pm by skywodd » Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Jr. Member
**
Karma: 0
Posts: 94
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Re
Pour le premier, j'avais tout bêtement choisi la mauvaise "board"

Pour le second, l'erreur devient:

Code:
‘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 Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

J'entrevois de gros problème à l'horizon !
Depuis le debut je travail depuis ces deux doc:
http://faydoc.tripod.com/formats/mid.htm
http://www.omega-art.com/midi/mfiles.html

Mais 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 smiley-sweat ?
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: [1] 2 3 ... 7   Go Up
Jump to: