Avec MIDI, lancez-vous dans la musique assistée par ordinateur !

Magazine
Marque
Linux Pratique
HS n°
Numéro
29
Mois de parution
février 2014
Spécialité(s)


Résumé
Vous aimeriez vous lancer dans la musique assistée par ordinateur, mais n'arrivez pas à jouer la Sonate au clair de lune sur votre clavier Azerty ? Mieux vaut connecter un vrai clavier musical à votre système d'exploitation préféré ! Nous allons voir comment connecter un instrument MIDI et interagir avec lui depuis Linux. Mais si vous n'avez pas d'instrument MIDI, ne passez pas votre chemin, vous ne serez pas oublié.

Body

Le clavier utilisé dans le cadre de cet article est un synthétiseur Yamaha CS1x, commercialisé en 1996 que j'avais à l'époque relié à mon PC via un système d'exploitation d'une multinationale bien connue. On peut encore facilement en trouver d'occasion sur Internet pour moins de 130 €. Pour un synthétiseur neuf, comptez au minimum 300 €. Mais à partir de 30 €, vous pourrez trouver des claviers maîtres que vous pourrez brancher par USB sur votre PC : ils ne contiennent pas de circuits audio, le son devra être synthétisé par un logiciel sur votre ordinateur. Avant d'investir, vous pouvez aussi simplement, comme nous allons le voir, installer un clavier virtuel qui vous permettra de tester les logiciels musicaux disponibles sous Linux.

Nous allons d'abord voir comment connecter un instrument électronique grâce à l'interface MIDI, puis comment communiquer avec lui à partir de la ligne de commandes et enfin, comment connecter entre elles les applications de MAO (Musique Assistée par Ordinateur).

Interface MIDI

1. Introduction à MIDI

MIDI (Musical Instrument Digital Interface), lancé en 1983, définit un protocole de communication entre instruments de musique. Les informations sont transmises à une vitesse de 31250 bauds dans des câbles ayant à leurs extrémités des prises DIN 5 broches. Voilà qui ne semble pas très excitant me direz-vous, on a l'impression de revenir à l'époque du Minitel ! C'est que MIDI ne transmet pas de son, mais simplement des instructions du type « j’appuie sur la touche do à telle vitesse », « je relâche la touche do », « changer de sonorité », composées chacune de quelques octets seulement.

Un instrument MIDI dispose en général d'une prise MIDI IN pour recevoir des informations, d'une prise MIDI OUT pour en envoyer et parfois, d'une prise MIDI THRU qui permet de répéter le signal d'entrée pour connecter plusieurs instruments en cascade (Fig. 1). Chaque instrument peut en effet utiliser un ou plusieurs des seize canaux définis par la norme.

CS1x

Fig. 1. Synthétiseur Yamaha CS1x. Les câbles MIDI IN et OUT (bleu et rouge) sont branchés à l'arrière.

La norme est actuellement gérée par la MMA (MIDI Manufacturers Association), sur le site de laquelle (www.midi.org) vous trouverez de nombreux documents officiels. MIDI a évolué au fil des années. En particulier, en 1991, General MIDI (GM) a normalisé la numérotation et le nom de 128 instruments répartis en 16 familles, ainsi que de 47 percussions [GM]. Par exemple, le premier instrument GM est le grand piano acoustique, le 41e le violon, le 53e le « chœur Aah »... Cela permet de partager facilement des morceaux, tout en profitant d'un rendu dont la qualité dépendra du synthétiseur utilisé. Enfin, le dixième canal est réservé aux percussions.

Attention, les musiciens et les afficheurs des instruments vont généralement utiliser une numérotation partant de 1, alors qu'en informatique la numérotation commence à 0. Par exemple, le grand piano acoustique est l'instrument 0 du point de vue informatique. Cela vaut pour la plupart des éléments MIDI : notes, canaux, instruments, etc.

La norme MIDI définit également le format de fichier SMF (Standard MIDI File), qui permet de stocker des séquences d'instructions MIDI. Leur extension est .mid ou .midi. Ils ont l'avantage d'être très compacts : quelques dizaines de kilo-octets suffisent pour stocker toutes les instructions nécessaires pour jouer la musique d'une chanson.

Dans la suite de cet article, je parlerai généralement de clavier musical ou de synthétiseur, mais cela pourrait tout aussi bien être une guitare MIDI, une batterie, un instrument à vent, etc. On parle dans le cas général de contrôleur MIDI.

2. Branchez l'instrument sur votre PC

ALSA (Advanced Linux Sound Architecture) [ALSA],intégré au noyau depuis Linux 2.6, propose entre autres des pilotes pour les cartes son, un serveur son, un séquenceur pour délivrer les événements MIDI aux applications clientes, une interface RawMIDI pour lire et écrire des données brutes (raw en anglais) sur une interface MIDI, une interface de mixage, etc. Dans le répertoire /proc/asound/ vous trouverez des informations sur votre système sonore : en particulier, le fichier virtuel /proc/asound/cards contient la liste de vos cartes son et interfaces MIDI. La commande lsmod | grep snd vous donnera la liste des modules chargés : vous aurez en particulier besoin de snd_seq_midi, snd_seq_midi_event et snd_rawmidi. Les utilitaires amidi, arecordmidi, aplaymidi, aconnect que nous allons utiliser font partie du paquet alsa-utils. Enfin, tous les exemples de cet article ont été testés sur des PC utilisant la distribution Kubuntu 13.04.

- Cas d'une carte son avec connecteur joystick

Avant de brancher le clavier, vérifions que la carte son dispose bien d'une interface MIDI :

$ amidi -l

Dir Device Name

IO hw:1,0 ES1371

Il s'agit dans cet exemple d'une carte son Ensoniq ES1371 AudioPC qui dispose d'un port D-sub à 15 broches (DA-15, souvent appelé improprement DB15), destiné à recevoir un joystick. Pour une dizaine d'euros, on trouve encore des câbles MIDI avec deux prises DB15 (une mâle à raccorder au PC et une femelle pour brancher le joystick) et deux prises DIN mâles à 5 broches à brancher sur les ports MIDI IN et OUT de l'instrument. Le hw:1,0 est l'identifiant de l'interface MIDI de cette carte : le premier chiffre est le numéro de la carte, le second désigne un composant de la carte, un troisième chiffre désignerait un sous-composant. Quant à l'indication IO, elle indique que le port fonctionne en entrée et sortie (Input / Output).

Branchez la prise DIN OUT mâle du câble sur la prise DIN IN femelle de votre instrument et la prise DIN IN mâle sur la prise DIN OUT femelle, puis passez à la partie « Communication » de cet article.

La sortie du PC est envoyée à l'entrée de l'instrument et la sortie de votre instrument est envoyée à l'entrée du PC. Si vous faites l'inverse, il n'y a aucun danger pour le matériel, mais vous ne détecterez aucune information en provenance de votre clavier musical.

- Cas d'une connexion par interface MIDI/USB

Si votre PC ne dispose pas d'une carte son avec un connecteur de joystick et que votre clavier musical ne dispose pas d'une prise USB, il vous faudra acquérir un boîtier d'interface MIDI/USB. Attention, les modèles les moins chers, autour de 10 €, ne sont pas toujours 100 % compatibles MIDI et peuvent réserver quelques surprises. Mieux vaut prendre un modèle d'un grand fabricant de matériel musical. Personnellement, j'ai choisi le boîtier E-MU Xmidi 2x2 (Fig. 2) en me basant sur les informations fournies sur la page citée en référence [MIDIUSB]. Il a l'avantage d'être directement reconnu par Linux sans l'installation d'aucun pilote ou firmware. Pour un prix relativement modeste (38 € hors frais de port chez www.thomann.de), il permet de connecter simultanément deux instruments sur un PC. À noter que le câble USB est fourni, mais pas les deux câbles MIDI (comptez 3 € pour un câble standard de 3 m). Le modèle E-MU Xmidi 1x1 coûte 28 €, mais ne permet de connecter qu'un seul instrument.

Les claviers musicaux récents disposent souvent d'une prise USB qui leur permet de communiquer directement selon le protocole MIDI avec un ordinateur, dans les deux sens avec un seul câble.

e-muXmidi2x2

Fig. 2. Une interface MIDI/USB E-MU Xmidi 2x2

Connectez l'E-MU à votre PC via le câble USB. Puis connectez le port MIDI OUT par où sortent les informations de votre instrument au port MIDI IN (c'est l'entrée de votre PC) du boîtier, et le port MIDI IN de l'instrument au port MIDI OUT du boîtier. Une fois le synthétiseur allumé, une LED du boîtier USB se met à clignoter, car un signal de contrôle 0xFE (active sensing) est envoyé toutes les 300 ms par le synthétiseur pour s'assurer que la liaison n'est pas débranchée.

Vérifiez que le boîtier est bien reconnu par votre PC (l'entreprise E-MU appartient au groupe Creative Technology, Ltd. dont l'identifiant USB est 0x041e) :

$ lsusb

Bus 001 Device 002: ID 0c45:6426 Microdia

Bus 002 Device 002: ID 041e:3f0f Creative Technology, Ltd

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Et repérez les identifiants des interfaces MIDI (notre boîtier en possède deux) :

$ amidi -l

Dir Device Name

IO hw:1,0,0 E-MU Xmidi 2x2 MIDI 1

IO hw:1,0,1 E-MU Xmidi 2x2 MIDI 2

Communication

Les exemples donnés dans cette partie ont été réalisés avec l'interface MIDI/USB E-MU Xmidi 2x2.

1. De l'instrument vers l'ordinateur

Pour comprendre le fonctionnement du protocole MIDI, rien de mieux qu'un peu de reverse engineering [MISC] accompagné d'une lecture de la documentation officielle [MSG]. Dans un terminal, tapez la commande suivante, enfoncez la touche la 3 de votre clavier pendant quelques secondes, puis relâchez :

$ amidi -p hw:1,0,0 -d

90 45 43

   45 00

L'option -d signifie dump (copie brute) puisqu'elle permet d'afficher en hexadécimal tous les octets reçus par le port indiqué. La valeur 0x90 signifie qu'il s'agit d'un message note on sur le canal 0. Pour le canal 15 (0xF), on aurait eu 0x9F, les quatre bits les moins significatifs de l'octet codant le canal.

Le système MIDI définit 128 notes numérotées de 0 (do -2) à 127 (sol 8), sur plus de dix octaves. Le la 3 correspond au numéro 69 (0x45), le la 3 dièse a pour numéro 70, le si 3 le numéro 71, le do 4 le numéro 71, etc.

Le la 3 est le la de la troisième octave dont la fréquence est 440 Hz, celui qui est donné par un diapason ou que vous entendez lorsque vous décrochez votre téléphone fixe. Il peut être aussi noté A 3, les Anglo-Saxons n'utilisant pas la notation do, ré, mi, fa, sol, la, si, do mais C, D, E, F, G, A, B, C, notation que vous retrouverez donc dans beaucoup de logiciels musicaux.

Vous avez probablement une autre valeur à la place de 0x43 : il s'agit en effet ici de la vélocité avec laquelle vous avez enfoncé la touche. La valeur minimale est 1 et la valeur maximale est 127 (0x7F). La valeur 0 est réservée au relâchement de la touche, comme on peut le voir sur la deuxième ligne de résultat (mais on aurait pu aussi utiliser un message note off 80 45 43). Si votre clavier dispose de potentiomètres ou de roues de commande, manipulez-les et vous verrez apparaître d'autres codes à l'écran que vous comprendrez rapidement. Si vous ajoutez l'option -a à la commande amidi, vous verrez également apparaître les signaux de contrôle 0xFEévoqués plus haut.

Le séquenceur ALSA attribue à chaque logiciel un ou plusieurs port(s) MIDI numéroté(s). Affichons la liste des ports à partir desquels nous pouvons enregistrer un flux :

$ arecordmidi -l

Port Client name Port name

14:0 Midi Through Midi Through Port-0

20:0 E-MU Xmidi 2x2 E-MU Xmidi 2x2 MIDI 1

20:1 E-MU Xmidi 2x2 E-MU Xmidi 2x2 MIDI 2

Le client 20 n'ayant qu'un seul port (20:0), nous pouvons omettre le :0, qui est le port par défaut. Nous allons enregistrer un court morceau que vous allez jouer au clavier :

$ arecordmidi -p 20 essai.mid

Arrêtez l'enregistrement par [Ctrl]+[C]. Pour rejouer ce fichier MIDI sur votre ordinateur, vous pouvez installer le logiciel TiMidity++ avec la commande suivante dans le cas d'une distribution Ubuntu :

$ sudo apt-get install timidity

Tapez ensuite :

$ timidity essai.mid

Les instructions du fichier MIDI sont interprétées et servent à générer du son au format WAVE qui est ensuite envoyé à la carte son. Vous pouvez aussi utiliser cet outil pour jouer des morceaux complets au format MIDI que vous trouverez facilement sur Internet. Malgré son nom, TiMidity++ est équivalent à un orchestre pouvant comporter jusqu'à seize instruments!

Attention : un fichier MIDI étant en quelque sorte équivalent à une partition musicale peut être protégé par le droit d'auteur !

2. De l'ordinateur vers l'instrument

L'option -S (comme send) de la commande amidi va maintenant nous permettre de commander à notre synthétiseur de jouer la note la 3 avec une vélocité 0x43 (nous utilisons le résultat de notre reverse engineering) :

$ amidi -p hw:1,0,0 -S '90 45 43'

Notez qu'il faut normalement ensuite envoyer un signal de relâchement de la touche ('90 45 00'). Enfin, si vous avez un simple clavier maître et non pas un instrument, cette commande ainsi que les suivantes n'en feront bien sûr sortir aucun son !

Le canal 9 (numérotation à partir de 0) est réservé aux percussions. L'instruction 99 va donc nous permettre de créer notre première boîte à rythmes en Bash, chaque percussion étant associée à une touche du clavier :

for i in `seq 1 30` ; do

amidi -p hw:1,0,0 -S '99 24 2F 99 24 00' ; sleep 0.2

amidi -p hw:1,0,0 -S '99 3C 3B 99 3C 00' ; sleep 0.2

amidi -p hw:1,0,0 -S '99 23 5F 99 23 00' ; sleep 0.2

amidi -p hw:1,0,0 -S '99 25 1B 99 25 00' ; sleep 0.2

done

Le script Bash ci-dessous joue les 128 notes définies dans le protocole MIDI, de la plus grave à la plus aiguë, sur le canal 0, avec l'instrument sélectionné sur le synthétiseur :

for i in `seq 0 127` ; do

HEXA=`echo "obase=16; "$i | bc`

amidi -p hw:1,0,0 -S '90 '$HEXA' 60' ; sleep 0.1

amidi -p hw:1,0,0 -S '90 '$HEXA' 00'

done

