1. Accueil
  2. Docs
  3. Documentation Karaboss
  4. Le MIDI
  5. Exporter
  6. Structure des fichiers csv

Structure des fichiers csv

STRUCTURE D’ENREGISTREMENT DES FICHIERS CSV

Source : John Walker (site fourmilab)
Chaque enregistrement dans la représentation CSV d’un MIDI contient au moins trois champs :

Track :
Champ numérique identifiant la piste à laquelle appartient cet enregistrement. Les pistes de données MIDI sont numérotées à partir de 1. La piste 0 est réservée aux enregistrements d’en-tête, d’information et de fin de fichier.

Time :
Heure absolue, en termes d’horloges MIDI, à laquelle cet événement se produit. Les méta-événements pour lesquels le temps n’est pas significatif (par exemple, le titre de la chanson, les informations de copyright, etc.) ont un temps absolu de 0.

Type :
Nom identifiant le type de l’enregistrement.
Les types d’enregistrement sont des textes composés de lettres majuscules et minuscules et du trait de soulignement (« _ »), qui ne contiennent pas d’espace et ne sont pas entre guillemets.
Karaboss ne tient pas compte des majuscules et des minuscules dans le champ Type ; les spécifications « Note_on_c », “Note_On_C” et « NOTE_ON_C » sont considérées comme identiques.

Les enregistrements du fichier CSV sont triés d’abord par numéro de piste, puis par heure. Les enregistrements qui ne sont pas dans l’ordre seront rejetés et un message d’erreur sera envoyé par Karaboss.
Les trois champs obligatoires sont suivis de champs de paramètres qui dépendent du type ; certains types ne prennent aucun paramètre. Chaque type et ses champs de paramètres sont décrits ci-dessous.

Toute ligne dont le caractère initial non vide est « # » ou « ; » est ignorée ; ces deux délimiteurs peuvent être utilisés pour introduire des commentaires dans un fichier CSV. Seuls les commentaires sur toute la ligne sont autorisés ; vous ne pouvez pas utiliser ces délimiteurs pour terminer l’analyse d’un enregistrement de données normal. Les lignes entièrement vides sont ignorées.

Structure du fichier d’enregistrement

0, 0, Header, format, nTracks, division

Le premier enregistrement d’un fichier MIDI CSV est toujours l’enregistrement Header. Les paramètres sont les suivants : format : le type de fichier MIDI (0, 1 ou 2), nTracks : le nombre de pistes dans le fichier, et division : le nombre d’impulsions d’horloge par quart de note. Les champs Track et Time sont toujours à zéro.

0, 0, End_of_file

Le dernier enregistrement d’un fichier MIDI CSV est toujours un enregistrement End_of_file. Ses champs Track et Time sont toujours à zéro.
Track, 0, Start_track
Un enregistrement Start_track marque le début d’une nouvelle piste, le champ Track indiquant le numéro de la piste. Tous les enregistrements compris entre l’enregistrement Start_track et l’enregistrement End_track correspondant ont la même zone Track.

Track, Time, End_track

Un enregistrement End_track marque la fin des événements pour la piste spécifiée. Le champ Time indique la durée totale de la piste, qui sera identique à l’heure du dernier événement avant la End_track.

File Meta-Events

Les événements suivants se produisent au sein des pistes MIDI et spécifient divers types d’informations et d’actions. Ils peuvent apparaître à n’importe quel moment de la piste. Ceux qui fournissent des informations générales pour lesquelles le temps n’est pas pertinent apparaissent généralement au début de la piste avec le temps zéro, mais ce n’est pas une obligation.

Nombre de ces méta-événements comportent un argument de type chaîne de texte. Les chaînes de texte sont éditées sous forme d’enregistrements CSV entourés de guillemets doubles ASCII ( » ). Les caractères de guillemets intégrés dans les chaînes sont représentés par deux guillemets consécutifs. Les caractères non graphiques du jeu de caractères latins ISO 8859-1 sont représentés par une barre oblique inverse suivie de leur code octal à trois chiffres. Deux barres obliques inverses consécutives indiquent une barre oblique inversée littérale dans la chaîne. Les chaînes dans les fichiers MIDI peuvent être extrêmement longues, théoriquement jusqu’à 228-1 caractères ; les programmes qui traitent les fichiers CSV MIDI doivent prendre soin d’éviter les débordements de tampon ou la troncature résultant de lignes contenant de longues chaînes de caractères. Tous les méta-événements qui prennent un argument texte sont identifiés par un suffixe « _t ».

