Arduino Midi Clock

Clonages d'ancètres, conceptions originales, circuit bending, le coin des grenouilles bricoleuses.

Modérateur : darcmorcel

portix
Messages : 23
Inscription : 29 juil. 2013, 22:52
Localisation : Liège, Belgique
Contact :

Arduino Midi Clock

Message par portix »

Bonjour,

Je tente de créer un générateur de midi clock à partir d'un arduino.
Le projet me semblait accessible, pourtant je cale.
Il me semblait qu'il "suffisait" de pousser un "OxF8" tous les 24eme de temps.
Malheureusement mon Volca Keys qui me sert pour les tests se contente de:
-friser de temps en temps
-bloquer l'horloge interne sans se synchroniser
-générer une note
Dans le doute par rapport à mon montage, j'ai chargé le sketch de démo "midi_test" qui fonctionne sans sourciller.

Quelqu'un aurait une idée de ce qui m'échappe?

Merci,

Marc
http://htk-synth.over-blog.com/" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
baloran
Messages : 2179
Inscription : 29 févr. 2012, 13:46
Localisation : Pas de Calais
Contact :

Re: Arduino Midi Clock

Message par baloran »

N'hésite pas à poster le code ici, la recherche du problème pourra servir à d'autres :wink:
Quand l'été est si pluvieux ou l'hiver si froid...
portix
Messages : 23
Inscription : 29 juil. 2013, 22:52
Localisation : Liège, Belgique
Contact :

Re: Arduino Midi Clock

Message par portix »

Le code est relativement simple (et je le simplifie encore ici ;) )

Code : Tout sélectionner


#define CLOCKS_PER_BEAT 24;
#define tempo 12;

(...)

  Serial.begin(31250); // ouverture du TX serie à 31250 (vitesse du midi)

(...)

void sendMidiClock()
{
   unsigned long ticktime = 2.5e3 / tempo; //60L * 1000   / tempo / CLOCKS_PER_BEAT;
  time = millis();
  if (tick == 0)
  {
    next = time + ticktime;
    tick++;
  }
  if (time > next)
  {
    tick++;
    next = time + ticktime;
  }
  if (tick == 1)
  {
    Serial.print(0xF8);
  }

  if (tick == 25)
  {
    tick = 1;
  }
}


http://htk-synth.over-blog.com/" onclick="window.open(this.href);return false;
portix
Messages : 23
Inscription : 29 juil. 2013, 22:52
Localisation : Liège, Belgique
Contact :

Re: Arduino Midi Clock

Message par portix »

Et compte tenu du principe du canard en plastique, je prends conscience que le 0xF8 doit être envoyé à chaque changement de tick! Malgré tout celà ne fonctionne toujours pas.

Code : Tout sélectionner

 if (time > next)
  {
    tick++;
    next = time + ticktime;
    Serial.print(0xF8);
  }
https://fr.wikipedia.org/wiki/M%C3%A9th ... _plastique
http://htk-synth.over-blog.com/" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
baloran
Messages : 2179
Inscription : 29 févr. 2012, 13:46
Localisation : Pas de Calais
Contact :

Re: Arduino Midi Clock

Message par baloran »

Une première lecture rapide...
... je reviendrai plus tard ;)
Quand l'été est si pluvieux ou l'hiver si froid...
Avatar de l’utilisateur
baloran
Messages : 2179
Inscription : 29 févr. 2012, 13:46
Localisation : Pas de Calais
Contact :

Re: Arduino Midi Clock

Message par baloran »

A priori, déjà il faut remplacer le serial.print par serial.write ;)

Sinon pas d'erreur générer dans ton cas je crois, mais attention aux ";" après les DEFINE.
J'ai aussi un doute sur ta notation scientifique (que je n'utilise jamais...) qui me semble faire un cast float vers unsigned long.

Edit : d'après quelques pages effectivement, le compilateur va interpréter 2.5e3 comme un float. 2500 serait aussi bien ;)
Quand l'été est si pluvieux ou l'hiver si froid...
portix
Messages : 23
Inscription : 29 juil. 2013, 22:52
Localisation : Liège, Belgique
Contact :

Re: Arduino Midi Clock

Message par portix »

Youhoooouuuuu!

Un tout grand merci!!!
Deux journée que je me prends la tête avec ça!

CA MARCHE!

Merci! :cool:
http://htk-synth.over-blog.com/" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
baloran
Messages : 2179
Inscription : 29 févr. 2012, 13:46
Localisation : Pas de Calais
Contact :

Re: Arduino Midi Clock

Message par baloran »

portix a écrit : CA MARCHE!
Chouette :wink:

Il te faudra maintenant optimiser un peu le code car là, avec les divisions d'entiers, la somme des 24 ticks sera rarement égale à 60000 / Tempo :wink:
Quand l'été est si pluvieux ou l'hiver si froid...
Avatar de l’utilisateur
christianR
Messages : 101
Inscription : 05 déc. 2014, 16:30
Localisation : 38

Re: Arduino Midi Clock

Message par christianR »

Pour optimiser tu peux utiliser une interruption sur un timer.
Christian
portix
Messages : 23
Inscription : 29 juil. 2013, 22:52
Localisation : Liège, Belgique
Contact :

Re: Arduino Midi Clock

Message par portix »

Oui il faut effectivement optimiser mais dans un premier temps je code vite fait un truc pour un concert ce samedi.
Le but est de changer de programme et d'horloge simultanément sur plusieurs machines.
Quant aux interruption, il va falloir que je replonge dans mes cours d'algorithmes,.
http://htk-synth.over-blog.com/" onclick="window.open(this.href);return false;
Avatar de l’utilisateur
baloran
Messages : 2179
Inscription : 29 févr. 2012, 13:46
Localisation : Pas de Calais
Contact :

Re: Arduino Midi Clock

Message par baloran »

Il y a certainement plusieurs chapelles, toutes fréquentables ;) De mon coté je réserve globalement les interruptions aux protocoles matériels etc... Pour des ticks et indirectement "le groove..." je préfère les références de temps (en microseconde) qui me permettent de mettre en place des algos de rattrapage de temps (le temps élastique...), de mieux distribuer le temps libre etc.. :wink:
Quand l'été est si pluvieux ou l'hiver si froid...
Répondre
cron