Forum Programmation.autre Format de fichier TSE3

Posté par (page perso) . Licence CC by-sa
Tags : aucun
1
25
août
2013

Bonjour à tous

J'ai testé le code melody pour arduino :
http://www.arduino.cc/en/Tutorial/Melody

Je me suis dis que ça pourrait être sympa si on pouvait utiliser des fichiers midi. Après quelques recherches j'ai trouvé le format tse3, qui enregistre les données dans un format comme celui là :

 Events
            {
                0:12/26/0/0/0
                0:9/76/64/0/0-16:8/76/64/0/0        # E-6
                0:11/0/0/0/0
                24:9/76/64/0/0-40:8/76/64/0/0        # E-6
                72:9/76/64/0/0-88:8/76/64/0/0        # E-6
                120:9/72/64/0/0-136:8/72/64/0/0        # C-6
                144:9/76/64/0/0-160:8/76/64/0/0        # E-6
                192:9/79/64/0/0-208:8/79/64/0/0        # G-6
                384:9/72/64/0/0-400:8/72/64/0/0        # C-6
                ....

A droite on peut voir les notes, donc ça facile, mais à gauche je ne connais pas trop à quoi ça correspond…

http://tse3.sourceforge.net/doc/TSE3MDL.html

Là ils disent : "There is one event per line in the form TIME:TOP/BOTTOM where TIME, TOP and BOTTOM are integer values. "

Time je peux comprendre, mais à quoi correspondent les top et bottom ? Quelqu'un a une idée ?

Merci d'avance.

  • # abc

    Posté par (page perso) . Évalué à 2.

    désolé je ne vois pas, et ce projet semble un peu vieux.

    Par contre je peux te rediriger vers le format abc :

    http://abcnotation.com/software

    Il y a beaucoup d'outils unix pour les utiliser, et on peut convertir facilement du midi vers abc avec le programme abcmidi, ensuite comme c'est écrit dans le genre |BEE dE2|BAG FG2| ça sera plus facile à analyser dans ton logiciel.

    ps : par rapport au code que tu présentes, tu dis qu'à droite on voit les notes. Je pense plutôt que c'est un commentaire et les notes sont plutôt dans le code à gauche. Par exemple pour E6 ça correspond toujours à gauche à 9/76 puis 8/76 et C6 à 9/72 puis 8/72

    « I approve of any development that makes it more difficult for governments and criminals to monopolize the use of force. » Eric Raymond

  • # Mauvaise section

    Posté par (page perso) . Évalué à 6. Dernière modification le 25/08/13 à 17:00.

    Là ils disent : "There is one event per line in the form TIME:TOP/BOTTOM where TIME, TOP and BOTTOM are integer values. "

    Time je peux comprendre, mais à quoi correspondent les top et bottom ? Quelqu'un a une idée ?

    Tu ne regardes pas la bonne section de la documentation, le format de ces lignes est décrit dans la section « Phrase chunk », juste en-dessous :

    There is one event per line in the form TIME:STATUS/DATA1/DATA2/CHANNEL/PORT where all values are integers. STATUS contains the MidiCommand status nybble, DATA1 and DATA2 contain the data bytes (which will not have bit 7 set), CHANNEL contains a value from 0-15 and PORT the computer MIDI port number to send the data on.

    Ainsi :

    0:12/26/0/0/0

    est un message Program Change (STATUS = 12), où 26 est le numéro de programme ;

    0:9/76/64/0/0-16:8/76/64/0/0 # E-6

    est un message Note On, où 76 est la note à émettre et 64 sa vélocité, suivi du message Note Off correspondant

    Tous ces messages étant émis sur le canal MIDI 0, sur le port MIDI 0.

    • [^] # Re: Mauvaise section

      Posté par (page perso) . Évalué à 1.

      Merci pour les réponses

      Pourrais-tu m'expliquer comment passer de 76 à la note et ce qu'est la vélocité ?

      J'ai fais un essaie en ne me basant que sur les temps et la note qui est en commentaire, mais j'ai du créer un facteur temps pour ralentir le tempo. Donc si je pouvais partir du 76, enfin des vrai données et pas des commentaires ça serait plus propre, et je suppose que la vélocité doit être lié à ce facteur temps que j'ai du créer.

      "si c'est idiot, mais que ça marche, c'est que ce n'est pas idiot."

      • [^] # Re: Mauvaise section

        Posté par (page perso) . Évalué à 4.

        Pourrais-tu m'expliquer comment passer de 76

        Il suffit de savoir que 60 est le middle C, normalement C₄. 61 est C♯₄, 62 est D₄, 63 est D♯₄, etc. 76 devrait être E₅, mais apparemment l’auteur des commentaire considère que le middle C est C₅ et non C₄.

        ce qu'est la vélocité ?

        C’est une valeur de 0 à 127 indiquant une sorte « d’intensité » avec laquelle la note doit être jouée : plus la vélocité est élevée, plus la note doit être jouée avec force (fortissimo, en quelque sorte). Sur les contrôleurs MIDI à clavier, la vélocité traduit généralement la vitesse avec laquelle le musicien enfonce la touche.

        j'ai du créer un facteur temps pour ralentir le tempo.

        Je ne sais pas comment tu as créé ce facteur temps, mais normalement tu obtiens le tempo correct de la façon suivante :

        Dans l’en-tête du fichier, il doit y avoir un champ « PPQN » (Pulses Per Quarter Note) indiquant le nombre de « battements d’horloge » par noire. Tous les temps dans le reste du fichier sont exprimés en battements d’horloge. Par exemple :

        0:9/76/64/0/0-16:8/76/64/0/0

        le message Note On est émis à t=0, et le message Note Off correspondant à t=16, soit 16 battements d’horloge plus loin. Si par exemple PPQN vaut 64 (64 battements d’horloge par noire), alors cette note a une durée de 16/64 ou 1/4 de noire, soit une double croche.

        Ne reste plus qu’à connaître le tempo proprement dit. Il est indiqué par un ou plusieurs champs « TEMPO », exprimé sous la forme du nombre de microsecondes par noire (par défaut normalement dans un fichier MIDI, le tempo est de 120 noires par minutes, donc une noire dure 500 000 microsecondes). Dans l’exemple ci-dessus, la note doit donc sonner pendant 125 000 microsecondes.


        Le format TSE3MDL semble être une transcription directe, en mode texte, du format binaire SMF (Standard MIDI File). Donc tu devrais trouver la réponse à la plupart de tes questions dans la documentation des standards MIDI et SMF (source officielle, et une très bonne référence officieuse).

        • [^] # Re: Mauvaise section

          Posté par (page perso) . Évalué à 1.

          Merci pour toutes ces précisions, je vais essayer d'arranger mon code pour le rendre plus "propre".

          "si c'est idiot, mais que ça marche, c'est que ce n'est pas idiot."

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.