Track, Time, Title_t, Text

Le texte spécifie le titre de la piste ou de la séquence. Le premier méta-événement Title dans un fichier MIDI de type 0 ou dans la première piste d’un fichier de type 1 donne le nom de l’œuvre. Les méta-événements Title suivants dans d’autres pistes donnent les noms de ces pistes.

Track, Time, Copyright_t, Text

Le texte spécifie les informations de copyright pour la séquence. Il est généralement placé au temps 0 de la première piste de la séquence.

Track, Time, Instrument_name_t, Text

Le texte nomme l’instrument destiné à jouer le contenu de cette piste. Il est généralement placé au temps 0 de la piste. Notez que ce méta-événement est simplement une description ; les synthétiseurs MIDI ne sont pas obligés (et rarement, voire jamais) d’y répondre. Ce méta-événement est particulièrement utile dans les séquences préparées pour des synthétiseurs qui ne sont pas conformes au jeu de patchs General MIDI, car il documente l’instrument prévu pour la piste lorsque la séquence est utilisée sur un synthétiseur avec un jeu de patchs différent.

Track, Time, Marker_t, Text

Le texte marque un point de la séquence qui se produit au moment donné, par exemple « Troisième mouvement ».

Track, Time, Cue_point_t, Text

Le texte identifie le point de synchronisation qui se produit à l’heure spécifiée, par exemple « La porte claque ».

Track, Time, Lyric_t, Text

Le texte est un texte destiné à être chanté à l’heure donnée. Les paroles sont souvent décomposées en syllabes séparées afin de les aligner plus précisément sur la séquence.

Track, Time, Text_t, Text

Ce méta-événement fournit une chaîne de texte arbitraire associée à la piste et à l’heure. Il peut être utilisé pour des informations textuelles qui n’entrent pas dans l’une des catégories plus spécifiques indiquées ci-dessus.

Track, 0, Sequence_number, Number

Ce méta-événement spécifie un numéro de séquence compris entre 0 et 65535, utilisé pour organiser plusieurs pistes dans un fichier MIDI de type 2, ou pour identifier la séquence dans laquelle une collection de fichiers MIDI de type 0 ou 1 doit être jouée. Le méta-événement Sequence_number doit se produire à l’instant zéro, au début de la piste.

Track, Time, MIDI_port, Number

Ce méta-événement spécifie que les événements suivants de la piste doivent être envoyés au port MIDI (bus) numéro, entre 0 et 255. Ce méta-événement apparaît généralement au début d’une piste avec le temps zéro, mais il peut apparaître à l’intérieur d’une piste si le besoin s’en fait sentir de changer de port pendant la lecture de la piste.

Track, Time, Channel_prefix, Number

Ce méta-événement spécifie le canal MIDI auquel se rapportent les méta-événements suivants et les événements exclusifs au système. Le numéro de canal spécifie un canal MIDI compris entre 0 et 15. En fait, le numéro peut aller jusqu’à 255, mais les conséquences de la spécification d’un numéro de canal supérieur à 15 ne sont pas définies.

Track, Time, Time_signature, Num, Denom, Click, NotesQ

La signature temporelle, le taux de clics du métronome et le nombre de 32e notes par quart de note MIDI (24 temps d’horloge MIDI) sont donnés par les arguments numériques. Num donne le numérateur de la signature temporelle telle qu’elle est spécifiée sur les partitions. Denom spécifie le dénominateur comme une puissance négative de deux, par exemple 2 pour une noire, 3 pour une croche, etc. Click donne le nombre d’horloges MIDI par clic de métronome, et NotesQ le nombre de 32e notes dans le temps nominal de la noire MIDI de 24 horloges (8 pour la définition par défaut de la noire MIDI).

Track, Time, Key_signature, Key, Major/Minor

La signature de la tonalité est spécifiée par la valeur numérique Key, qui est 0 pour la tonalité de C, une valeur positive pour chaque dièse au-dessus de C, ou une valeur négative pour chaque bémol en dessous de C, donc dans l’intervalle inclusif de -7 à 7. Le champ Major/Minor est une chaîne de caractères entre guillemets qui sera majeure pour une tonalité majeure et mineure pour une tonalité mineure.

