Introduction

Le simulateur de piano électrique présenté ici par l'IREM des Pays de la Loire se veut élémentaire aussi bien dans sa manière de produire des sons que dans son utilisation. Plusieurs dizaines de paramètres physiques sont modifiables à la volée.

Il est placé sous la licence GPLv3.

Le piano électrique IREM n'a pas l'ambition des simulateurs habituels dédiés aux pianos électromécaniques ou électroniques classiques, libres ou propriétaires, qui comportent des caractéristiques assez subtiles et se placent dans une recherche d'exactitude de comportement absolue par rapport au modèle. Néamoins en jouant sur divers paramètres, on peut imiter des enceintes tournantes à deux rotors (d'après Leslie), différents types de piano, voire des orgues avec percussion. L'idée générale est que la synthèse additive est la moins imprévisible et est plus ou moins compatible avec l'instinct musical.

Le piano électrique IREM permet aux personnes débutantes en musique ou en acoustique de se familiariser avec les notions de :

  1. fréquence,
  2. harmonique,
  3. phase,
  4. vibrato,
  5. amplitude,
  6. enveloppe,
  7. battement de fréquences,
  8. filtrage,
  9. distorsion,
  10. retard,
  11. réverbération.
Il s'agit de programmer les calculs les plus simples possibles pour produire les sons voulus. Les étudiants de sciences en premier cycle pourront remarquer l'utilisation d'isométries dans le plan euclidien et de formules classiques de trigonométrie.

L'investissement en matériel nécessaire est limité puisqu'il suffit d'un ordinateur portable et d'un clavier MIDI suffisamment pourvu en boutons de commande.

Une fois le programme lancé, l'interactivité normale entre l'instrument et l'interprète passe exclusivement par le clavier MIDI.

Toutes les notes MIDI sont jouables simultanément, ce que l'on traduit en jargon commercial par : il y a 128 notes de polyphonie, mais en pratique sur un ordinateur portable ordinaire on peut difficilement jouer plus d'une quarantaine de notes simultanément à cause du coût du calcul d'envelopes, avec les réserves décrites dans la section Remarques diverses et dépannage. Le nombre maximum de notes de polyphonie peut descendre jusqu'à sept ou huit quand un maximum d'effets et d'harmoniques sont enclenchés, avec un ordinateur portable courant.

Aide

Un memorandum des commandes du piano électrique est disponible dans le fichier MEMO. Pour les claviers de la marque Arturia, le memorandum est dans le fichier MEMOarturia.

Matériel requis et avertissements

Il faut un ordinateur avec une carte son, et une source MIDI reliée à l'ordinateur. Il faut un compilateur OCaml dans sa distribution standard pour fabriquer les exécutables. Pour envoyer le signal sonore brut (numérique) vers la carte son, il faut de préférence le paquet logiciel sox (SOund eXchange), sinon à la rigueur le paquet logiciel esd (Enlighted sound daemon). (L'avantage du premier est son filtrage qui (entre autres) atténue le repli fréquentiel au prix d'un léger temps de latence.)

Il faut comme source(s) MIDI : un clavier-maître MIDI ayant au moins les molettes pitch bend et modulation, huit (8) boutons curseurs, huit (8) boutons rotatifs, six (6) boutons-poussoirs de transport style magnétophone : BOUCLE (), REMBOBINAGE <<, AVANCE RAPIDE >>, ARRÊT [], LECTURE >, ENREGISTREMENT O, et soit quatre (4) autres boutons-poussoirs soit quatre coussinets percussifs (pads). Ces boutons et curseurs peuvent être sur une autre machine que le clavier si les messages MIDI sont joints sur le même périphérique (par exemple si les appareils sont reliés par un câble MIDI). Si neuf (9) curseurs sont disponibles, la molette de modulation est utilisée pour le niveau de sortie (swell). Le poussoir PAUSE peut remplacer le poussoir BOUCLE le cas échéant. Un curseur ou bouton rotatif supplémentaire peut remplacer des boutons-poussoirs ou des pads.

Les paramètres sont accessibles suivant différents modes choisis par méta-commandes. Un appareil MIDI avec davantage d'organes de commande permettra un accès plus direct aux différents paramètres de l'instrument.

Il est possible de lancer le piano électrique en version automatique avec détection du périphérique MIDI et de la marque du clavier par l'automate. À part la procédure de détection au démarrage, le fonctionnement est le même que pour les scripts dédiés. Il est recommandé de se reporter à la section Démarrage et exploitation du son.

Le canal MIDI utilisé par le piano électrique est celui qui est envoyé sur l'entrée standard du programme "CLAVIERx". Pour la plupart des scripts pianelX.sh c'est le premier : 0 pour les informaticiens (1 pour les musiciens). Il suffit de changer les scripts pour changer de source et de canal MIDI. Les claviers de la marque Roland utilisent une autre convention ; le fichier OCaml et le script associés en tiennent compte ; quelques manipulations sont nécessaires pour pouvoir utiliser un clavier Roland sorti d'usine. Le canal MIDI des coussinets de percussion (pads) des claviers Alesis doit être modifié : quelques manipulations sont nécessaires pour pouvoir utiliser un clavier Alesis sorti d'usine.

La pédale "Sustain pedal" empêche l'arrêt des notes à l'enfoncement, et effectue l'action "All notes off" au relâchement.

Tous les boutons utilisés envoient des messages MIDI appelés "Control change". L'affectation des numéro de contrôleurs est modifiable en changeant les fichiers sources avant de compiler ; cette affectation peut dépendre du fabriquant de la source MIDI.

Pour l'instant les configurations disponibles sont les types : Alesis, Arturia, M-audio, Roland.

Le clavier Samson est géré à travers un filtre par le clavier générique. Il n'est pas inclus dans la détection automatique de clavier. Pour son utilisation, utiliser un script listé dans la section Correspondance des exécutables conformément à la section Piano adapté au matériel.

Comparaison des appareils

mécanique

ergonomie des commandes

Il faut faire attention au niveau de sortie : les craquements éventuels annoncent plus probablement une saturation du système de reproduction sonore qu'une surcharge du processeur. Même si le saturateur-écrêteur intervient en dernier, des pics d'énergie peuvent être occasionnés par l'interaction de multiples effets : battement de fréquences, vibrato, réverbération, clics... Le risque d'abîmer les transducteurs n'est pas à négliger. ATTENTION À NE PAS LÉSER LES OREILLES DANS LE CAS D'UNE ÉCOUTE AU CASQUE.

Le niveau de sortie maximum est choisi pour ne pas saturer quand on joue sans effet, même avec les notes les plus graves. Pour un registre limité au médium ou aigu, le rapport signal-sur-souffle-numérique peut être trop faible. On peut diminuer le paramètre de coefficient rose (calqué sur le bruit rose) pour renforcer les notes aiguës ; une augmentation modérée de la saturation peut aussi atténuer le problème.

Le niveau de sortie est augmenté grossièrement (en préservant cette caractéristique de non-saturation) quand la valeur de pli bas est augmentée. Pour un clavier ordinaire dont la note la plus basse sans transposition est DO36, on peut fixer le pli bas à la valeur MIDI 24.

Les phases initiales des différents générateurs sont pseudo-aléatoires et le déphasage relatif des différentes notes fondamentales subit un cheminement encore moins prévisible quand le paramètre de diapason ou le paramètre de coefficient multiplicateur d'octave sont changés, même temporairement.

Compilation

Les exécutables sont placés dans bin, les bibliothèques dans lib, les configurations dans pianelIREMrc et la documentation dans doc.

La compilation normale est réalisée en exécutant dans le dossier bin/ :

sh compile.sh

Démarrage et exploitation du son

Piano à détection automatique

Le piano électrique admet une version automatique qui détecte le périphérique MIDI et le modèle de clavier, à condition de respecter un protocole de manipulation au démarrage.

Sur un système BSD, où les périphériques MIDI apparaissent sous la forme /dev/umidi0.0, il faut lancer :

sh pianelBSD.sh
Sur un UNIX de type système V (comme GNU/Linux), il faut lancer :
sh pianelSV1.sh
si les périphériques MIDI ont tendance à apparaître sous la forme /dev/midi00 ; sinon il faut lancer :
sh pianelSV2.sh
quand les périphériques MIDI ont tendance à apparaître sous la forme /dev/snd/midiC1D0.

En cas de problème, il se peut que des processus excédant leur durée de vie normale empêchent le succès d'une autre tentative. Il est bon de nettoyer les processus en lançant :

sh nettoyage.sh

Une fois le programme de piano électrique à détection automatique lancé, il faut actionner les boutons du clavier MIDI pour que le bon périphérique MIDI soit trouvé. Ensuite, il faut continuer à actionner les boutons et curseurs du clavier pour que le type de clavier MIDI soit déterminé (par observation des numéros de contrôleurs MIDI). Arrivé à ce point, un court signal sonore est envoyé et le piano électrique est véritablement lancé ; et il suffit de se reporter à le section Commandes pour utiliser le piano électrique.

Dans tous les cas, des messages de diagnostic sont affichés sur la sortie de diagnostic standard (standard error).

La charge du processus le plus gourmand sur la machine est affichée en pourcentage d'utilisation CPU à l'occasion de chaque message de diagnostic.

Début d'utilisation

Au premier démarrage après compilation, une configuration des tirettes (avec niveaux pleins jeux et traînes médianes) est mémorisée sur la touche DO60 (DO central du clavier). Sur les touches DO#61 et RE62 sont enregistrées des configurations qui ne diffèrent de DO60 que par l'enveloppe de chaque harmonique.

Le réglage du son sans aucun effet est uniformément mémorisé sur les 128 touches du clavier MIDI.

À chaque arrêt du piano électrique, les préréglages de tirettes et réglages du piano qui ont été enregistrés pendant la session sont conservés dans le répertoire pianelIREMrc pour être rechargés au prochain démarrage.

