♪ - Exprimez-vous librement sur des sujets divers (pas forcément en rapport avec le sujet du site).
RĂ©pondre
   - Hibou57 -
Membre ♪
Messages : 84
Enregistré le : 24/01/2007 13:39:44
Localisation : France
Contact :

    MIDI : format des Ă©vĂ©nements SysEx

Message  { par Hibou57

Bonjour,

Je poste ce message dans les sujets libres, pour ne déranger personnes dans les autres sections apparemment plutôt dédiées à la composition.

J’ai posté ce même message sur un autre forum (la section Créations de Ubuntu-fr), mais je n'ai pas eu de réponse.

En résumé préalable : je me demande si la sérialisation des messages SysEx doit être la même ou pas, selon que l’on a faire à un fichier MIDI ou à une communication avec un périphérique MIDI… les informations que j’ai sur le formats de la sérialisation des messages SysEx, sont contradictoires.

Tout d’abord, les deux références que j’utilise.

Pour le format des fichiers MIDI : Standard MIDI-File Format Spec. 1.1 (PDF).
Pour le format des messages MIDI : The MIDI Specification.

Je cale avec les messages SysEx, dont le format me parait contradictoire d’une spécification à l’autre.

Tout d’abord, le premier documents, à propos du format des fichiers MIDI, présente le format des messages SysEx comme suit :

Code : Tout sélectionner

F0 <length> <bytes to be transmitted after F0>
Et indique “The length is stored as a variable-length quantity.”.

Le second document parle lui aussi des message SysEx, et dit
There can be any number of data bytes inbetween the initial 0xF0 and the final 0xF7. The most important is the first data byte (after the 0xF0), which should be a Manufacturer's ID.
Deux contradiction ici : le second parle d'un Manufacturer ID à l'endroit ou l'autre parle d'un paramètre Length. On ne peut pas avoir deux choses différentes au même endroit.

Puis une seconde contradiction : le premier document dit que le paramètre Length est encodé comme un Variable Length Quantity, et il se trouve que cet encodage n’est pas compatible avec l’encodage des données dans un message MIDI, dont tous les bit #8 doivent être à zéro. En effet, l’encodage Variable Length Quantity, qui est normalement utilisé pour les Delta Time des fichiers MIDI (ça ne fait pas partie des message MIDI eux-même, ça ne se trouve que dans les fichiers MIDI), donne la valeur 1 au 8-ième bit de chaque octet (ce qui le ferait confondre avec l’octet de statu d’un message MIDI), sauf pour le dernier, qui est à zéro.

Je serais donc tenté de dire que les message SysEx, soit ne peuvent pas contenir de paramètre Length encodé comme indiqué, ou alors soit que ce paramètre Length ne peut pas faire plus de 1 octet, auquel cas, cet unique octet a son bit #8 à zéro, ce qui le rend compatible avec l’encodage prévu pour les données des messages MIDI (dans ce cas alors, la longueur est limitée à l’intervalle 0..127).

Mais cela ne résous encore pas le problème du champ Manufacturer ID, que le deuxième document donne en lieu et place du champ Length, qu’il n’introduit pas du tout.

Ou alors les messages SysEx sont-ils encodĂ©s diffĂ©remment selon qu’ils apparaissent dans un fichier MIDI ou dans un flux MIDI issue d’un pĂ©riphĂ©rique MIDI ? 
          - Compositeur .org -       Forum des Compositeurs : Musique et Composition
   - Hibou57 -
Membre ♪
Messages : 84
Enregistré le : 24/01/2007 13:39:44
Localisation : France
Contact :

   

Message  { par Hibou57

J'ai peut-être une réponse. Dans Google Books, j'ai trouvé ceci : SysEx Messages in SMF.

Le titre de la section est déjà intéressant, par le fait qu’il souligne bien qu’il s’agit des SysEx, dans les fichiers MIDI en particulier, et voici ce qui en est dit :
In addition to delta time, there is another difference between the format of a regular SysEx message and the one stored as an SFM track event […] a variable-length value representing the length (in bytes) of the data to follow in inserted immediately after the FO byte […]
.

Ça répond à mes doutes et interrogations, en confirmant que les messages SysEx, ont bien un format particulier quand ils apparaissent dans les fichiers MIDI.

Mais c’est extrait d’un livre papier, en partie consultable sur Google Books. J’aurais préféré une référence plus formelle. Si quelqu’un(e) en connait une, I would welcome a link.

-- EDIT -- En fait, en lisant entre les lignes du premier document, “Standard MIDI-File Format Spec. 1.1”, on peut également voir une réponse. Il dit :
For instance, the transmitted message F0 43 12 00 07 F7 would
be stored in a MIDI File as F0 05 43 12 00 07 F7.
Une différence est explicitement (mais trop discrètement) faite là aussi, entre un SysEx transmis entre des périphériques MIDI, et un SysEx stocké dans un fichier MIDI.

Bon, c’est complet, plus aucun doute maintenant. 
          - Compositeur .org -       Forum des Compositeurs : Musique et Composition
RĂ©pondre