débutant avec le Sparkfun MIDI shield

Bonsoir à tous !

Cela fait quelques mois que je me suis mis à Arduino dans le but de créer quelque chose en rapport avec la musique. J'ai chez moi des instruments qui utilisent le MIDI, et des logiciels tels que Fruity Loops, etc... J'ai donc acheté le shield MIDI de SparkFun . (Ayant pensé cela inutile je n'ai soudé que les connecteurs MIDI). Et depuis quelques jour impossible de faire quoi que ce soit avec ce shield qui pourtant a l'air d'avoir un bon potentiel pour mes projets. J'ai essayer de mettre les programmes d'exemples mais rien ...
Premièrement j'aimerais savoir comment faire pour communiquer avec l'ordinateur (Du genre pouvoir lire le numéro des notes d'un clavier MIDI) car dans le programme d'exemple le baudrate est à 31250 et il est impossible de le régler comme cela dans le moniteur.
Deuxièmement, mon but étant bien sur, de ne plus avoir besoin de l'ordinateur, je voudrais pouvoir recevoir des notes d'un contrôleur MIDI, les changer (les transposer, les harmoniser, etc ...) et enfin les renvoyer vers un un synthétiseur MIDI.

Voilà voilà, en espérant pourvoir trouver ici des réponses à mes questions !

A bientôt !

Bonjour,

Arnaud-S:
(Ayant pensé cela inutile je n'ai soudé que les connecteurs MIDI)

Tu as souder les connecteurs pour enficher la shield sur l'arduino ? Ou juste les deux prises midi ?

Arnaud-S:
Premièrement j'aimerais savoir comment faire pour communiquer avec l'ordinateur (Du genre pouvoir lire le numéro des notes d'un clavier MIDI) car dans le programme d'exemple le baudrate est à 31250 et il est impossible de le régler comme cela dans le moniteur.

31250 c'est le baudrate qui permet de communiquer en midi (pas avec un ordi, mais avec un périph compatible midi donc).
Tu ne peut pas être relier à l'ordi et à la shield en même temps sur le même port série, c'est du reste pour cela qu'il y a un interrupteur pour déconnecter Rx et Tx coté shield du Rx / Tx coté arduino/ordi lors de l'upload d'un skecth.
Si tu veut visualiser les événements midi sur l'ordi il te faudra utiliser NewSoftSerial qui permet de créer des port série "virtuelle" puis souder un câble entre la sortie de la partie Rx-midi (patte milieu de l'interrupteur) et une broche digital sur lequel tu créera un port série virtuelle avec NewSoftSerial.

Arnaud-S:
Deuxièmement, mon but étant bien sur, de ne plus avoir besoin de l'ordinateur, je voudrais pouvoir recevoir des notes d'un contrôleur MIDI, les changer (les transposer, les harmoniser, etc ...) et enfin les renvoyer vers un un synthétiseur MIDI.

Regarder du coté de http://arduino.cc/en/Tutorial/Midi pour la partie émission ou encore ici Arduino MIDI Volume Pedal « Keith's Electronics Blog pour la partie réception.
Tu as aussi beaucoup d'autre exemple sur google avec "arduino midi in" et "arduino midi out" :wink:

skywodd:
Tu as souder les connecteurs pour enficher la shield sur l'arduino ? Ou juste les deux prises midi ?

J'ai seulement soudé les deux prises MIDI, et je n'ai rien soudé pour enficher la shield vu que j'ai des headers !

skywodd:
31250 c'est le baudrate qui permet de communiquer en midi (pas avec un ordi, mais avec un périph compatible midi donc).

Ah ouais, d'accord ! Tout de suite je comprend mieux.

Mais je reste quand même désemparé, étant donné que j'ai testé tous les programmes d'exemples que j'ai pu trouver sur le net et aucun ne fonctionne.

Avec le code d'ici http://arduino.cc/en/Tutorial/Midi, La LED de transmission clignote mais rien non plus en connectant la prise MIDI out à un synthé ou a un logiciel. J'avoue ne rien comprendre -_-

Arnaud-S:
J'ai seulement soudé les deux prises MIDI, et je n'ai rien soudé pour enficher la shield vu que j'ai des headers !

Ok donc tu as des headers (en fait je voulais savoir si tu avais fait un câblage "en l'air" ou pas ;))

Arnaud-S:
Mais je reste quand même désemparé, étant donné que j'ai testé tous les programmes d'exemples que j'ai pu trouver sur le net et aucun ne fonctionne.

Ho! Aucun ne fonctionne ? T'as forcément fait une boulette quelque pars :wink:

Arnaud-S:
Avec le code d'ici http://arduino.cc/en/Tutorial/Midi, La LED de transmission clignote mais rien non plus en connectant la prise MIDI out à un synthé ou a un logiciel. J'avoue ne rien comprendre -_-

Tu as brancher ton synth sur la bonne prise (petit rappel, un cable midi doit être croisé, midi-OUT du synthé sur MIDI-IN de la shield et inversement) ?
Tu as placé l'interrupteur sur "run" ?
Ton câble midi est il correctement câblé ?

skywodd:
Ho! Aucun ne fonctionne ? T'as forcément fait une boulette quelque pars :wink:

Bah, je vois pas trop ou ça pourrait être. Ça pourrait être Les prises MIDI ? Pourtant elles me semblent être soudées correctement (enfin ça bouge pas d'un poil quoi ^^) ...

skywodd:
Ton câble midi est il correctement câblé ?

Heu, c'est à dire ?

(Merci pour tes réponses rapides ;D)

Est ce que t'as croisé les cables,
synthé -> shield
midi-in -> midi-out
midi-out -> midi-in

Parce que sinon ya aucune raison que les exemples "simple" comme l'exemple officiel midi ne fonctionne pas ...

Évidement ! Je suis pas idiot à ce point, sur tout que je sais quand même me servir du MIDI !

Bon, je crois que je suis bon à resouder tout ça pour voir si ça marche ...

Arnaud-S:
Évidement ! Je suis pas idiot à ce point, sur tout que je sais quand même me servir du MIDI !

Bon, je crois que je suis bon à resouder tout ça pour voir si ça marche ...

Calme, je dit pas ça pour t'énerver :grin:
Doit y avoir une soudure mal faite ou un probléme hardware.

skywodd:
Calme, je dit pas ça pour t'énerver :grin:

Oui oui je sais, j'aurais peut-être du mettre un smiley quelque part XD

[HS] Et là je vais attendre de recevoir mon USB Host parce que je viens de bousillé ma vielle souris qui marchait avec un câble PS/2, du coup maintenant j'en ais une USB et j'ai plus assez de ports pour mettre mon interface MIDI/USB :~ [/HS]

Arnaud-S:
[HS] Et là je vais attendre de recevoir mon USB Host parce que je viens de bousillé ma vielle souris qui marchait avec un câble PS/2, du coup maintenant j'en ais une USB et j'ai plus assez de ports pour mettre mon interface MIDI/USB :~ [/HS]

Comment ça t'as plus assez de ports ?

Et bien, j'ai que deux ports USB sur mon PC ! :grin:

Arnaud-S:
Et bien, j'ai que deux ports USB sur mon PC ! :grin:

Les hub usb ça existe tu sais :grin:

J'ai dit host ... j' voulais dire hub ^^

Arnaud-S:
J'ai dit host ... j' voulais dire hub ^^

Ok je me disait aussi qu'il y avait un truc pas clair :slight_smile:

Bon alors voilà, j'ai mon HUB et j'arrive à envoyer des notes en MIDI. Je sais pas comment j'ai fais pour que ça marche mais bon :grin: . Mais maintenant le problème c'est que j'arrive à recevoir des trucs mais je sais pas ce que c'est ^^ . En branchant au connecteur MIDI IN mon clavier MIDI et en chargeant le programme d'exemple qui est sur Sparkfun, ça fait des trucs bizarres. J'ai essayé de modifier les valeurs des conditions qu'il y a pour renvoyer une note MIDI en me basant la dessus, mais rien y fait. Même si je fais un programme qui allume une LED quand B10000000 est reçu (note on sur la channel 1) ça marche pas ...

Donc si quelqu'un sait ...

A++

Salut !

J'ai encore un peut avancé dans cette histoire :slight_smile: !
J'ai fait le code suivant en me basant sur le sketch d'exemple susmentionné :

#define OFF 1
#define ON 2
#define WAIT 3

byte channel;
byte note;
byte velocity;

int action=2; 

void setup() {
  Serial.begin(31250);     
}

void loop () {
   if (Serial.available() > 0) {
    byte incomingByte = Serial.read();

    if (incomingByte == B10010000) // Chaîne MIDI n°1 ?
    { 
      action = OFF;
    }
    else if (note==0 && action != WAIT) // Si aucune note n'est affectée et si la chaîne est déjà affectée
    { 
      note=incomingByte;   //On a alors la note
      
    }
    else if (note!=0 && action != WAIT)  //Si une note et une chaîne sont déjà affectées 
    { 
      velocity=incomingByte;  //On a alors la velocité
 
      Midi_Send(0x90, note, velocity);  //On envoie la note
      
      note=0;             //On initialise les variables
      velocity=0;
      action=WAIT;
    }
    else{
    }
  }


}

void Midi_Send(byte cmd, byte data1, byte data2) {
  Serial.print(cmd, BYTE);
  Serial.print(data1, BYTE);
  Serial.print(data2, BYTE);
}

Encore un problème se pose. Si on joue plusieurs notes en même temps ou une note rapidement, ça rame ! Toute les notes n'arrivent pas au bon moment (si elles arrivent !).

Donc j'aimerais savoir comment réduire cette latence ! Merci :grin: