Publicité

Annonce

Réduire
Aucune annonce.

Dissipation des mystères du MIDI !!

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Pa1000 Dissipation des mystères du MIDI !!

    Bonjour à tous,


    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 !

    Dernière modification par Chris 60, 05 juin 2020, 14h52.

  • #2
    Curieux cet exécution dans le désordre. Je m’attendais à une file d’attente permettant de temporiser les événements pour les exécuter dans l’ordre.
    http://www.sinerj.org/~loyer/piano/

    It's never too late to learn to play the piano. (tip of the day)

    Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

    Commentaire


    • #3
      Envoyé par floyer Voir le message
      Curieux cet exécution dans le désordre. Je m’attendais à une file d’attente permettant de temporiser les événements pour les exécuter dans l’ordre.
      Tu as raison, c'était aussi mon intuition ! Mais, ce n'est pas tout à fait dans le désordre mais plutôt en asynchrone...
      Et avec Korg, il y a bien d'autres mystères à élucider. J'en ai percé quelques uns mais il m'en reste suffisamment pour occuper mes loisirs !!

      Merci pour ton message, bonne soirée...

      Commentaire


      • #4
        Ca doit fonctionner pareil pour les Program Change permettant de changer l'instrument d'une piste.
        Il me semble que ca fonctionne comme cela sur beaucoup d'instruments MIDI. D'ailleurs, à l'époque où je récupérais des fichiers MIDI et les testais sur un QY70 en Midi XG, la plupart laissaient une mesure voir plus en début de morceau après le Reset GM/XG pour justement éviter de saturer l'instrument de messages MIDI.
        Yamaha : Montage 7 White - MU100R - (SY35) - (QY70) - (VL70m/WX5)
        Korg : M3/Radias - Pa600

        Commentaire


        • #5
          La file d'attente évoquée par Floyer existe très certainement. Mais je crois qu'il en existe plutôt deux ! Une pour les actions internes au PA et un autre pour les messages provenant de l'extérieur.

          En effet, si l'on envoie sur l'entrée midi du PA les messages équivalents à la commande "cf, 02, 83" (une cinquantaine de commandes MIDI), au lieu de cette commande de changement de variation, suivis de la commande de volume, tout se passe correctement, la commande de volume est bien exécutée en bon ordre.

          Bon week-end.

          Commentaire

          Chargement...
          X