Track, Time, Tempo, Number

Le tempo est spécifié comme le nombre de microsecondes par quart de note, entre 1 et 16777215. Une valeur de 500 000 correspond à 120 noires (« battements ») par minute. Pour convertir les battements par minute en valeur de tempo, prenez le quotient de la division de 60 000 000 par les battements par minute.

Track, 0, SMPTE_offset, Hour, Minute, Second, Frame, FracFrame

Ce méta-événement, qui doit se produire avec un Time zéro au début d’une piste, spécifie le code temporel SMPTE auquel la lecture doit commencer. Le champ FracFrame indique la durée fractionnelle de la trame (0 à 99).

Track, Time, Sequencer_specific, Length, Data, …

Le méta-événement Sequencer_specific est utilisé pour stocker des données propres au fournisseur dans un fichier MIDI. Les enregistrements Sequencer_specific peuvent être très longs ; les programmes qui traitent les fichiers CSV MIDI doivent veiller à se protéger contre les débordements de mémoire tampon et la troncature de ces enregistrements.

Track, Time, Unknown_meta_event, Type, Length, Data, …

Si Karaboss rencontre un méta-événement avec un code non défini par la spécification standard du fichier MIDI, il produit un enregistrement de méta-événement inconnu dans lequel Type donne le code numérique du type de méta-événement, Longueur le nombre d’octets de données dans le méta-événement, qui peut être n’importe quelle valeur entre 0 et 228-1, suivi par les octets de données. Karaboss reconstruira les méta-événements inconnus avec le même code de type et le même contenu que dans le fichier MIDI original.

Channel Events

Ces événements sont la « viande et les pommes de terre » des fichiers MIDI : les notes et les modificateurs réels qui commandent aux instruments de jouer la musique. Le premier argument de chaque événement est un numéro de canal MIDI, suivi de paramètres spécifiques à l’événement. Pour permettre aux programmes qui traitent les fichiers CSV de les distinguer facilement des méta-événements, les noms des événements de canal ont tous un suffixe « _c ».

Track, Time, Note_on_c, Channel, Note, Velocity

Envoyer une commande pour jouer la note spécifiée (le do du milieu est défini comme la note numéro 60 ; toutes les autres notes sont relatives dans la spécification MIDI, mais la plupart des instruments se conforment à la gamme bien tempérée) sur le canal donné avec une vélocité (0 à 127). Un événement Note_on_c avec une vélocité de zéro est équivalent à un événement Note_off_c.

Track, Time, Note_off_c, Channel, Note, Velocity

Arrête la lecture de la note spécifiée sur le canal donné. La vélocité devrait être nulle, mais on ne sait jamais ce que l’on peut trouver dans un fichier MIDI.

Track, Time, Pitch_bend_c, Channel, Value

Envoyer une commande de pitch bend de la valeur spécifiée au canal donné. La valeur de pitch bend est un entier non signé de 14 bits et doit donc être comprise entre 0 et 16383. La valeur 8192 indique qu’il n’y a pas de pitch bend ; la valeur 0 correspond au pitch bend le plus bas et la valeur 16383 au pitch bend le plus élevé. Le changement réel de hauteur que ces valeurs produisent n’est pas spécifié.

Track, Time, Control_c, Channel, Control_num, Value

Régler le numéro de contrôle du contrôleur sur le canal donné à la valeur spécifiée. Control_num et Value doivent être compris entre 0 et 127. L’affectation des valeurs Control_num aux effets diffère d’un instrument à l’autre. La spécification General MIDI définit la signification des contrôleurs 1 (modulation), 7 (volume), 10 (pan), 11 (expression) et 64 (sustain), mais tous les instruments et patchs ne répondent pas à ces contrôleurs. Les instruments qui prennent en charge ces capacités attribuent généralement la réverbération au contrôleur 91 et le chorus au contrôleur 93.

Track, Time, Program_c, Channel, Program_num

Fait passer le canal spécifié au programme (patch) Program_num, qui doit être compris entre 0 et 127. Le programme ou le patch sélectionne l’instrument et les paramètres associés que le canal émulera. La spécification General MIDI fournit un ensemble standard d’instruments, mais les synthétiseurs sont libres d’implémenter d’autres ensembles d’instruments et beaucoup permettent à l’utilisateur de créer des patchs personnalisés et de les assigner à des numéros de programme.

