Outils pour utilisateurs

Outils du site


issue191:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
issue191:python [2023/04/04 18:34] andre_domenechissue191:python [2023/04/05 11:35] (Version actuelle) auntiee
Ligne 24: Ligne 24:
 MIDI supports a total of 128 notes which range from C five octaves below middle C to G ten octaves above middle C. It also supports 16 channels (for 16 separate devices), as well as 128 patches (or programs), MIDI clock pulses, and timing sync signals between the various pieces of equipment. In addition to all of that, there are System Exclusive (SysEx) messages that are designed to send messages specific to a manufacturer's equipment that contain a manufacturer specific ID and commands that can be safely ignored by devices not of the manufacturer's product list. You can see that MIDI is a rather busy protocol.** MIDI supports a total of 128 notes which range from C five octaves below middle C to G ten octaves above middle C. It also supports 16 channels (for 16 separate devices), as well as 128 patches (or programs), MIDI clock pulses, and timing sync signals between the various pieces of equipment. In addition to all of that, there are System Exclusive (SysEx) messages that are designed to send messages specific to a manufacturer's equipment that contain a manufacturer specific ID and commands that can be safely ignored by devices not of the manufacturer's product list. You can see that MIDI is a rather busy protocol.**
  
-Lorsque vous appuyez sur une touche d'un clavier MIDI, le contrôleur du clavier envoie un message d'événement qui indique non seulement la hauteur de cette touche, mais aussi invite le module sonore (synthé) à commencer à jouer la note. Lorsque vous relâchez la touche, un autre message indique au module de son (synthé) d'arrêter de jouer la note. Il existe également des messages correspondant à la vélocité (la force avec laquelle la touche a été « frappée »), à l'aftertouch (la force avec laquelle la touche a été maintenue enfoncée), au pitch bend, au panoramique, à la modulation, au volume et à toute autre fonction contrôlable.+Lorsque vous appuyez sur une touche d'un clavier MIDI, le contrôleur du clavier envoie un message d'événement qui indique non seulement le ton de cette touche, mais aussi invite le module sonore (synthé) à commencer à jouer la note. Lorsque vous relâchez la touche, un autre message indique au module de son (synthé) d'arrêter de jouer la note. Il existe également des messages correspondant à la vélocité (la force avec laquelle la touche a été « frappée »), à l'aftertouch (la force avec laquelle la touche a été maintenue enfoncée), au pitch bend, au panoramique, à la modulation, au volume et à toute autre fonction contrôlable.
  
 MIDI prend en charge un total de 128 notes qui vont du do cinq octaves en dessous du do moyen au sol dix octaves au-dessus du do moyen. Il prend également en charge 16 canaux (pour 16 appareils distincts), ainsi que 128 patchs (ou programmes), des impulsions d'horloge MIDI et des signaux de synchronisation entre les différents équipements. En plus de tout cela, il existe des messages exclusifs au système (SysEx) qui sont conçus pour envoyer des messages spécifiques à l'équipement d'un fabricant et qui contiennent un identifiant spécifique au fabricant et des commandes qui peuvent être ignorées en toute sécurité par les appareils qui ne font pas partie de la liste de produits du fabricant. Vous pouvez constater que MIDI est un protocole plutôt chargé. MIDI prend en charge un total de 128 notes qui vont du do cinq octaves en dessous du do moyen au sol dix octaves au-dessus du do moyen. Il prend également en charge 16 canaux (pour 16 appareils distincts), ainsi que 128 patchs (ou programmes), des impulsions d'horloge MIDI et des signaux de synchronisation entre les différents équipements. En plus de tout cela, il existe des messages exclusifs au système (SysEx) qui sont conçus pour envoyer des messages spécifiques à l'équipement d'un fabricant et qui contiennent un identifiant spécifique au fabricant et des commandes qui peuvent être ignorées en toute sécurité par les appareils qui ne font pas partie de la liste de produits du fabricant. Vous pouvez constater que MIDI est un protocole plutôt chargé.