On peut commencer par rappeler les pleins jeux ( << DO60 ) et les réglages par défaut ( () << n'importe quelle note ). Appuyer sur une touche pour vérifier si un son est produit.

Enregistrement du son et des messages MIDI

Pour sauvegarder le son de la session ainsi que la séquence temporelle des messages MIDI, il faut lancer l'un des scripts pianelBSDbrut.sh -ou pianelSV?brut.sh- du répertoire bin/ dont le nom est à choisir suivant le système d'exploitation.

Le fichier sonore brut est placé à l'adresse pianelIREMrc/sonBrut. Il suffit de l'importer dans un programme du genre Audacity pour l'exporter par exemple au format WAV. Ce son n'a pas subi le filtrage du script son.sh et peut présenter une bonne dose de repli fréquentiel.

L'enregistrement des messages MIDI est placé à l'adresse pianelIREMrc/sequence. L'enregistrement des messages MIDI qui servent à détecter le type de source MIDI est placé à l'adresse pianelIREMrc/pre_sequence. Les messages MIDI sont enregistrés en lignes de texte en clair (décimal) avec estampilles temporelles.

À condition de connaître le type de source MIDI, il est possible de rejouer la séquence en lançant l'instruction

./rejoue CLAVIERx <fichier>
où la lettre x correspond au type de source MIDI (voir la correspondance des exécutables dans la section Remarques diverses et dépannage) et où la chaîne de caractères <fichier> est l'adresse de la séquence MIDI : ../pianelIREMrc/sequence par exemple.

Pour connaître le type de clavier, il suffit d'exécuter l'instruction suivante.

cat ../pianelIREMrc/pre_sequence | ./PERROQUET | ./DETECT
La réponse est l'une des chaînes de caractères fournies par la fonction Detect.trad.

Toutes les actions sont refaites, y compris les diverses sauvegardes.

Utilisation du casque

Pour utiliser le jack casque sous FreeBSD (/dev/dsp1.0) -par exemple sur un ordinateur portable- avec certaines cartes-son on peut avoir besoin de faire en tant que root (avec réponse du SHELL montrée sur la deuxième ligne) :

# sysctl hw.snd.default_unit=1
hw.snd.default_unit: 0 -> 1

Piano adapté au matériel

Pour démarrer plus rapidement, ou si le piano électrique automatique ne convient pas, il est bon de lancer le piano électrique de la manière expliquée dans la suite, ce qui évite le protocole de détection.

Le piano électrique est lancé en exécutant l'instruction suivante du dossier bin/ :

sh pianelX.sh
où la lettre X est à choisir selon le type de source MIDI (voir la correspondance des exécutables dans la section Remarques diverses et dépannage).

Remarque concernant ce qui suit : ce programme a été conçu sous le système FreeBSD-9.2-amd64. Les noms des périphériques peuvent être différents sous un autre système d'exploitation. Il semblerait que sous GNU/linux, le nom de périphérique /dev/umidi0.0 doive être remplacé par /dev/midi00 ou bien /dev/snd/midiC1D0 par exemple... Des scripts shell prenant en argument l'adresse à partir de /dev/ sont fournis. Leurs noms commencent par SV (comme System V). le piano électrique pourra être lancé par exemple avec la commande du dossier bin/ :

sh SVpianelX.sh snd/midiC1D0
où la lettre X est à choisir selon le type de source MIDI.

Pour d'autres choix en sortie, il suffit de modifier l'un des scripts pianel[A-Z].sh ou SVpianel[A-Z].sh, ou bien de lancer les différents exécutables successivement en s'inspirant du script.

Le format de la sortie standard fabriquée par PIANEL est à envoyer dans play qui utilise par défaut /dev/dsp0.0 (haut-parleurs de la machine). Si le programme play est absent, le son est envoyé dans esdcat avec le même format.

L'exécutable play fait partie du paquet SOund eXchange (/usr/ports/audio/sox sous FreeBSD). Le programme esdcat fait partie du paquet Enlighted sound daemon (/usr/ports/audio/esound sous FreeBSD).

Le choix et l'exécution du filtrage de sortie sont réalisés dans le script son.sh. L'avantage de sox est la disponibilité de simulateurs de filtres électroniques qui (entre autres) retirent une bonne partie du repli fréquentiel (frequency aliasing) au prix d'un léger temps de latence.

Enregistrement du son et des messages MIDI

Pour sauvegarder le son de la session ainsi que la séquence temporelle des messages MIDI, il faut lancer l'un des scripts pianel?brut.sh -ou SVpianel?brut.sh- du répertoire bin/ dont le nom est à choisir suivant la source MIDI -au lieu du script pianel?.sh.

Le fichier sonore brut est placé à l'adresse pianelIREMrc/sonBrut. Il suffit de l'importer dans un programme du genre Audacity pour l'exporter par exemple au format WAV. Ce son n'a pas subi le filtrage du script son.sh et peut présenter une bonne dose de repli fréquentiel.

L'enregistrement des messages MIDI est placé à l'adresse pianelIREMrc/sequence. Les messages MIDI sont enregistrés en lignes de texte en clair (décimal) avec estampilles temporelles.

Il est possible de rejouer la séquence en lançant l'instruction

./rejoue CLAVIERx <fichier>
où la lettre x correspond au type de source MIDI (voir la correspondance des exécutables dans la section Remarques diverses et dépannage) et où la chaîne de caractères <fichier> est l'adresse de la séquence MIDI : ../pianelIREMrc/sequence par exemple.

Toutes les actions sont refaites, y compris les diverses sauvegardes.

Utilisation de sources MIDI diverses et multiples

Il est possible de brancher plusieurs sources MIDI sur l'ordinateur de façon à collationner suffisamment d'organes de commande.

La variété des sources MIDI à prendre en compte est immense, d'autant que l'on trouve fréquemment des sources MIDI dont les configurations internes ne sont modifiables que par ordinateur hôte avec logiciel perdu (à code source secret), sources MIDI dont les configurations ont été modifiées arbitrairement ; et souvent ces matériels n'ont pas de procédure documentée de réinitialisation.

Deux méthodes sont proposées pour utiliser simultanément plusieurs sources MIDI. Toutes les deux requièrent un minimum d'analyse de données hexadécimales, de programmation et de compilation.

Le piano électrique devrait fonctionner normalement. Il faut cependant tenir compte du fait que le piano électrique est conçu pour une source unique :

  1. Enfoncer une touche n'a aucun effet si la touche de même numéro a été enfoncée sur un autre appareil.
  2. Si un enfoncement de touche provient de l'une des sources, la note peut être arrêtée par le relâchement de la touche de même numéro sur une autre source.
  3. La gestion des modes est faite par un petit nombre d'états mémorisés à l'intérieur de chaque exécutable CLAVIERuntel. Les séquences de méta-poussoirs ne doivent donc pas être scindées sur plusieurs appareils.
L'arrêt du piano électrique ne pourra pas s'effectuer comme pour une source adaptée, et il faudra ajouter à la fin des scripts une instruction pour tuer les processus de scrutation du clavier.

Méthode indirecte

Un module pour clavier générique est associé à l'exécutable CLAVIERo. Il suffit d'écrire un filtre UNIX qui transforme les messages issus du périphérique en messages produisibles par le clavier générique.

Un exemple de script SHELL utilise trois sources MIDI. Un autre exemple de script SHELL utilise deux sources MIDI.

Le code source pour les filtres est fourni pour les appareils numérotés un, deux et trois dans le premier exemple. (Le paramétrage de ces appareils a parfois été choisi en dépit du bon sens.) La détermination des valeurs est faite en exploitant les points 2 et 3 de la méthode directe.

On peut utiliser plusieurs sources MIDI simultanément en modifiant le script pianelX.sh (ou équivalent) en remplaçant la ligne

./CLAVIERx < /dev/umidi0.0 &
par un ensemble de lignes sur le modèle suivant.
( ./FILTRE_machin | ./CLAVIERo ) < /dev/umidi0.0 &
( ./FILTRE_truc | ./CLAVIERo ) < /dev/umidi1.0 &
( ./FILTRE_chose | ./CLAVIERo ) < /dev/umidi2.0 &
Évidemment, il faut allumer dans le même ordre les claviers machin, truc, chose à cause de la numérotation automatique des périphériques par le système d'exploitation de l'ordinateur.

Méthode directe

Pour utiliser une nouvelle source MIDI :

  1. On commence par créer un fichier fabricant.ml sur le modèle de ceux qui existent déjà.
  2. Pour connaître la séquence de messages MIDI affectée à un organe de commande, on regarde ce que fournit l'appareil avec l'instruction
    hd -v /dev/umidi0.0
    quitte à remplacer /dev/umidi0.0 par la bonne adresse de périphérique.
  3. Certains messages MIDI ne sont pas des "control change" mais des changements d'instruments. Les commentaires de certains fichiers fournis apportent des explications sur ce type de messages MIDI.
  4. Une fois récupéré le numéro de contrôleur (ou d'instrument), il suffit de l'affecter à la bonne variable dans le fichier fabricant.ml. Comprendre l'utilisation des variables listées dans la signature Clavier.Type_clavier nécessite la consultation du code source de la fonction Clavier.Make.scrute.
  5. Les variables non attribuées mais nécessaires à la signature Clavier.Type_clavier recevront une valeur supérieure à 128, de préférence 0xFF (pour la repérer facilement).
  6. On crée un fichier clavierMachin.ml s'inspirant du fichier clavierX.ml par application du foncteur Clavier.Make au module Fabricant.
  7. Ensuite on recompile vers un exécutable CLAVIERmachin en s'inspirant du script compile.sh.
On peut utiliser plusieurs sources MIDI simultanément en modifiant le script pianelX.sh (ou équivalent) en remplaçant la ligne
./CLAVIERx < /dev/umidi0.0 &
par un ensemble de lignes sur le modèle suivant.
./CLAVIERmachin < /dev/umidi0.0 &
./CLAVIERtruc < /dev/umidi1.0 &
./CLAVIERchose < /dev/umidi2.0 &
Évidemment, il faut allumer dans le même ordre les claviers machin, truc, chose à cause de la numérotation automatique des périphériques par le système d'exploitation de l'ordinateur.

Utilisation du clavier d'ordinateur

Pour faciliter la maintenance du piano électrique, pour une utilisation de vérification seulement, le module filtre_tty.ml permet d'utiliser le clavier AZERTY de l'ordinateur à la place d'une source MIDI. Le principe de fonctionnement est encore celui d'un filtre UNIX qui transforme les messages issus du terminal en messages produisibles par le clavier générique.

Appuyer sur certaines touches déclenche une note et appuyer sur la majuscule correspondante arrête la note. Certaines touches correspondent à des boutons-poussoirs ou des coussinets percussifs (pads). Les séquences d'un ou plusieurs caractères sont interprétées après chaque retour à la ligne.

Le script SHELL exemple1.sh fait fonctionner le piano électrique uniquement à partir du clavier AZERTY.

Le fichier MEMOtty résume les commandes accessibles à un clavier AZERTY.

Il est possible de créer d'autres filtres sur le même patron pour d'autres claviers d'ordinateur.

Commandes

Les neuf curseurs -ou bien la molette de modulation et les huit curseurs- jouent le rôle des neuf tirettes d'orgue. Elles représentent dans l'ordre les harmoniques suivantes (avec longueurs caractéristiques en pieds) : 1/2 (16'), 3/2 (16/3'), 1 (8'), 2 (4'), 3 (8/3'), 4 (2'), 5 (8/5'), 6 (4/3'), 8 (1').

Sur un contrôleur MIDI à neuf curseurs, la molette de modulation est dédiée au niveau de sortie (swell) comme le bouton rotatif (1).

Sur un contrôleur MIDI à huit curseur, la molette de modulation est dédiée à la première tirette : harmonique 1/2.

Si une pédale d'expression est reliée au contrôleur MIDI, elle est affectée au niveau de sortie (swell) comme le bouton (1).

La molette pitch bend (variation d'accord) donne par défaut une excursion maximale de deux tons, qui peut être modifiée en recompilant. La fréquence du diapason en hertz (note MIDI 69) et le coefficient multiplicatif d'octave sont réglables à la volée. Les valeurs par défaut au démarrage sont respectivement 441 et 2.

La configuration des autres réglages à partir de tous les claviers MIDI testés est décrite dans la suite de cette section. Un résumé de tous les organes de commande est placé dans le fichier MEMO.

Pour les claviers Roland, le neuvième bouton rotatif (8bis) est utilisé pour remplacer des boutons-poussoirs ou pads.

Les claviers Arturia offrant sensiblement plus de boutons rotatifs que la concurrence, la disposition spécifique des commandes -inspirée du cas général ci-dessous- est décrite dans le fichier MEMOarturia. Les modes disponibles et les fonctions individuelles des boutons rotatifs pour clavier Arturia sont les mêmes que les autres, seulement l'affectation des numéros de boutons ainsi que le nombre de boutons utilisables dans chaque mode sont différents, ce qui permet de changer de mode moins souvent. Globalement le bouton Volume remplace le bouton (1), les boutons P1 à P3, P6 à P8 remplacent respectivement les boutons (2) à (4), (5) à (7) ; le bouton P10 remplace le bouton (8). Les boutons P4, P5, P9 offrent le cas échéant des clones de fonctions appartenant à d'autres modes.

Parmi les huit boutons rotatifs, deux ont des attributions immuables :

Les autres boutons rotatifs (numéros (2) ; (3) ; (4) ; (5) ; (6) ; (7)) commandent des paramètres qui dépendent du mode courant de commande.

Les boutons-poussoirs déterminent le mode de commande comme suit.

O

Le bouton-poussoir ENREGISTREMENT fait basculer entre le mode spécial et le mode vide.

Pour arrêter le piano électrique, passer en mode spécial et appuyer sur la succession de boutons-poussoirs : LECTURE, ARRÊT, AVANCE RAPIDE, REMBOBINAGE, BOUCLE.

Pour ajuster l'enveloppe particulière à chaque harmonique, passer en mode spécial et manipuler les tirettes correspondantes.

Pour sauvegarder l'ensemble des réglages du piano électrique, passer en mode spécial et appuyer sur le bouton-poussoir AVANCE RAPIDE.

Pour rappeler un ensemble de réglages du piano électrique, passer en mode spécial et appuyer sur le bouton-poussoir REMBOBINAGE.

Pour sortir du mode spécial il suffit de rappuyer sur le bouton-poussoir ENREGISTREMENT ou de choisir un autre mode, en premier lieu différent du mode percussion.

En mode spécial, le rôle des boutons-poussoirs [1] à [4] est interverti avec celui des coussinets percussifs Pad1 à Pad4. Utiliser seulement ces quatre boutons et quatre coussinets ne fait pas sortir du mode spécial.

>>

Pour enregistrer une configuration de tirettes, ne jouer aucune note et s'assurer d'être en-dehors du mode spécial ; appuyer sur AVANCE RAPIDE, puis appuyer sur une touche du clavier. Ensuite les touches du clavier redeviennent fonctionnelles. Les 128 notes MIDI fournissent autant de préréglages distincts. En mode spécial, ce sont les réglages du piano électrique qui sont sauvegardés de cette manière (fonction identique à celle du bouton-poussoir >|).

>| ou Multi sur Arturia ou [9] sur M-audio ou Track > sur M-audio Oxygen

Si la source MIDI offre le bouton-poussoir FIN (ou équivalent), les réglages du piano électrique sont sauvegardés sur une touche du clavier.

<<

Pour rappeler une configuration de tirettes, ne jouer aucune note et s'assurer d'être en-dehors du mode spécial ; appuyer sur REMBOBINAGE, puis appuyer sur une touche du clavier. Ensuite les touches du clavier redeviennent fonctionnelles. Si rien n'a été sauvegardé auparavant sur cette touche, toutes les harmoniques ont un niveau nul et il n'y a pas de son. En mode spécial, ce sont les réglages du piano électrique qui sont rappelés de cette manière (fonction identique à celle du bouton-poussoir |<).

|< ou Sound sur Arturia ou [8] sur M-audio ou Track < sur M-audio Oxygen

Si la source MIDI offre le bouton-poussoir DÉBUT (ou équivalent), les réglages du piano électrique sont rappelés depuis une touche du clavier.

[]

Pour modifier les formes d'onde, appuyer sur le bouton-poussoir ARRÊT. On est placé dans le mode forme. Les boutons rotatifs muables ont les attributions suivantes.

> ou ||>

Pour modifier les sonorités percussives, appuyer sur le bouton-poussoir LECTURE en-dehors du mode spécial. On est placé dans le mode percussion. Les boutons rotatifs muables ont les attributions suivantes. (L'effet percussif n'est déclenché que si l'échantillon précédent est silencieux.)

() ou ||

Pour cycler entre : son droit, vibrato, chorus, appuyer sur le poussoir BOUCLE. Le cas échéant, il est remplacé par le poussoir PAUSE. On est placé dans tous les cas en mode de réglage vibrato. Pour modifier les paramètres du vibrato et des effets, les boutons rotatifs muables ont les attributions suivantes.

O []

Pour filtrer et équilibrer le son, passer en mode spécial et appuyer sur le poussoir ARRÊT.

O () ou O ||

Pour régler la réverbération et divers autres paramètres, passer en mode spécial et appuyer sur le poussoir BOUCLE. Le cas échéant, il est remplacé par le poussoir PAUSE.

O >

Pour passer en mode lecture, passer en mode spécial et appuyer sur le poussoir LECTURE.

Les boutons-poussoirs numérotés sont absents sur le clavier Alesis.

Les coussinets de percussion (pads) sont indisponibles sur les claviers Alesis dans leur configuration à la sortie d'usine. Il est possible de leur attribuer le canal MIDI adéquat pour pouvoir les utiliser.

Les coussinets de percussion (pads) sont inutilisables sur les claviers Roland avec les réglages qui permettent d'utiliser simultanément touches et contrôleurs.

[4]

Ce bouton-poussoir cycle le vibrato/chorus monophonique comme () dans le mode lecture.

[1] ou [2] ou [3]

Ces boutons-poussoirs fixent la profondeur du vibrato/chorus monophonique ; la qualité son droit/vibrato/chorus choisie par le bouton [4] (ou par () en mode lecture) n'est pas altérée.

[5]

Ce bouton-poussoir cycle entre différents préréglages de clic.

[6]

Ce bouton-poussoir cycle entre différents préréglages de percussion.

[7]

Ce bouton-poussoir cycle entre différents préréglages de réverbération.

[8] (sauf M-audio)

Ce bouton-poussoir cycle entre différents préréglages de formes d'ondes.

[8] ou Track < (M-audio seulement) :

Ce(s) bouton(s) joue(nt) le rôle du bouton |< : rappel de réglages

[9] ou Track > (M-audio seulement) :

Ce(s) bouton(s) joue(nt) le rôle du bouton >| : sauvegarde de réglages

L'enceinte rotative est simulée avec une inertie plus élevée pour les graves que pour les aigus en accéleration mais pas en freinage. Si le son est en vibrato stéréophonique ou chorus, appuyer sur les pads 1 à 3 ne change pas sa nature. S'il est droit, il passe en mode vibrato.

Pad1

vitesse lente pour l'enceinte rotative

Pad2

frein pour l'enceinte rotative

Pad3

vitesse rapide pour l'enceinte rotative

Pad4

suppression du vibrato stéréophonique

Pad5

clic comme le bouton [5]

Pad6

percussion comme le bouton [6]

Pad7

réverbération comme le bouton [7]

Pad8

forme d'onde comme le bouton [8]

NOTA BENE

Si l'on utilise le bouton () (vibrato/chorus stéréo) après une commande demi-lune d'enceinte rotative (Pad1 ou Pad3), pour sauvegarder confortablement les réglages du piano électrique, il faut d'abord fixer de nouvelles valeurs de basses fréquences avec les boutons rotatifs.

Si l'on sauvegarde les réglages après la commande demi-lune de frein Pad2, les vitesses des rotors d'enceinte sont conservées fixes avec la valeur instantanée au moment de la sauvegarde quand on rappelle cet ensemble de réglages.

Ces faits sont dus à la manière dont la progressivité du changement de vitesse des rotors est programmée.

Les préréglages sont fixés dans le module data.ml et peuvent être modifiés par recompilation.

Remarques diverses et dépannage

Correspondance des exécutables

NOTA BENE : si le programme est lancé depuis un terminal, une description des modes est affichée sur la sortie de diagnostic standard (standard error).

La charge du processus le plus gourmand sur la machine est affichée en pourcentage d'utilisation CPU à l'occasion de chaque message de diagnostic.

Un message au démarrage :

pianelM.sh: cannot open /dev/umidi0.0: Device busy
signifie que le programme CLAVIERm n'a pas été arrêté ; il suffit de stopper le piano électrique proprement puis redémarrer ou bien d'exécuter après une interruption par Ctrl-C l'instruction :
killall CLAVIERm
et redémarrer. Pour le script pianelX.sh on doit tuer l'exécutable CLAVIERx.

Les différents exécutables communiquent à l'aide de fichiers placés dans /tmp/pianelIREM/. Au démarrage et à l'extinction, des recopies sont faites avec le contenu du répertoire pianelIREMrc pour les données à sauvegarder d'une session sur l'autre. La recompilation efface les configurations personnalisées.

Certains ports USB d'ordinateurs portables peuvent sembler moins réactifs que d'autres : si une ou plusieurs notes restent bloquées, c'est dû à une incohérence de messages MIDI. La meilleure solution est probablement de choisir de brancher la source MIDI sur une autre prise USB de l'ordinateur.

Plus on met en oeuvre d'effets, de notes simultanées ou d'harmoniques plus la masse de calculs augmente. En cas de saturation du calcul, c'est-à-dire quand la durée de calcul d'un échantillon dépasse la durée de l'échantillon, le piano électrique fait une impasse et tente de se resynchroniser sur l'horloge. Chaque saturation du calcul crée un craquement dans le son. La sortie de diagnostic standard (standard error) affiche une ligne numérotée pour chaque occurrence de saturation du calcul. Une saturation du calcul peut intervenir quand on maintient la pédale sustain enfoncée avec plusieurs notes simultanées, ce qui sollicite le calcul d'enveloppes avec une polyphonie élevée, même quand le niveau de rémanence des notes est presque inaudible. Relâcher la pédale sustain (avec pour effet d'arrêter toutes les notes) devrait résoudre le problème. Le nombre de notes de polyphonie pour une utilisation stable risque donc de diminuer en fonction du nombre d'effets, du nombre d'harmoniques présentes, de la répartition des grappes de notes sur le clavier (un cumul d'harmoniques sur une même note fondamentale économise du calcul) et de la puissance de calcul du processeur. Utiliser des formes d'ondes sinus et triangle seulement est plus économe en ressources. Introduire du signal crénelé ou des sinusoïdes infléchies consomme plus de calcul. Avec beaucoup d'effets et d'harmoniques, sur un processeur d'ordinateur portable courant, le nombre de notes de polyphonie peut descendre jusqu'à une trentaine.

Le fait de choisir un pli bas différent de 0 ou un pli haut différent de 127 permet non seulement de se rapprocher du comportement de certains instruments historiques, mais permet aussi de diminuer la charge de calcul.

Le piano électrique peut être légèrement instable lors d'un démarrage à froid quand beaucoup d'effets sont enclenchés, probablement à cause d'un engorgement de défauts de pages. Des saturations du calcul peuvent intervenir même alors qu'aucune note n'est jouée et lorsque d'autres processus mobilisent l'ordinateur ; il s'agit d'une perte de priorité du processus au profit d'autres processus simultanés sur la machine. Un redémarrage à chaud du piano électrique peut atténuer quelques problèmes.

Des saturations de calcul rares et isolées sont peu gênantes et ne pourront probablement jamais être complètement éliminées sous un système d'exploitation multitâche préemptif, à moins peut-être que l'administrateur système n'effectue un nice négatif.

L'exécutable INITjeux sert à effacer la mémoire des jeux de tirettes sauf les DO60, DO#61, RE62 qui rappellent pleins jeux avec des variantes d'enveloppes pour les harmoniques.

L'exécutable INITreglages sert à effacer-réinitialiser la mémoire des réglages du piano électrique.

L'exécutable TEST_ETAT teste la transformation de l'état du clavier en état du piano électrique.

Organisation générale

Le module cherche_midi.ml

contient la fonction qui détecte quel périphérique MIDI envoie effectivement des données (à condition d'en envoyer).

Le module detect.ml

contient la fonction qui détermine quel est le modèle de clavier MIDI qui envoie des données (à condition d'en envoyer suffisamment).

Le module gravure.ml

sert à enregistrer les messages MIDI en clair avec estampilles temporelles.

Le module data.ml

construit les données et fonctions universelles. Un résumé des caractéristiques principales de quelques instruments historiques y est présenté.

Le module perroquet.ml

sert à rejouer les enregistrement de messages MIDI via le script rejoue.sh. La boucle infinie est du même genre que dans le module pianel.ml (voir explication plus bas).

Le module init.ml

initialise le piano électrique : crée les coefficients de rotation des générateurs.

Le module initJeux.ml

efface la mémoire des jeux.

Le module initReglages.ml

efface les réglages du piano électrique.

Le module clavier.ml

construit un programme sans fin qui transforme les signaux de l'entrée standard (par exemple /dev/umidi0.0) en état du clavier dans /tmp/pianelIREM/etatClavier. Le foncteur Make est à appliquer à une configuration de clavier consignée dans un fichier tel que clavierX.ml où la lettre X correspond au fabricant.

Un récapitulatif des paramètres de réglage est listé dans la suite de cette section ; le memorandum dans le fichier MEMO ou MEMOarturia rappelle toutes les commandes du piano électrique.

Les paramètres centrés par défaut sur la valeur MIDI 64 sont marqués par *. Les paramètres au maximum (valeur MIDI 127) par défaut sont marqués par +++. Les autres paramètres sont à la valeur MIDI 0 par défaut. Le niveau de sortie (swell) est à 0 au démarrage mais à 127 dans toutes les sauvegardes de réglages par défaut.

Modes ou commandes directes

<<		   rappel de jeux
>>    	           enregistrement de jeux
O <<  		   rappel de réglages
O >>  	     	   enregistrement de réglages
|<  		   rappel de réglages
>|  	     	   enregistrement de réglages
8 ou Track <	   rappel de réglages
9 ou Track >	   enregistrement de réglages
4                  vibrato/chorus mono (en mode lecture : forme d'onde)
1, 2 ou 3          profondeur de vibrato mono (en mode lecture : 1 -> clic, 2 -> percussion et 3 -> réverbération)
5 ou Pad5          clic
6 ou Pad6          percussion
7 ou Pad7          réverbération
8 ou Pad8          forme d'onde
Pad1, Pad2 ou Pad3 commande demi-lune pour l'enceinte rotative (en mode lecture : Pad1 -> clic, Pad2 -> percussion, Pad3 -> réverbération)
Pad4               arrêt du vibrato stéréo (en mode lecture : forme d'onde)
[]  		   mode forme
>		   mode percussion
()		   mode vibrato (en mode lecture : vibrato/chorus mono)
||		   mode vibrato
O []		   mode filtrage-équilibrage
O ()		   mode réverbération
O ||		   mode réverbération
O >		   mode lecture           
O > [] >> << ()	   arrêt

mode forme []

swell
* inflexion
déphasage inflexion
déphasage créneaux
niveau inflexion
niveau triangle
niveau créneaux
saturation

mode percussion >

swell
longueur de clic
rémanence
pente de rémanence
niveau de clic
* nervosité du détaché
* traîne de l'enveloppe
saturation

mode vibrato ()

poussoir (entier modulo 3)
demi_lune (entier modulo 4)

swell
différence de profondeur vibrato grave-aigu
différence de fréquence OBF vibrato grave-aigu
différence de déphasage vibrato grave-aigu
excursion vibrato
fréquence OBF vibrato
déphasage rotation
saturation

mode filtrage-équilibrage O []

swell
* diapason
octave
* rose
* coupure filtre
* timbre (équilibre grave-aigu)
* équilibre gauche-droite
saturation

mode réverbération O ()

swell
+++ délai de réverb
+++ pli haut
différence de trémolo grave-aigu
niveau de réverb
pli bas
trémolo
saturation

mode lecture O >

poussoir_mono
poussoir_clic
poussoir_percu
poussoir_reverb
poussoir_forme

mode spécial O

Le rôle des boutons-poussoirs 1 à 4 est interverti avec celui des pads 1 à 4.

Les modules alesis.ml, arturia.ml, m_audio.ml, roland.ml

contiennent des numéros de contrôleurs MIDI par défaut de différentes sources MIDI à la sortie d'usine. Les claviers Roland et Alesis ne sont pas directement prêts à l'usage : il faut faire quelques ajustements sur la machine selon le protocole décrit dans la page correspondante.

Le module omega.ml

contient des numéros de contrôleurs MIDI pour un appareil générique accueillant les messages provenant d'un filtre UNIX.

Les modules filtre_akai_mpk.ml, filtre_eagletone.ml, filtre_evolution.ml, filtre_samson.ml, filtre_tty.ml

forment des exemples de filtres pour envoyer les messages MIDI sur le clavier générique.

Les modules clavierA.ml, clavierM.ml, clavierO.ml, clavierR.ml, clavierS.ml

appliquent le foncteur Clavier.Make aux sources MIDI normales.

Le module etat.ml

transforme l'état du clavier de /tmp/pianelIREM/etatClavier en état du piano électrique dans /tmp/pianelIREM/etatPianel.

Le module test_etat.ml

sert à tester le module Etat.

Le module manivelle.ml

fabrique chaque échantillon sonore en stéréo 16 bits (signés) avec 44100 points d'échantillonnage par seconde.

La taille du vecteur échantillon par défaut est 882 et peut être modifiée par recompilation.

Ces deux dernières valeurs numériques sont fixées dans le module data.ml.

Une taille d'échantillon plus longue donne un clavier moins réactif et un peu moins de charge sur le processeur, une taille plus courte facilite le jeu rapide mais est plus exigeante pour l'ordinateur.

Cette taille influence la ligne à retard utilisée pour le vibrato stéréophonique et la réverbération. (Le vibrato monophonique a une fréquence relativement élevée et une faible profondeur.) La taille d'échantillon influence aussi l'enveloppe de clic.

Le parcours du signal est le suivant :

  1. générateurs, clic, effets simples et filtre :
  2. effets - chacun des deux signaux grave, aigu passe dans un cheminement : vibrato, chorus, rotation - en incorporant le filtrat correspondant de la ligne de retard principale -> ( gauche ; droite )
  3. sortie - les quatre signaux grave gauche, grave droit, aigu gauche, aigu droit sont tous incorporés dans le cheminement :
La réverbération et le vibrato stéréophonique utilisent substantiellement l'échantillon précédent ; le filtrage et le vibrato monophonique l'utilisent à la marge.

Le module pianel.ml

construit la boucle infinie qui ordonne la fabrication des échantillons sonores en fonction de la date.

Si la commande sleep sur l'ordinateur accepte un argument non entier, la boucle est mise en sommeil par morceaux d'une millisecondes jusqu'à l'échéance du prochain échantillon. L'utilisation du processeur (ou de l'un des processeurs) peut varier entre quelques pourcents et 100%, auquel cas on déclenche la saturation de calcul (production de clocs en sortie son).

Si la commande sleep ne convient pas (rares sont les systèmes avec une fonction sleep qui n'accepte que des durées entières), une action stérile est faite dans l'entretemps pour garder la main : Dans ce cas l'utilisation du processeur (ou de l'un des processeurs) est obligatoirement 100% même dans le cas où la génération du son charge peu la machine.

Copyright Stéphane Grognet
IREM des Pays de la Loire - Université de Nantes
Laboratoire de mathématiques Jean Leray UMR 6629 CNRS
version 1.0

Author(s): Stéphane Grognet
Version: 1.0
Since 2014, 2015