Voici, pour les curieux ou pour ceux qui veulent "bricoler" quelques lignes de code pour donner des ordres MIDI à leur PA, une observation qui pourrait bien leur économiser les précieuses heures de recherche nécessaires à la compréhension des mystères du MIDI !
Tout d’abord, après avoir consulté la documentation Korg, on notera qu’un message adressé au canal de contrôle : « Program Change », 02, (82 + N° Variation), indique au PA que l’on souhaite qu’il bascule vers la variation indiquée ! Ainsi, en supposant que l’on ait, par exemple, décidé que le « Control Chanel » est le canal 16 (Hex 0f) dans notre configuration midi, le message midi permettant de configurer notre instrument sur la variation 1 sera, en Hexadécimal : cf, 02, 83.
Jusque là, pas de mystère c’est dans la doc !
Maintenant, supposons que l’envie nous prenne de modifier le volume d’un des canaux juste après avoir basculé vers cette variation.
Après le message cf, 02, 83 nous enverrons donc un second message qui, pour changer le volume du canal 0, dira : (Hex) b0, 07, 40 pour mettre le volume du canal 0 à 64…
Lorsque l’on fait tout cela manuellement, pas de problème cela fonctionne parfaitement. En revanche si l’on tente de le faire par programme, cela ne fonctionne pas !!
Voici donc ce qui se passe :
L’envoi du premier message provoque au niveau du PA un certain nombre d’évènements. La liste de ces évènements se monte à plus d'une quarantaine de messages et d’actions à effectuer pour le processeur du PA. Tout ceci demande bien sûr un certain temps ! Or, notre programme émetteur des demandes, n’est jamais informé de l’état de la réalisation de toutes ces actions… Ce qui fait que notre programme, croyant que tout va bien, envoie immédiatement la seconde commande MIDI au PA comme si celui-ci était en état de faire...
Cette nouvelle commande est immédiatement prise en compte par notre efficace PA et le volume est fidèlement ajusté à 64 (Hex 40).
Mais très souvent, ce même réglage de volume, qui est par ailleurs contenu dans la Variation demandée, n’a pas encore été fait. Donc le réglage de volume sera appliqué à nouveau par le PA au titre du changement de variation, écrasant ainsi le résultat de notre seconde commande de réglage de volume, commande arrivée trop tôt !
Ce que nous constaterons à l’arrivée c’est que la seconde commande (réglage du volume à 64) n’est pas appliquée !
En fait, elle a bien été appliquée mais s'est retrouvé écrasée accidentellement par ce problème de "timing" !!
Voici sous forme schématique ce qui se passe :
--- Exécution de l'ordre de basculement Variation .......... Réglage volume (127) dans variation...........------- Résultat 64 au lieu de 127 !!
............. --- Ordre réglage volume à 64---
Le remède à ce problème est tout simplement d’insérer un petit délai entre les deux commandes MIDI.
Par expérience un délai de 30 millisecondes me donne satisfaction dans la majorité des cas pour repousser l'exécution de la seconde commande après la fin de la première.
Amusez-vous bien !
Commentaire