Dernière mise à jour :
19/01/2020
Présentation
Cet indicateur de tempo
MIDI se base sur les messages d'horloge transmis dans une liaison MIDI.
Il mesure le temps qui s'est écoulé entre deux
messages MIDI Clock et le traduit en valeur de tempo avec une
résolution de 1 BPM.
Schéma
Sous l'apparente et incertaine complexité du schéma qui suit, se cache
une
évidente simplicité moins complexe que ce à quoi on pense
quand on ne sait plus où l'on en est, puisqu'à force de se
perdre, à moins que ce ne soit l'inverse, rien n'est moins sûr que
l'incertain (ne m'en veuillez pas, j'ai encore lu du Pierre Dac avant
de m'endormir entre hier soir et ce matin - ou le contraire).
Fonctionnement général
Le système analyse les messages d'horloge
MIDI Clock (basé sur les mesures,
Beat) et non les messages
MTC MIDI
Time
Code
(basé sur des informations temporelles heures:minutes:secondes:trames).
Le principe de fonctionnement est simple et se base sur un calcul
mathématique tout aussi simple. Les
messages temps réel MIDI Clock sont délivrés à raison de 24 fois par
quart de note (24 PPQN, 24
Pulses Per Quarter Note),
on compte donc 24 messages par seconde si le tempo est de
60 BPM ou 48 messages par seconde si le tempo est de
120 BPM. Quand plusieurs messages MIDI Clock
sont détectés, le temps qui les sépare est analysé puis converti en
valeur de tempo (BPM). La mesure de temps peut s'effectuer de plusieurs
façons, j'en ai utilisée une adaptée aux périodes "longues" (les
fréquences mises en jeu ici sont faibles) et qui consiste simplement à
compter le nombre d'impulsions délivrées par un
oscillateur (interne au PIC) entre deux messages MIDI Clock. En
connaissant la fréquence (et donc la période) de l'oscillateur
interne, on peut en déduire la durée correspondant au nombre
d'impulsions comptabilisées. Par exemple si la fréquence du compteur
interne est de 1 MHz, sa période vaut 1 us. Si on compte
20000 impulsions, cela correspond à une durée de 20 ms entre deux
messages MIDI Clock (20000 * 1 us), soit une fréquence de 50 Hz.
Il ne reste alors plus qu'à convertir cette fréquence de 50 Hz en
valeur de tempo (elle correspond à un tempo légèrement supérieur
à 120 BPM).
Affichage numérique du tempo
L'affichage du tempo est réalisé avec 3 afficheurs 7 segments
traditionnels à cathode commune en mode multiplexé (
détails).
La cathode des afficheurs est "activée" via des transistors en
collecteur ouvert inclus dans un même boîtier ULN2803,
eux-mêmes
sont pilotés par le PIC. Si aucun message MIDI Clock n'est
reçu
pendant au moins 1 seconde, l'indicateur affiche la valeur 000.
Remarques - Le
circuit d'origine comportait 4 afficheurs et offrait une résolution de
0,1 BPM... qui s'est révélé complètement inutile à l'usage (la partie
décimale fluctuait trop avec les séquenceurs logiciels). Une précision à l'unité suffit amplement.
- Le ULN2803 peut être remplacé par des transistors individuels, chaque
transistor devant alors posséder sa propre résistance de
limitation du courant de base (valeur résistance 2k2 ou 4k7 par
exemple). C'est ce que j'ai fait sur le prototype.
Sorties "Tempo"
La sortie Tempo0 du PIC délivre
une impulsion de durée 1 ms chaque fois qu'est reçu un message
MIDI Clock. La sortie Tempo1 du PIC délivre
une impulsion de durée 50 ms chaque fois que se sont écoulés 24
messages MIDI Clock. Ces sorties peuvent être employées pour
allumer une simple LED, une LED de puissance via un
étage d'amplification de courant ou une lampe 230 V via un optotriac
suivi d'un triac (
exemple).
J'ai profité d'entrées libres sur le ULN2803 (utilisé pour
l'affichage numérique) pour dupliquer les sorties tempo sur des transistors en collecteur ouvert (500 mA max).
Entrée et sorties MIDI
L'entrée MIDI IN
est traditionnelle, équipée de son optocoupleur (ici un PC900) et de
ses quelques composants additionnels résistances et diode. La sortie de
l'optocoupleur aboutit directement à l'entrée Rx de l'UART du PIC.
La sortie MIDI THRU
duplique les données MIDI entrantes, on y retrouve les mêmes
informations, sans traitement ni filtrage. Les composants associés à
cette fonction de "sortie directe" (U4, R3, R4 et J3) sont optionnels
et peuvent être supprimés au besoin. Notons au passage que les portes
logiques non utilisées de U4 pourraient tout-à-fait servir pour ajouter
de manière économique deux autres sorties MIDI THRU...
La
sortie MIDI OUT
correspond à la sortie Tx de l'UART du PIC, elle ne peut donc
constituer une véritable sortie MIDI THRU. Elle se résume au
câblage d'une
prise DIN 5 broches et deux résistances de 220 ohms. A la
mise sous tension, le PIC délivre une
unique et brève note MIDI La3 (A3) de durée
100 ms et la LED LED1 s'allume brièvement,
pour confirmer que le logiciel du PIC démarre bien. Une fois
le
programme démarré, la sortie MIDI délivre une note MIDI Do1 (C1) de
durée
100 ms à chaque "impulsion" de tempo (24 PPQN divisé par 24, soit une
note par seconde si le tempo est de 60 BPM).
Sortie sonore
La broche RC2 (libélé "Sound" sur le schéma)
délivre une succession d'impulsions
propres à produire un son audible. Cette sortie peut être reliée à un
petit HP à travers une résistance d'une centaine d'ohm, ou être reliée
directement à
un transducteur piezo (au repos la sortie est à l'état logique bas). Il
va de soi que la puissance de sortie est trop faible pour un usage en
environnement sonore élevé, c'est pourquoi il est également prévu une
sortie ligne qui pourra être raccordée sur un ampli externe ou sur une
entrée ligne de table de mixage (In-Line, Aux, FxReturn, etc).
Oscillateur PIC
L'utilisation d'un quartz externe de 10 MHz
est justifié par la présence des entrée et sortie MIDI, ainsi que pour
obtenir une bonne précision de mesure du temps entre les messages MIDI
Clock.
Alimentation
Un
régulateur de tension de +5 V est prévu directement sur le circuit
(U101) ce qui permet d'alimenter ce montage avec n'importe
quel bloc d'alimentation secteur délivrant une tension
comprise entre
+9 V et +15 V. La consommation n'est pas très élevée et l'emploi d'un
dissipateur thermique pour le régulateur n'est pas justifié. La
diode D101 n'est pas indispensable mais vivement
conseillée, certains blocs secteurs du commerce permettant
d'inverser la polarité de la tension de sortie. Si vous disposez déjà
d'une alimentation de +5 V, alors vous
pouvez supprimer tous les composants relatifs à cette section, à savoir
D101, D102, C101, C102 et bien sûr U101.
Brochage des prises MIDI
Câblage valable pour les prises MIDI IN, MIDI OUT et MIDI THRU.
La
borne 2 est reliée à la masse au niveau de la sortie
MIDI
mais pas au
niveau de l'entrée, ce qui nous fait une belle jambe puisqu'il n'y a
pas d'entrée MIDI.
Prototype
Cette réalisation date de 2017 mais ce n'est qu'en
2020 que j'ai écrit cet article. Le prototype réalisé sur plaque
sans soudure a
été refait dans le seul but de placer quelques photos. J'avoue n'avoir
pas pu m'empêcher de retoucher un peu au code logiciel existant... pour
le
"nettoyer" et retirer la partie décimale qui pratiquement ne servait à
rien.
Procédure des tests :- Envoi
du MIDI Clock sans aucun autre message MIDI, sauf éventuels
messages Active Sensing (mesures non affectées par ces derniers).
- Pour les sources "logiciel" (Cubase, Protools, Reaper, MidiTest), tests effectués avec quatre interfaces MIDI différentes : RME FireFace800, M-Audio Midisport 4E/4S,
M-Audio "solo" 1E/1S et une interface "noname" chinoise à 4 euros (sorte de clone de la petite M-Audio 1E/1S).
- Les
valeurs minima et maxima relevées pour chaque valeur de tempo l'ont été
de manière automatique, sans tenir compte des récurrences (pas
d'analyse sur mode ou valeur dominante). C'est donc le pire des cas
possible qui est noté ici.
Les valeurs reportées dans le tableau suivant sont celles
relevées sur mon prototype. Les valeurs au-delà de 240 BPM ne sont là que pour le fun, bien entendu ;)
| Réglage Tempo |
Cubase (V8.5) |
Protools (V9) |
Reaper (V5.80) |
QY70 |
MidiTest (V2.9) |
| 30
BPM |
29-30 |
29-30 |
29-30 |
30 |
29-30 |
| 60
BPM |
59-60 |
59-60 |
59-60 |
60 |
59-60 |
| 120
BPM |
119-120 |
119-120 |
119-120 |
120 |
119-120 |
| 150
BPM |
149-150 |
149-150 |
149-150 |
150 |
149-150 |
| 180
BPM |
179-181 |
179-180 |
179-181 |
180 |
179-181 |
| 240 BPM | 239-240 | 239-240 | 237-243 | 240 | 239-240 |
| 300 BPM | 299-301 | 299-300 | 297-303 | 300 | 299-300 |
| 360 BPM | - | 359-360 | 357-366 | - | 359-360 |
| 480 BPM | - | 479-480 | 473-492 | - | 479-480 |
Remarques sur les résultats observés :- Les résultats sont les mêmes quelque soit l'interface MIDI utilisée.
- La
stabilité du MIDI Clock délivré par le Yamaha QY70 est exemplaire, pas
une seule "dérive" observée sur mon indicateur entre 10 BPM et 300 BPM
(appareil purement hard, pas d'OS Windows dans le trajet). Je me suis
servi de cet appareil comme "référence".
- La haute stabilité de l'horloge MIDI Clock délivré par mon logiciel MidiTest
a été rendue possible grâce à l'utilisation d'un timer de haute
résolution, le timer de base de
Windows ayant une précision largement insuffisante pour ce type de travail.
- La
relative "instabilité" observée avec les séquenceurs logiciels et mon
logiciel MidiTest est du même ordre de grandeur pour les quatre
interfaces MIDI utilisées.
- Reaper
est la source qui présente les plus grandes variations
(instabilités) à partir de 240 BPM (sur mon système et avec ma
configuration). Cela ne m'empêche pas de trouver Reaper formidable
et d'un rapport qualité/prix extra (et puis, je ne bosse pas au-delà de
200 BPM) !
- Cubase 8.5 et le Yamaha QY70 ne permettent pas d'aller au-delà de 300 BPM.
Au fait, qui parmi vous travaille au-delà de 240 BPM avec une synchro MIDI Clock ?
Circuit imprimé
Non réalisé par mes soins.
Logiciel du PIC
Pro - Logiciel non disponible.
Historique
19/01/2020
- Première mise à disposition.