Apparemment, en raison du scepticisme des fabricants d’instruments quant à la capacité des musiciens à gérer le chiffre zéro, de nombreux instruments numérotent les patchs de 1 à 128 plutôt que de 0 à 127, comme c’est le cas dans les fichiers MIDI. Lorsque vous interprétez les valeurs Program_num, notez qu’elles peuvent être inférieures d’une unité aux numéros de patchs indiqués dans la documentation d’un instrument.

Track, Time, Channel_aftertouch_c, Channel, Value

Lorsqu’une touche est maintenue enfoncée après avoir été pressée, certains synthétiseurs envoient la pression, de façon répétée si elle varie, jusqu’à ce que la touche soit relâchée, mais ne distinguent pas la pression sur les différentes touches jouées simultanément et maintenues enfoncées. C’est ce qu’on appelle l’aftertouch « monophonique » ou « canal » (ce dernier terme indiquant qu’il s’applique au canal dans son ensemble, et non aux numéros de notes individuels sur ce canal). La valeur de pression (0 à 127) s’applique généralement à la dernière note jouée, mais il n’est pas garanti que les instruments se comportent de cette manière.

Track, Time, Poly_aftertouch_c, Channel, Note, Value

Les synthétiseurs polyphoniques (capables de jouer plusieurs notes simultanément sur un seul canal), fournissent souvent un aftertouch indépendant pour chaque note. Cet événement spécifie la valeur de pression de l’aftertouch (0 à 127) pour la note spécifiée sur le canal donné.

System Exclusive Events

Les événements exclusifs au système permettent de stocker des informations spécifiques au fournisseur et de les transmettre à ses produits.

Track, Time, System_exclusive, Length, Data, …

Les octets de longueur des données (0 à 255) sont envoyés au moment spécifié au canal MIDI défini par l’événement Channel_prefix le plus récent sur la piste, en tant que message System Exclusive. Notez que la longueur peut être une valeur comprise entre 0 et 228-1. Les programmes qui traitent les fichiers CSV MIDI doivent veiller à se protéger contre les débordements de mémoire tampon et la troncature de ces enregistrements.

Track, Time, System_exclusive_packet, Length, Data, …

Les octets de longueur des données (0 à 255) sont envoyés au moment spécifié au canal MIDI défini par l’événement Channel_prefix le plus récent sur la piste. Les octets de données sont simplement envoyés au bus MIDI sans aucun préfixe. Ce message est utilisé par les appareils MIDI qui décomposent les longs messages exclusifs du système en petits paquets, espacés dans le temps pour éviter de surcharger leurs modestes microcontrôleurs. Notez que la longueur peut être une valeur comprise entre 0 et 228-1. Les programmes qui traitent les fichiers CSV MIDI doivent veiller à se protéger contre les débordements de mémoire tampon et la troncature de ces enregistrements.

Exemples

Le fichier CSV suivant définit le motif de cinq notes du film « Close Encounters of the Third Kind » à l’aide d’un patch d’orgue du jeu d’instruments General MIDI. Lorsqu’il est traité par Karaboss et envoyé à un synthétiseur conforme au General MIDI, la séquence est jouée.

0, 0, Header, 1, 2, 480
1, 0, Start_track
1, 0, Title_t, "Close Encounters"
1, 0, Text_t, "Sample for MIDIcsv Distribution"
1, 0, Copyright_t, "This file is in the public domain"
1, 0, Time_signature, 4, 2, 24, 8
1, 0, Tempo, 500000
1, 0, End_track
2, 0, Start_track
2, 0, Instrument_name_t, "Church Organ"
2, 0, Program_c, 1, 19
2, 0, Note_on_c, 1, 79, 81
2, 960, Note_off_c, 1, 79, 0
2, 960, Note_on_c, 1, 81, 81
2, 1920, Note_off_c, 1, 81, 0
2, 1920, Note_on_c, 1, 77, 81
2, 2880, Note_off_c, 1, 77, 0
2, 2880, Note_on_c, 1, 65, 81
2, 3840, Note_off_c, 1, 65, 0
2, 3840, Note_on_c, 1, 72, 81
2, 4800, Note_off_c, 1, 72, 0
2, 4800, End_track
0, 0, End_of_file

Comment pouvons-nous aider ?

Laisser un commentaire