Ligne 41: Ligne 41:
 I then decided to throw together a quick program that will look for certain messages,capture that data, and finally print them out. These messages are called meta messages and carry information about the name of the track (which often holds the name of the instrument, but not always), the tempo of the song, the key signature, the time signature, and more.** I then decided to throw together a quick program that will look for certain messages,capture that data, and finally print them out. These messages are called meta messages and carry information about the name of the track (which often holds the name of the instrument, but not always), the tempo of the song, the key signature, the time signature, and more.**
  
-J'ai cherché sur Internet des bibliothèques Python qui gèrent MIDI et j'en ai trouvé un certain nombre. La meilleure semble être un paquetage appelé Mido. Le dépôt github se trouve à l'adresse https://github.com/mido/mido.+J'ai cherché sur Internet des bibliothèques Python qui gèrent MIDI et j'en ai trouvé un certain nombre. La meilleure semble être un paquet appelé Mido. Le dépôt github se trouve à l'adresse https://github.com/mido/mido.
  
 python3 -m pip install mido python3 -m pip install mido
Ligne 82: Ligne 82:
 import shared import shared
  
-Remarquez que j'importe un fichier appelé shared. Si vous n'êtes pas familier avec cette astuce, il s'agit simplement d'un fichier vide nommé shared.py qui est utilisé pour limiter le nombre de globales utilisées dans un programme et pour partager des données variables entre différents modules du programme. Nous n'avons qu'un seul module, mais c'est une astuce intéressante, alors je l'ai utilisée cette fois-ci.+Remarquez que j'importe un fichier appelé shared. Si vous ne connaissez pas cette astuce, il s'agit simplement d'un fichier vide nommé shared.py qui est utilisé pour limiter le nombre de globales utilisées dans un programme et pour partager des données variables entre différents modules du programme. Nous n'avons qu'un seul module, mais c'est une astuce intéressante, alors je l'ai utilisée cette fois-ci.
  
  
Ligne 101: Ligne 101:
 Ensuite, nous avons la fonction principale appelée work_it() montrée en haut à droite. Ensuite, nous avons la fonction principale appelée work_it() montrée en haut à droite.
  
-Nous commençons par appeler une fonction appelée ports que mido utilise pour déterminer où envoyer les données MIDI, en supposant que nous utilisions cette partie de la bibliothèque. Ce n'est pas le casj'envoie les données directement à Fluidsynth, mais nous verrons cela plus tard.+Nous commençons par appeler une fonction nommée ports que mido utilise pour déterminer où envoyer les données MIDI, en supposant que nous utilisions cette partie de la bibliothèque. Ce n'est pas le cas et j'envoie les données directement à Fluidsynth, mais nous verrons cela plus tard.
  
 Ensuite, nous définissons le nom du fichier MIDI qui nous intéresse, et nous le passons à la fonction MidiFile de mido pour obtenir en retour un objet appelé mid. Ensuite, nous définissons le nom du fichier MIDI qui nous intéresse, et nous le passons à la fonction MidiFile de mido pour obtenir en retour un objet appelé mid.
Ligne 111: Ligne 111:
 setup_vars() setup_vars()
  
-Ensuite, nous envoyons l'objet mid à la fonction parse_midi_file qui va récupérer chaque messageet si ce message est un méta-message, il va récupérer l'information. Seuls certains des messages contiennent vraiment l'information que je veux, mais je regarde tous les méta-messages qui arrivent.+Ensuite, nous envoyons l'objet mid à la fonction parse_midi_file qui va récupérer chaque message et si ce message est un méta-message, il va récupérer l'information. Seuls certains des messages contiennent vraiment l'information que je veux, mais je regarde tous les méta-messages qui arrivent.
  
  
Ligne 156: Ligne 156:
 mesg="('track_name', name='Electric Piano', time=0)" mesg="('track_name', name='Electric Piano', time=0)"
  
-Notez que si le nom de la piste contient le nom de cette piste, il ne contient pas nécessairement le nom de l'instrument utilisé par la police de son. Cela provient d'un message non méta appelé program_change. De plus, vous devez également vérifier un autre message appelé control_change, juste au cas où l'instrument se trouve dans une banque autre que la banque 0. (Je sais que cela n'a pas beaucoup de sens sans un grand nombre d'explications sur le format MIDI et le format soundfont également. Nous y reviendrons peut-être dans un prochain article).+Notez que si le nom de la piste contient le nom de cette piste, il ne contient pas nécessairement le nom de l'instrument utilisé par la soundfont (banque de son). Cela provient d'un message non méta appelé program_change. De plus, vous devez également vérifier un autre message appelé control_change, juste au cas où l'instrument se trouve dans une banque autre que la banque 0. (Je sais que cela n'a pas beaucoup de sens sans un grand nombre d'explications sur le format MIDI et le format soundfont également. Nous y reviendrons peut-être dans un prochain article).
  
 Quoi qu'il en soit, vous pouvez voir que je convertis le message en une chaîne, puis que j'analyse cette chaîne pour en extraire les informations qui m'intéressent. Quoi qu'il en soit, vous pouvez voir que je convertis le message en une chaîne, puis que j'analyse cette chaîne pour en extraire les informations qui m'intéressent.
  
-Un autre message qui m'intéresse est le tempo ou le nombre de battements par minute du morceau. Le format MIDI spécifie que le tempo est sauvegardé en tant que nombre de microsecondes par quart de note. Heureusement, mido fournit une fonction appelée tempo2bpm pour convertir cette information en information « humainement lisible » (en bas à gauche).+Un autre message qui m'intéresse est le tempo ou le nombre de battements par minute du morceau. Le format MIDI spécifie que le tempo est sauvegardé en tant que nombre de microsecondes par noire. Heureusement, mido fournit une fonction appelée tempo2bpm pour convertir cette information en information « humainement lisible » (en bas à gauche).
  
  
Ligne 171: Ligne 171:
 After I got the parsing function done, I threw together a GUI version of the program that looks something like that shown bottom left.** After I got the parsing function done, I threw together a GUI version of the program that looks something like that shown bottom left.**
  
-La signature temporelle est également un message qui m'intéresse. Il s'agit normalement d'une fraction qui indique combien de notes d'une valeur particulière sont contenues dans chaque mesure. Par exemple, si la signature temporelle est 4/4, cela signifie que la mesure peut contenir jusqu'à 4 noires (une par temps). Cela signifie également que si la mesure contient une note entière, elle occupera les 4 temps. Si vous êtes assez âgé pour vous souvenir de la chanson Money de Pink Floyd, cette chanson a une signature temporelle de 7/4, ce qui signifie qu'il y a 7 temps (noires) dans chaque mesure. Nous devons obtenir le numérateur et le dénominateur pour utiliser cette information (en haut à droite).+La signature temporelle est également un message qui m'intéresse. Il s'agit normalement d'une fraction qui indique combien de notes d'une valeur particulière sont contenues dans chaque mesure. Par exemple, si la signature temporelle est 4/4, cela signifie que la mesure peut contenir jusqu'à 4 noires (une par battement). Cela signifie également que si la mesure contient une note entière, elle occupera les 4 battements. Si vous êtes assez âgé pour vous souvenir de la chanson Money de Pink Floyd, cette chanson a une signature temporelle de 7/4, ce qui signifie qu'il y a 7 battements (noires) dans chaque mesure. Nous devons obtenir le numérateur et le dénominateur pour utiliser cette information (en haut à droite).
  
 Le dernier message qui m'intéresse vraiment est la tonalité, qui est utilisée pour déterminer combien de dièses ou de bémols il y a dans la gamme de cette chanson. Une tonalité de do signifie qu'il n'y a normalement pas de dièses ou de bémols, donc la gamme est do, ré, mi, fa, sol, la, si. Si la tonalité est sol, cela signifie qu'il y a un dièse dans la gamme, donc elle serait do, ré, mi, fa#, sol, la, si (au milieu à droite).  Le dernier message qui m'intéresse vraiment est la tonalité, qui est utilisée pour déterminer combien de dièses ou de bémols il y a dans la gamme de cette chanson. Une tonalité de do signifie qu'il n'y a normalement pas de dièses ou de bémols, donc la gamme est do, ré, mi, fa, sol, la, si. Si la tonalité est sol, cela signifie qu'il y a un dièse dans la gamme, donc elle serait do, ré, mi, fa#, sol, la, si (au milieu à droite). 
issue191/python.1680626050.txt.gz · Dernière modification : 2023/04/04 18:34 de andre_domenech