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