Synthèse MIDI logicielle comme service système
| Auteur | Message |
|---|---|
|
Normalement, on joue les fichiers MIDI avec un synthétiseur qui va les interpréter comme si on jouait la partition au clavier. Ce synthétiseur, qui n’a pas nécessairement un clavier, peut être en fait un logiciel sur l’ordi qui est alors son propre synthétiseur. Il existe un cas intermédiaire, où la carte son peut jouer ce rôle.
Dans tous les cas, une chose qui s’appelle un port MIDI doit être disponible quelque part, un peu comme quand on voit un lecteur de disque sur le bureau qui indique sa disponibilité, excepté que ce n’est pas affiché sur le bureau, alors que ça serait utile. Remarque : ne pas confondre ports MIDI et canaux MIDI. Un port MIDI, c‘est l’équivalent d’une prise sur laquelle on branche quelque chose, même si cette prise est logicielle. Un canal MIDI, c’est comme une piste audio dans un contexte multi‑piste, l’appareil a plusieurs pistes audio, mais il a une seule entrée pour les commandes et une seul sortie pour l’audio. Le MIDI est toujours comme s’il était multi‑piste et on parle de canaux MIDI. Il y en a 16 dans la norme la plus répandue, MIDI1. Il existe des ports MIDI qui sont appelés MIDI Through (ou MIDI Thru, les deux orthographes semble exister conjointement). Ce terme signifie littéralement « MIDI passe à travers ». Ça signifie que ce type de port ne fait rien lui même, qu’il ne fait que renvoyer son entrée sur sa sortie. Ça peut sembler inutile, mais c’est en fait utile pour avoir un point de connexion commun. Dans le monde des synthétiseurs matériels, c’est aussi utiliser pour jouer sur plusieurs synthétiseurs en même temps, si on veut le son de l’un pour un instrument, mais qu’on préfère le son de l’autre pour un autre instrument. Des détails seront à clarifier plus tard, à ce sujet, surtout sur ce que peut faire un appareil sur ce qu’il reçoit via MIDI Through. Plus encore, un boîtier ou appareil ou un logiciel qui joue ce rôle, peut avoir plusieurs prises. Ça s’appelle aussi un client. Un client ou appareil peut donc avoir plusieurs ports (un port, c’est une prise). À partir d’ici et pour le moment, ce qui est décrit concerne l’environnement Linux et peut‑être les BSD aussi mais à vérifier. Pour Windows et Mac (pour les plus fréquents), il faudra attendre. Il existe avec Linux, un port appelé “ Midi Through Port-0 ”. Il fait partie de l’équivalent logiciel d’un appareil qui n’a qu’un seul port et qui s’appelle “ Midi Through ”. Le tout fait partie du noyau, il n’y a pas besoin de lancer un service ou une application pour ça. Si on envoie des données MIDI sur le côté entrée de “ Midi Through Port-0 ”, il peut ne rien se passer, parce que rien n’écoute sur le côté sortie pour faire les sons correspondants. On peut lancer un synthétiseur logicielle et connecter par exemple un clavier matériel ou logiciel (matériel c’est quand‑même plus confortable) ou quelque chose qui envoie des notes ou fichiers MIDI et connecter l’entrée du synthétiseur à cette source de donnée MIDI. Mais comme à chaque lancement l’identification des ports peut changer, de même que si les applications ne sont pas démarrées, les ports n’existent pas, ça n’est pas toujours commode pour avoir quelque chose de stable dont on a pas trop à s’occuper. Le plus simple, est si par exemple on connecte ou ouvre un clavier MIDI, est de le connecter au côté sortie de “ Midi Through Port-0 ”, qui sera toujours disponible. Et de même, on peut connecter un synthétiseur MIDI au côté entrée de “ Midi Through Port-0 ”. Comme, il y a toujours un point de connexion toujours avec la même identification, ça marche tout seul sans avoir à s’occuper de rien. Et s’il manque par exemple le synthétiseur, ça ne joue pas de son mais ça ne produit pas d’erreur. Pour le synthétiseur logiciel, le choix s’est porté sur Fluidsynth. Timidity semble avoir une meilleur sonorité, mais il a des bugs incompréhensibles, qui ne seront pas décrits ici. S’il a été installé, on peut lancer Fluidsynth avec cette commande : Code :fluidsynth --no-shell --server --portname=MIDI-Synthesizer La première option, dit qu’on ne sera pas dans un mode interactif. La seconde option dit que Fluidsynth attendra de recevoir quelque chose sur son entrée MIDI, au lieu d’attendre une entrée sur le terminal. Cette option est nécessaire, puisque comme on est pas en mode interactif, autrement, Fluidsynth se refermerait aussitôt. La troisième option est facultative, mais elle est commode pour avoir un nom qui ne change pas, quelque soit le synthétiseur qu’on utilise, en réutilisant le même nom avec tous. Ensuite, il faudra connecter le côté sortie de “ Midi Through Port-0 ” à l’entrée de Fluidsynth. Là, ça se complique un peu et il faudra affiner pour que ça puisse se faire automatiquement. Il faut pouvoir lister les ports, ce qui liste aussi les clients, comme ce sont les clients qui ont des ports. On peut utiliser la command “ aconnect ” qui est normalement installée par défaut dans les environnements utilisant ALSA, même en présence de Pulseaudio ou de OSS. Pour lister les ports d’entrée MIDI, c’est à dire ceux qui génèrent des données MIDI qu’on pourra lire, ce qui est le cas du port d’un clavier MIDI ou d’un lecteur de fichiers MIDI : Code :aconnect --input Pour lister les ports de sortie, c’est à dire ceux sur lesquels des données MIDI pourront être écrites pour produire des sons, ce qui est le cas du port d’un synthétiseur MIDI : Code :aconnect --output Si vous avez lancé Fluidsynth comme précédemment indiquer, il vous faudra ouvrir un autre terminal, parce qu’il attend et bloque donc le terminal sur lequel on ne peut plus rien faire d’autre. “ aconnect --input ” renvoie ceci : Code :client 0: 'System' [type=noyau] On voit bien le port de sortie “ Midi Through Port-0 ” (oui, le port de sortie, parce que le port sur lequel on lit, est son port de sortie, puisque c’est un port « passe à travers »). On voit que ce port fait partie d’un client appelé “ Midi Through ” tout‑court et qu’il lui est attribué un numéro, le numéro 14. L’indentation signifie que ce qui est en dessous, fait partie de ce client. Ce client a ce fameux port “ Midi Through Port-0 ”, avec un numéro lui‑aussi, le numéro 0 (zéro). Pour identifier ce port en particulier, il faut dire à quel client on se réfère, parce que 0 tout‑court serait ambiguë. On dit que c’est le port 0 du client 14 et ça se note “ 14:0 ”. Cette notation qui ressemble à la désignation majeur:mineur des périphérique UNIX, n’est peut‑être pas transposable à Windows par exemple, et aucune idée pour Mac. “ aconnect --output ” renvoie ceci : Code :client 14: 'Midi Through' [type=noyau] On retrouve encore le même port “ Midi Through Port-0 ”, mais cette fois‑ci comme port d’entrée, c’est à dire un port sur lequel on écrit des données MIDI (MIDI à travers, etc, comme explique plus haut). On trouve aussi cette fois, un client appelé MIDI-Synthesizer, ce qui est le nom qu’on a choisi de donner au port de Fluidsynth. Ce client a un unique port du même nom, le même nom pour le client et l’unique port. Le client a le numéro 128, son unique port a le numéro 0, et on le désigne donc comme 128:0. Fluidsynth est un synthétiseur, son port MIDI est donc un port sur lequel il attend des données qu’on va y écrire/envoyer. Il y lit, mais nous, on y écrit, le rôle des ports est vu d’un point de vue extérieur, quand il s’agit de savoir comment les appeler en général. On a donc 14:0 qui est un port qui génère des données MIDI et 128:0, qui est un port qui attend des données MIDI. Il faut connecter les deux. On peut le faire avec cette commande : Code :aconnect 14:0 128:0 Le port indiqué en premier et celui qui émet (sender, dans la documentation) et le second est celui qui attend des données (receiver, dans la documentation). Maintenant, si vous ouvrez une clavier virtuel comme MPK, vous pouvez choisir “ Midi Through ” et vérifier que des sons de pianos se font bien entendre. Remarque : MPK utilise comme nom du port, le nom du client, mais ça ne pose pas de problème, comme il n’a qu’un seul port, ça n’est pas ambiguë. Aussi, pour voir ce port apparaître, il faut cocher la case “ Afficher les connexions avancées ”, même si ça n’a rien d’avancer que c’est un port comme les autres. Ce point de connexion unique convient si on utilise qu’un seul synthétiseur en même temps et qu’il n’est pas toujours le même ou qu’il y a des risque que son numéro attribué ne soit pas le même à chaque démarrage. Ce point de connexion unique est aussi pratique pour des choses dont on veut qu’elle puisse se connecter automatiquement ou par défaut sans aller chercher quoique ce soit, puisque ce port “ Midi Through Port-0 ” existe toujours. C’était aussi une occasion de présenter comment ces connexions fonctionnent, pour savoir comprendre et s’y retrouver. Pour plus tard : une manière de réaliser les opérations ci‑dessus automatiquement et encore plus tard, voir ce qu’il en est avec Windows (n’ayant pas de Mac, la manière dont les choses se passe avec Mac ne sera pas présenté avant je ne sais pas quant). |
|
|
Une subtilité à présenter en complément au précédent message.
Dans message précédent, on a connecté un synthétiseur au port de sortie MIDI du système. Mais si on connecte deux synthétiseur au même port par erreur ou pas ? On pourrait s’attendre à un mélange des timbres de deux synthétiseurs jouant la même chose en même temps et ça pourrait être ce qu’on veut ou pas. Mais ça n’est pas nécessairement le cas, parce que un des synthétiseur pourrait être silencieux pour un canal MIDI, par exemple celui d’un solo de trompette et ne faire les sons que pour le canal de la batterie par exemple et l’autre resterait silencieux pour ce canal. Cependant, si on veut éviter plusieurs connexions sur le même port, on peut utiliser l’option “ --exclusive ” : Code :aconnect --exclusive 14:0 128:0 Avec cette commande, une tentative de connecter autre chose à la sortie 14:0, sera refusée. Si on veut faire une connexion qui existe déjà, “ aconnect ” ne fait rien et affiche un message d’erreur, mais c’est un autre cas. |
