Introduction

Le simulateur d'orgue 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.

L'orgue IREM n'a pas l'ambition des simulateurs habituels dédiés aux orgues électromécaniques ou éléctroniques 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), des orgues électromécaniques à roues phoniques du genre Hammond, à anches électrostatiques du genre Wurlitzer, des orgues électroniques à transistors discrets du genre Vox, Farfisa...

L'orgue 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. filtrage,
  8. distorsion,
  9. retard,
  10. 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.

Aide

Un memorandum des commandes de l'orgue 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.

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, et six (6) boutons-poussoirs de transport style magnétophone : BOUCLE (), REMBOBINAGE <<, AVANCE RAPIDE >>, ARRÊT [], LECTURE >, ENREGISTREMENT O. Ces boutons et curseurs peuvent être sur une autre machine que le clavier si les messages MIDI sont joints sur le même canal. 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.

Le canal MIDI utilisé par l'orgue est celui qui est envoyé sur l'entrée standard du programme "CLAVIERx". Pour la plupart des scripts "orgueX.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.

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.

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 et percussions... 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.

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.

Mode d'emploi et maintenance

Compilation

Les exécutables sont placés dans bin, les bibliothèques dans lib, les configurations dans orgueIREMrc 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

L'orgue est lancé en exécutant l'instruction suivante du dossier bin/ :

sh orgueX.sh
où la lettre X est à choisir selon le type de source MIDI.

Au premier démarrage, une configuration des tirettes pleins jeux est mémorisée sur la touche DO60 (DO central du clavier). Le réglage du son sans aucun effet est uniformément mémorisé sur les 128 touches du clavier MIDI.

À l'arrêt de l'orgue, les préréglages de tirettes et réglages de l'orgue qui ont été enregistrés sont conservés dans le répertoire orgueIREMrc pour être rechargés au prochain démarrage.

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. Il faut modifier les scripts shell en conséquence.

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

Le format de la sortie standard fabriquée par ORGUE est à envoyer dans esdcat qui utilise par défaut /dev/dsp0.0 (haut-parleurs de la machine).

Pour utiliser le jack casque (/dev/dsp1.0) -par exemple sur un ordinateur portable- il faut 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

Le programme esdcat fait partie du paquet Enlighted sound daemon (/usr/ports/audio/esound sous FreeBSD). Remplacer esdcat par l'exécutable play du paquet SOund eXchange (/usr/ports/audio/sox sous FreeBSD) est possible mais son utilisation est plus complexe.

Pour sauvegarder le son de la session, il faut lancer l'un des scripts orgue?brut.sh du répertoire bin/ dont le nom est à choisir suivant la source MIDI -au lieu du script orgue?.sh. Le fichier sonore brut est placé à l'adresse orgueIREMrc/sonBrut. Il suffit de l'importer dans un programme du genre Audacity pour l'exporter par exemple au format WAV.

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 (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 recopie le huitème.

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 l'orgue, passer en mode spécial et appuyer sur la succession de boutons-poussoirs : LECTURE, ARRÊT, AVANCE RAPIDE, REMBOBINAGE, BOUCLE. Pour sauvegarder l'ensemble des réglages de l'orgue, passer en mode spécial et appuyer sur le bouton-poussoir AVANCE RAPIDE. Pour rappeler un ensemble de réglages de l'orgue, 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.

>>

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 de l'orgue qui sont sauvegardés de cette manière (fonction identique à celle du bouton-poussoir >|).

>| ou Max MSB

Si la source MIDI offre le bouton-poussoir FIN (ou Max MSB), les réglages de l'orgue 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 de l'orgue qui sont rappelés de cette manière (fonction identique à celle du bouton-poussoir |<).

|< ou Min LSB

Si la source MIDI offre le bouton-poussoir DÉBUT (ou Min LSB), les réglages de l'orgue 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, passer en mode spécial et appuyer sur le poussoir BOUCLE. Le cas échéant, il est remplacé par le poussoir PAUSE.

Remarques diverses et dépannage

NOTA BENE : si le programme est lancé depuis un terminal, une description des modes est affichée sur la sortie d'erreur standard.

Un message au démarrage :

orgueM.sh: cannot open /dev/umidi0.0: Device busy
signifie que le programme CLAVIERm n'a pas été arrêté ; il suffit de stopper l'orgue 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 orgueX.sh on doit tuer l'exécutable CLAVIERx.

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 plus la masse de calculs augmente. L'orgue peut être instable lors d'un démarrage à froid quand beaucoup d'effets sont enclenchés, probablement à cause d'un engorgement de défauts de pages. L'orgue peut aussi devenir instable s'il n'est pas actif pendant un moment et que d'autres processus mobilisent l'ordinateur (perte de priorité), au point que les messages MIDI deviennent incohérents. Un redémarrage à chaud de l'orgue devrait régler le problème.

L'exécutable INITjeux sert à effacer la mémoire des jeux de tirettes sauf le DO60 qui rappelle pleins jeux.

L'exécutable INITreglages sert à effacer-réinitialiser la mémoire des réglages de l'orgue.

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

Organisation générale

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 init.ml

initialise l'orgue : crée les phases initiales des générateurs ; crée les coefficients de rotation.

Le module initJeux.ml

efface la mémoire des jeux.

Le module initReglages.ml

efface les réglages de l'orgue.

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/orgueIREM/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 de l'orgue.

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

<<		rappel de jeux
>>    	        enregistrement de jeux
O <<  		rappel de réglages
O >>  	     	enregistrement de réglages
|<  		rappel de réglages
>|  	     	enregistrement de réglages
[]  		forme
>		percussion
()		vibrato
||		vibrato
O []		filtrage-équilibrage
O ()		réverbération
O ||		réverbération
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
* différence d'enveloppe de percu grave-aigu
* différence de niveau de percu grave-aigu
niveau de clic
enveloppe de percussion
niveau de percussion
saturation

mode vibrato ()

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
inattribué
différence de trémolo grave-aigu
niveau de réverb
inattribué
trémolo
saturation

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. Le clavier Roland n'est pas directement prêt à l'usage : il faut faire quelques ajustements sur la machine selon le protocole décrit dans la page correspondante.

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

appliquent le foncteur Clavier.Make aux sources MIDI.

Le module etat.ml

transforme l'état du clavier de /tmp/orgueIREM/etatClavier en état de l'orgue dans /tmp/orgueIREM/etatOrgue.

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.

Une taille 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 et la réverbération. Elle influence aussi l'enveloppe de clic et de percussion.

Le parcours du signal est le suivant :

  1. générateurs, clic et filtre :
  2. effets - chacun des deux signaux grave, aigu passe dans un cheminement :
  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 utilisent substantiellement l'échantillon précédent ; le filtre l'utilise à la marge.

Le module orgue.ml

construit la boucle infinie qui ordonne la fabrication des échantillons sonores en fonction de la date. Une action stérile est faite dans l'entretemps pour garder la main : 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 0.4

Author(s): Stéphane Grognet
Version: 0.4
Since 2014