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 paramètres physiques sont modifiables à la volée.

L'orgue IREM n'a pas l'ambition des simulateurs habituels dédiés aux orgues Hammond, Farfisa, Vox..., 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.

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. retard,
  9. 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.

Aide

Un memorandum des commandes de l'orgue est disponible dans le fichier MEMO.

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 canal MIDI utilisé par l'orgue est celui qui est envoyé sur l'entrée standard du programme "CLAVIERs" ou "CLAVIERm". Pour les scripts "orgueS.sh", ou "orgueM.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.

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 deux configurations sont disponibles : le type Alesis et le type M-audio.

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.

Mode d'emploi et maintenance

Compilation

La compilation normale est réalisée en exécutant :

sh compile.sh

Démarrage

L'orgue est lancé en exécutant l'instruction suivante :

sh orgueS.sh
ou bien
sh orgueM.sh
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.

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

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. Un résumé de tous les organes de commande est placé dans le fichier MEMO.

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.

<<

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.

[]

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.

>

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.)

()

Pour cycler entre : son droit, vibrato, chorus, appuyer sur le poussoir BOUCLE. 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.

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 orgueS.sh on doit tuer l'exécutable CLAVIERs.

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, 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 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 clavierS.ml ou clavierM.ml.

Les modules alesis.ml, m_audio.ml

contiennent des numéros de contrôleurs MIDI par défaut de différentes sources MIDI à la sortie d'usine.

Les modules clavierS.ml, clavierM.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ération et mélange des ondes sinus et créneaux,
  2. ajout de clic et percussion,
  3. ajout de réverbération puis sauvegarde de l'échantillon monophonique pour constituer la ligne à retard de l'échantillon suivant,
  4. filtre passe-bas,
  5. oscillation basse fréquence, vibrato, chorus et rotation : ici le signal peut devenir stéréophonique,
  6. amplification (swell), saturation et expédition.
La réverbération et le vibrato utilisent substantiellement l'échantillon précédent ; le filtre passe-bas 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.2

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