Orthorythme : un compilateur de rythme, une notation du rythme.

Pour quoi faire ?  Si vous vous posez cette question, lisez survol.txt.

Voir du code rythmique, tout de suite : p1rhy.txt (source p1l.txt)
(# indique un commentaire fait d’une indication métronomique, suivie éventuellement de notes ou silences)

Voici mon programme d’informatique musicale. Il s’agit d’un compilateur de rythme, composé  d’une partie-avant : le frontal de compilation de rythmes musicaux. Et composé d’une partie-arrière : le générateur de code rythmique.
Il ne s’agit pas exactement d’un pur compilateur pour un langage informatique, car il n’est pas amorçable, mais plutôt d’un évaluateur du rythme (l’analyse syntaxique est dépendante de l’évaluation : entremêlée), suivi d’un traducteur de notation du rythme vers du code rythmique.

Il est utile pour apprendre le rythme musical ou bien vérifier le rythme à partir d’une partition musicale. Il sera nécessaire pour avoir une simple représentation des durées musicales ainsi que pour écouter le rythme.

Le frontal de compilation de rythmes musicaux (évaluateur de rythme)

Le programme effectue la reconnaissance du rythme musical, avec la possibilité de détecter les indications de mesure de la première mesure entrée, suivant un formalisme intuitif décrit ci-dessous.

Comment ça marche ? Si vous vous posez cette question : évalue

Il fonctionne sous DOS, ou linux (orthorythmeX86), ou tout autre système (code-source à compiler avec lex et YACC et un compilateur C) et vous permet de vérifier « la syntaxe » (fixée par les indications de mesure) du rythme d’une partition.

Les notes sont :
o       ronde
d       blanche
!       noire
[       croche
f       double        croche
t       triple          croche
q       quadruple   croche

'_' (souligné) pour lier des notes.

Les silences sont- = < > k x w
         (pause, demi-pause, soupir, demi-soupir, quart de soupir, huitième et seizième de soupir).

Les exceptions à la mesure (duolet, triolet, quartuolet, quintolet, septuolet) sont entrées, entre parenthèses, éventuellement suivies d’un chiffre :
([[[)      triolet de croches
([!)3      le 3 indique un triolet

La mesure (indications de) est entrée comme 2/4 3/4 4/4 5/2 7/4 6/8etc

Exemple du formalisme

Pour la représentation usuelle et graphique suivante :

La saisie du rythme est : 2/4 ! ! | d | ([[[) ! | !. [ ||

Il s’agit d’une mesure simple, à la noire, à deux temps.
1re mesure:        deux noires
2e mesure  :        une blanche (sur le premier et le deuxième temps)
3e mesure  :        un triolet de croches suivi d’une noire
4e mesure  :        une noire pointée et une croche

Attention si vous êtes en interactif, la double barre ‘||’ permet de terminer tout analyse.
Entrez plutôt chaque mesure suivie d’un retour-chariot :
2/4 ! !
d
([[[) !
!. [
||

Nota : La blanche en deuxième mesure, ainsi que la noire pointée en quatrième mesure, peuvent être réécrites avec des liés ‘_’ pour ne pas fournir d’avertissements ; elles ne provoquent, de toutes façons, pas d’erreurs à la compilation.
Nota bene : les espaces entre les temps sont optionnels et la barre
| de chaque ligne est optionnelle.

Néanmoins, si vous décidez de détecter les indications de mesure. Alors, la barre en fin de première mesure compte et les espaces qui indiquent le nombre de temps de la première mesure, aussi :

! ! |
!_!
([[[)!
!_[[
||

Le module de traduction vers du code rythmique

Le programme s’utilise comme partie-arrière du frontal de compilation de rythmes musicaux.
Il accepte la sortie verbeuse de celui-ci et génère à l’aide d’un script écrit en langage AWK, un code rythmique qui est simplement une succession de commandes
echo et sleep du shell (sleep avec paramètre à nombre réel).
Toutefois, ce code rythmique peut être retravaillé pour fournir un code musical ; à compléter avec des hauteurs de notes.

Remarque : on peut définir à l’aide de la variable bat= ??? les battements par minute afin d’accélérer la lecture.

Dans les exemples ci-dessous, je suppose que vous avez compilé le frontal sous cygwin ou linux en le nommant evale3 (orthorythme si vous n’avez pas compilé les sources) et que le traducteur est le script iris.awk .

Exemple d’utilisation du frontal

evale3 <p1l.txt >p1v.txt

Exemples d’utilisation du traducteur

awk -f iris.awk <p1v.txt >p1rhy.sh
awk -v bat=120 -f iris.awk <p1v.txt >p1rhy120.sh

Tapezp1rhy.sh et écoutez

Il s’agit d’un programme en domaine public, disponible avec ses sources (compiler sous cygwin, par exemple).


Frontal de compilation

Le programme (DOS) :   orthorythme.exe
(linux)                  orthorythmeX86

Format du rythme :       p1l.txt   p2l.txt   p3l.txt   p4l.txt

Rythmes élaborés :       arabe.txt   arabe2.txt   arabe3.txt   arabe4.txt   arabe5.txt

Documentation :           grammaire.txt      une note technique
rythme.txt            un article prospectif
survol.txt              un aperçu

Code-source :               evale3.l                le fichier Lex (flex)
evale3.y               le fichier YACC (bison)
evale3.fai             le ‘Makefile’

Version bétonnée :        evale8.l
evale8.y
evale8.fai

Version ultime :             evali3.l                avec ajusteurs de notes '?' et silences '%'
evali3.y               et sérieur sur temps ','
evali3.fai             et réduction des liaisons intra-temps

Version professionnelle evalia.l               avec modification du battement $d.=60
evalia.y               avec schème de temps Fort et faible
evalia.fai             et avec une aide en ligne "--help"
 

                                       evalib.l               avec un nouveau 'digest'
evalib.y
evalib.fai

Extrait didactique :        interprete.txt       la routine interprétative (ré-évaluateur)

Traducteur iRis

Le script AWK :              iris.awk                le générateur de code rythmique

Code rythmique généré : p1rhy.txt          (pour voir du code rythmique avec IE)
p1rhy.sh   p2rhy.sh   p3rhy.sh   p4rhy.sh
p1rhy200.sh        à 200 battements par minute

Archive de l’interpréteur ou évaluateur pur
Nécessite le support du mode ‘raw’ (donnée brute), par exemple avec les ‘curses’.
Nota : l’interpréteur considéré n’a pas de module intégré de traduction vers du code rythmique.

Le programme Python :rhythme.py          (à moi ou à vous de le réécrire !).

Le code-source :           projNOTE.tar        obsolète, source en SmallEiffel


Pour me contacter :   gdridi@club-internet.fr
            Gilles DRIDI                                        (ancien du BTS informatique industrielle – Dorian 1991)
            7, allée du Mascaret
            77200  Torcy   France

L’interpréteur rhythme, le frontal de compilation orthorythme et le traducteur iRis sont des exemples géniaux de petits logiciels applicatifs ; appliqués au rythme musical.

Pour le projet orthorythme, j’ai dû bricoler le « chapeau » en partie lexicale à l’intérieur de %{ %} (code exécuté avant tout autre code de règles) ainsi qu’avec des jetons symboliques fantômes se terminant par E2, L2, étant donnée l’originalité du sujet : compiler avec une grammaire contextuelle, sensible aux indications de mesure.

A propos du classement des logiciels selon leur taille dans le livre intitulé Taming C++ de Monsieur  Jiri Soukup (1994). En quatrième page, il dit : « Large projects typically contain 10,000 -100,000 lines of code, and are beyond the mental capacity of a single programmer. ».
En français : Les grands projets (logiciels) contiennent généralement de 10 000 à 100 000 lignes de code, et sont au-delà des capacités psychiques d’un unique programmeur.
Un “ Word Count ” sur evale8.l et evale8.y donne 5 347 et 3 874 lignes de code soit 9 221 ce qui est plutôt dans une fourchette de 1 000 à 10 000 lignes de code ; si l’on supprime aussi les commentaires et lignes vides. Selon Jiri Soukup, il s’agit de petits projets appréhendables dans leur totalité par une seule personne…

Adage : Un programme bétonné a subi plus de petits tests interactifs, qu’une batterie de tests automatiques.

Enfin, mon désir est de voir, un jour, Google utiliser ce programme musical.