La conversion en hexadécimal du numéro de note est assurée ici par la commande bc et la durée d'appui (en secondes) sur la touche est fixée par la commande sleep. Si vous lancez le script de boîte à rythmes en arrière-plan, vous pourrez lancer le second script et commencer à goûter aux joies de la polyphonie et du multitimbral, bien que ces exemples n'aient aucune prétention artistique ! Je vous laisse adapter le second script pour jouer une même note successivement sur chacun des 128 instruments GM : l'instruction 'C0 XX' permettra d'utiliser le programme (l'instrument) XX sur le canal 0 (par exemple 0x43 pour le sax baryton, 0x13 pour l'orgue d'église...).

Enfin, vous pouvez également faire jouer par votre instrument le petit morceau que vous aviez enregistré tout à l'heure (ou tout autre fichier .mid téléchargé sur Internet) :

$ aplaymidi -p 20 essai.mid

3. Heu... je n'ai pas d'instrument !

Comme promis, je ne vous oublie pas. Installez le clavier virtuel Virtual Keyboard, l'interpréteur MIDI TiMidity++ [TIM] et le moniteur MIDI KMidimon [KMM] :

$ sudo apt-get install vkeybd timidity kmidimon

Lancez vkeybd avec un clavier de huit octaves (Fig. 3), puis kmidimon en arrière-plan :

$ vkeybd -–octave 8 &

$ kmidimon &

Il faut lancer TiMidity++ avec les options -iA et -Os pour indiquer que la provenance des événements MIDI est le séquenceur ALSA (ALSA sequencer interface) et que la sortie audio se fera sur la carte son (ALSA pcm device) :

$ timidity -iA -Os

Requested buffer size 32768, fragment size 8192

ALSA pcm 'default' set buffer size 32768, period size 8192 bytes

TiMidity starting in ALSA server mode

Opening sequencer port: 128:0 128:1 128:2 128:3

On remarquera que par défaut 4 ports sont ouverts pour le séquenceur ALSA dans TiMidity++.

La commande aconnect permet de connecter 2 clients ALSA. Avec les options -i et -o, nous voyons les ports d'entrée et de sortie de chaque application cliente :

$ aconnect -i

client 0: 'System' [type=noyau]

0 'Timer '

1 'Announce '

client 14: 'Midi Through' [type=noyau]

0 'Midi Through Port-0'

client 16: 'Ensoniq AudioPCI' [type=noyau]

0 'ES1371 '

client 129: 'KMidimon' [type=utilisateur]

0 'KMidimon '

client 130: 'Virtual Keyboard' [type=utilisateur]

0 'Virtual Keyboard'

$ aconnect -o

client 14: 'Midi Through' [type=noyau]

0 'Midi Through Port-0'

client 16: 'Ensoniq AudioPCI' [type=noyau]

0 'ES1371 '

client 128: 'TiMidity' [type=utilisateur]

0 'TiMidity port 0 '

1 'TiMidity port 1 '

2 'TiMidity port 2 '

3 'TiMidity port 3 '

client 129: 'KMidimon' [type=utilisateur]

0 'KMidimon

Dans MIDI, tout est affaire de connexion entre instruments via des câbles ou entre logiciels via des ports. Ce qui est en accord avec la philosophie Unix : des logiciels qui ne font qu'une chose, mais qui la font bien et qui collaborent. Nous allons donc connecter le clavier virtuel (client 130) avec TiMidity++, qui produira le son, et KMidimon qui affichera les événements :

$ aconnect 130 128

$ aconnect 130 129

Nous avons à nouveau omis les numéros de ports, le port 0 étant toujours utilisé par défaut. Cliquez sur quelques notes du clavier virtuel, vous devriez entendre quelque chose et voir s'afficher les événements MIDI (Fig. 4) sous une forme plus élaborée que celle fournie par la commande amidi. Attention, cette fois les valeurs sont affichées en base décimale. À noter que la commande amidi -d que nous avons déjà utilisée ne peut pas être utilisée avec des ports logiciels, c'est pourquoi nous utilisons KMidimon. Si vous préférez la ligne de commandes, la commande aseqdump -p 130 fera l'affaire.

Pour changer de sonorité, allez dans le menu View > Program List du clavier virtuel, puis choisissez un autre instrument. Vous pouvez bien sûr enregistrer la mélodie jouée sur votre piano virtuel avec la commande arecordmidi vue plus haut.

Enfin, l'option -d de la commande aconnect vous permettra de déconnecter 2 clients. N'hésitez pas à découvrir les autres utilitaires du paquet alsa-utils : par exemple aseqnet vous permettra très simplement d'envoyer des événements MIDI d'un ordinateur à un autre via le réseau !

vkeybd

Fig. 3. Clavier virtuel (vkeybd) avec trois octaves. Vous pouvez jouer en cliquant à la souris, ou en utilisant les touches de votre clavier Azerty.

kmidimon

Fig. 4. Fenêtre de KMidimon

KMidimon permet de rejouer les événements détectés. Il permet également de visualiser tous les événements enregistrés dans un fichier MIDI.

JACK entre en scène

1. Présentation de JACK

Les musiciens professionnels ayant besoin d'une parfaite synchronisation de leurs instruments et de leurs applications, ainsi que d'un faible temps de latence (temps s'écoulant entre le moment où vous appuyez sur une touche et le moment où la note est jouée), JACK (JACK Audio Connection Kit) a été développé [JACK]. Il s'agit d'un serveur son qui interagit avec ALSA à bas niveau et qui permet, comme son nom l'indique, de connecter entre elles des applications musicales à l'aide de câbles virtuels, ainsi que de les commander de façon synchrone. Le démon jackd peut être lancé et contrôlé à l'aide de son interface graphique QjackCtl (Fig. 5). Installons-le, ainsi que les autres applications que nous allons utiliser dans cette partie :

$ sudo apt-get install qjackctl fluidsynth qsynth fluid-soundfont-gm rosegarden

De plus en plus d'applications peuvent utiliser JACK comme serveur son : si dans votre gestionnaire de paquets vous trouvez une dépendance commençant par libjack, c'est le cas. Il permet de router à la fois son et événements MIDI entre les différentes applications. Mais beaucoup d'applications utilisent encore ALSA pour les connexions MIDI, ce qui explique la présence de deux onglets concernant MIDI dans la fenêtre de connexion de QjackCtl : MIDI et ALSA (qui pour plus de clarté aurait dû être nommé ALSA MIDI). Le fait que la plupart des logiciels musicaux puissent fonctionner aussi bien avec ALSA que JACK, ou d'autres systèmes, est d'ailleurs une grande source de confusion pour le débutant, qui devra veiller à ce que les logiciels et commandes soient lancés avec les bonnes préférences et options d'entrées/sorties.

qjackctl

Fig. 5. Fenêtre principale de QjackCtl

Pour donner tout leur potentiel, JACK et les applications qui l'utilisent doivent être lancés en tant que super-utilisateur afin de pouvoir fonctionner en mode temps réel et de pouvoir verrouiller les applications en mémoire. Ce verrouillage permet d'éviter tout transfert sur la partition de swap, ce qui risquerait d'entraîner un temps de latence.

Un seul serveur son pouvant généralement accéder à la carte son, la cohabitation de PulseAudio et JACK peut être délicate. Le simple fait d'avoir regardé une vidéo sur YouTube peut vous empêcher de lancer JACK. La solution que j'utilise est de lancer JACK en début de session. Si vous avez 2 cartes son, vous pouvez également configurer JACK et PulseAudio pour qu'ils utilisent chacun la leur. Enfin, vous trouverez d'autres solutions en référence [PULSE1] et [PULSE2].

Il faut également appartenir au groupe audio, ce qui peut être fait avec la commande suivante suivie d'un redémarrage de votre session :

toto@pc:~$ sudo addgroup toto audio

Lancez qjackctl en tant que super-utilisateur. Si votre PC dispose de plusieurs cartes son, cliquez sur le bouton Réglages et dans Interface sélectionnez la carte son à utiliser pour l'audio. Pour lancer le serveur JACK, cliquez sur le bouton Démarrer. Si l'indication TR clignote sur son afficheur, JACK fonctionne bien en mode temps réel. Les nombres 0 (0) apparaissant juste en-dessous de l'indication « Démarré » sont des statistiques relatives au nombre de désynchronisations, appelées XRUNS dans JACK, qui vont se traduire par des micro-coupures dans la sortie son. Si ces nombres ne sont pas nuls, il vous faudra trouver les bons paramètres de configuration afin d'éviter ces XRUNS.

2. Le synthétiseur virtuel

Nous allons utiliser le synthétiseur virtuel à faible latence FluidSynth, qui permet de jouer des notes MIDI à l'aide de fontes sonores (soundfonts), c'est-à-dire de sons échantillonnés de divers instruments, sans carte son spéciale. Une des fontes sonores libres les plus réputées est la Fluid R3 General MIDI soundfont disponible dans le paquet fluid-soundfont-gm sous Ubuntu. Attention : cette fonte occupe 142 Mo et nécessite donc une mémoire vive supérieure à 512 Mo pour être utilisée ! Si vous manquez de mémoire, vous pouvez à défaut utiliser la Small GM SoundFont for MuseScore du paquet musescore-soundfont-gm, qui ne fait que 5,8 Mo.

Lancez l'interface graphique qsynth de FluidSynth [QSYN]. Celui-ci est par défaut configuré pour fonctionner avec JACK ; par contre, lors de sa première utilisation, aucune fonte sonore n'est chargée en mémoire. Il faut donc cliquer sur le bouton Setup (Fig. 6), puis dans l'onglet Soundfonts cliquer sur Open et sélectionner le fichier FluidR3_GM.sf2. Pour enregistrer la configuration, quittez et redémarrez le logiciel.

qsynth

Fig. 6. Fenêtre principale de Qsynth, l'interface graphique du synthétiseur virtuel FluidSynth

Dans QjackCtl, cliquez sur le bouton Connecter. Lancez vkeybd et qsynth, puis connectez le premier au second : sélectionnez dans la partie gauche Virtual Keyboard, dont vous allez utiliser le port de sortie, et dans la partie droite FLUID Synth, dont vous allez utiliser le port d'entrée, puis cliquez sur le bouton Connecter. Pour ce qui est de l'audio, Qsynth est normalement configuré pour se connecter automatiquement à la sortie audio dans JACK. Vous pouvez maintenant jouer sur votre clavier virtuel. Vous pouvez également ajouter des effets de réverbération ou de chorus en manipulant les potentiomètres de Qsynth.

La réverbération est la persistance du son due à ses réflexions dans un local. Le chorus est un effet sonore donnant l'impression d'un chœur d'instruments.

3. Le séquenceur Rosegarden

Un séquenceur musical permet d'enregistrer et de jouer des séquences de notes, organisées par pistes. Nous allons utiliser Rosegarden [ROSE] : installez le paquet rosegarden, puis lancez le logiciel en tant que super-utilisateur. Dans qjackctl, connectez vkeybd au port record in de Rosegarden, puis le port out1 - General MIDI Device de Rosegarden au port d'entrée de FLUID Synth (Fig. 7). Rosegarden et FLUID Synth sont normalement configurés pour se connecter automatiquement au serveur son JACK. Si ce n'est pas le cas, connectez-les dans l'onglet Audio (Fig. 8).

qjackctl_connecter_ALSA_MIDI

Fig. 7. Fenêtre de connexion avec ses trois onglets pour la gestion des connexions audio et MIDI (par JACK ou ALSA). La sortie MIDI de Rosegarden est connectée à l'entrée de FLUID Synth. Le clavier virtuel est connecté à la fois à FLUID Synth et à l'entrée de Rosegarden.

qjackctl_connecter_audio

Fig. 8. Onglet des connexions audio de JACK

Pour enregistrer une première piste, cliquez sur le bouton d'enregistrement de la fenêtre Transport, puis jouez une mélodie au clavier pendant une vingtaine de secondes (Fig. 9). L'instrument par défaut étant le piano, dans le cadre Paramètres d'instrument sélectionnez le programme 68. Saxophone baryton. Retournez au début de la piste avec l'icône adéquate, puis appuyez sur l'icône play : votre mélodie est rejouée par FLUID Synth avec l'instrument sélectionné (la piste est toujours étiquetée « Piano », mais vous pouvez la ré-étiqueter avec le menu contextuel).

rosegarden

Fig. 9. Le séquenceur Rosegarden. Deux pistes MIDI ont été enregistrées.

Nous allons enregistrer une seconde piste : cliquez sur la LED jaune de la première piste pour l'éteindre et cliquez sur celle de la piste 2 pour enregistrer sur celle-ci uniquement. Procédez comme précédemment pour enregistrer une mélodie sur cette seconde piste pendant que la première est rejouée. Changez l'instrument en sélectionnant le programme 53. Chœur Aaah. Rejouez l'ensemble après être revenu en début de piste : voici votre première composition !

Le système JACK Transport vous permet de piloter les applications audio et MIDI de façon synchrone : vous pourrez par exemple, en cliquant sur l'icône play de QjackCtl, lancer simultanément la lecture des pistes audio et MIDI de tous les logiciels connectés à JACK, arrêter la lecture, rembobiner les pistes, etc.

Vous pouvez ainsi enregistrer jusqu'à 16 pistes instrumentales et vous avez probablement remarqué que vous pouviez en plus utiliser 16 pistes audio en important des fichiers au format WAVE. Mais nous n'irons pas plus loin, car un logiciel tel que Rosegarden mériterait un grand article à lui tout seul. L'objectif de cet article était de vous donner envie d'explorer la MAO sous Linux et j'espère qu'il est atteint : vous savez désormais comment interfacer un instrument MIDI avec Linux, comment communiquer avec lui et comment connecter des applications sonores entre elles afin de créer votre studio amateur.

Pour aller plus loin

En cherchant le terme MIDI dans votre gestionnaire de paquets, vous découvrirez beaucoup d'autres utilitaires et logiciels musicaux que vous pourrez connecter entre eux avec JACK ou ALSA. Pour aller plus loin, vous pouvez vous inscrire sur les communautés anglophone [LMU] et francophone [MAO] où vous trouverez beaucoup d'informations et des gens très compétents.

Enfin, le protocole MIDI n'envoyant que des informations sur les touches et molettes manipulées, rien ne vous empêche d'utiliser votre instrument de musique pour piloter autre chose qu'un logiciel musical. Il existe d'ailleurs des systèmes d'éclairage ou pyrotechniques pilotés par MIDI, de quoi rejouer la scène musicale de Rencontres du troisième type ! Les électroniciens trouveront facilement sur Internet des montages MIDI à base d'Arduino ou de Raspberry Pi. Quant aux Pythonistes, ils pourront s'intéresser à des bibliothèques telles que python-midiutil ou python-pypm. Le terrain de jeu est infini, voilà de quoi inspirer de futurs articles !

Références

[GM] Liste des instruments GM : http://www.midi.org/techspecs/gm1sound.php

[ALSA] http://www.alsa-project.org/

[MIDIUSB] http://alsa.opensrc.org/USBMidiDevices

[MISC] Le guide du reverse engineering, MISC, hors-série n°7, mai-juin 2013.

[MSG] Liste des messages MIDI : http://www.midi.org/techspecs/midimessages.php

[TIM] http://timidity.sourceforge.net/

[KMM] http://kmidimon.sourceforge.net/

[JACK] http://jackaudio.org/

[PULSE1] http://jackaudio.org/pulseaudio_and_jack

[PULSE2] http://www.linuxmao.org/MAO+sans+Pulseaudio+et+Pulseaudio+sans+MAO&structure=Doc

[QSYN] http://qsynth.sourceforge.net

[ROSE] http://www.rosegardenmusic.com/

[LMU] Linux Musicians : http://www.linuxmusicians.com/

[MAO] http://www.linuxmao.org/




Article rédigé par

Par le(s) même(s) auteur(s)

Les derniers articles Premiums

Les derniers articles Premium

Du graphisme dans un terminal ? Oui, avec sixel

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

On le voit de plus en plus, les outils en ligne de commandes s'étoffent peu à peu d'éléments graphiques sous la forme d'émojis UTF8. Plus qu'une simple décoration, cette pointe de « graphisme » dans un monde de texte apporte réellement un plus en termes d'expérience utilisateur et véhicule, de façon condensée, des informations utiles. Pour autant, cette façon de sortir du cadre purement textuel d'un terminal n'est en rien une nouveauté. Pour preuve, fin des années 80 DEC introduisait le VT340 supportant des graphismes en couleurs, et cette compatibilité existe toujours...

Game & Watch : utilisons judicieusement la mémoire

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Au terme de l'article précédent [1] concernant la transformation de la console Nintendo Game & Watch en plateforme de développement, nous nous sommes heurtés à un problème : les 128 Ko de flash intégrés au microcontrôleur STM32 sont une ressource précieuse, car en quantité réduite. Mais heureusement pour nous, le STM32H7B0 dispose d'une mémoire vive de taille conséquente (~ 1,2 Mo) et se trouve être connecté à une flash externe QSPI offrant autant d'espace. Pour pouvoir développer des codes plus étoffés, nous devons apprendre à utiliser ces deux ressources.

Raspberry Pi Pico : PIO, DMA et mémoire flash

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Le microcontrôleur RP2040 équipant la Pico est une petite merveille et malgré l'absence de connectivité wifi ou Bluetooth, l'étendue des fonctionnalités intégrées reste très impressionnante. Nous avons abordé le sujet du sous-système PIO dans un précédent article [1], mais celui-ci n'était qu'une découverte de la fonctionnalité. Il est temps à présent de pousser plus loin nos expérimentations en mêlant plusieurs ressources à notre disposition : PIO, DMA et accès à la flash QSPI.

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous