Musical ML est un projet dans le cadre du cours de Domain Specific Language (DSL). Le groupe est composé de Lisa JOANNO, Nicolas LECOURTOIS et Fabien VICENTE.
Ce DSL est adressé aux musiciens. Ils peuvent retranscrire leur partition littéralement sur notre DSL. À partir de ce DSL, ils peuvent lancer le code généré directement sur un Arduino.
Le code généré joue la musique sur un haut-parleur et transmet des commandes au LCD pour afficher des animations correspondantes à la dite musique.
Voici une vidéo de démonstration du projet :
La syntaxe du DSL est la suivante :
color blue
speaker 8
screen 12
bpm 170
key ¤
serial HIGH
Vous pouvez donc spécifier la couleur des leds du LCD, le pin du haut-parleur, le pin de l'écran LCD, le tempo de la musique, les altérations à la clef de votre partition (voir la partie Altération), et activer ou non le LCD.
Ensuite, la partition commence.
Par exemple, pour la partition du générique de Game Of Thrones best serie ever :
Le DSL correspondant est le suivant :
score
-first- { sol3 do mi- fa- } -first- -first- -first-
-second- { sol3 do =mi- fa-} -second- -second- -second-
sol3+. do+. mi- fa- sol+ do mi- fa- re+. $-
fa+. si2+. mi3- re- fa+ si2 mi3- re- do+.
Chaque note a une hauteur. Le La de référence 440 a pour hauteur 3. Pour représenter une note à la noire sans altération, il suffit de spécifier son nom et sa hauteur :
sol3
Les notes qui suivront auront la même hauteur jusqu'à ce qu'une nouvelle hauteur soit spécifiée pour une note.
La durée par défaut d'une note est la noire. Placer un '+' après le nom d'une note double sa durée. Une '-' la divise par deux. Ainsi, si la note est 'la' une blanche s'écrira 'la+', une ronde 'la++', une croche 'la-' et ainsi de suite. Si votre note est pointée, placez un point à la suite de la durée. Par exemple un mi pointée s'écrira :
mi++.
Le silence peut être exprimé via le caractère '$' suivi, comme pour les notes, de sa durée. Par défaut, la durée de la noire. Le demi-soupir s'écrit donc :
$-
Placer '#', '¤' ou '=' devant votre note lui ajoute une altération accidentelle.
# Alt Gr + 3 correspond au dièse ♯
¤ Alt Gr + $ correspond au bémol ♭
= = correspond au bécarre ♮
Exemple du ♭la:
¤la
Pour déclarer que ce qui suit est le début de la transcription de votre partition, écrivez le mot "score", comme dans l'exemple :
score
la3 mi-.
Vous pouvez définir une suite de notes qui sont répétées, telles qu'un refrain. Pour cela, vous pouvez définir :
-refrain- { la3 mi }
Par la suite, vous pouvez réutiliser ces notes en écrivant :
-refrain-
A noter que vous pouvez définir vos répétitions avant ou après le début de partition ("score"). Par exemple vous pouvez utiliser :
-refrain- { la3 mi }
score
fa3 -refrain- mi3
Lorsque vous avez écrit votre DSL, placez-le dans input.txt. Lancez le script :
$ ./generate.sh
Un fichier output.txt est apparu.
Dans ArduinoIDE, copiez le contenu du fichier output.txt, sélectionnez le bon port, et profitez de votre musique !
Si vous souhaitez utiliser l'écran, vous devez faire les configurations nécessaires (voir la partie Configuration).
L'utilisation complète du DSL nécessite d'avoir installé :
- Arduino IDE 1.6
- Python 2.7
- L'écran LCD, qui est une Arduino Duemilanove ou Diecimila
Pour regénérer grammaires et binaires des ML :
./build.sh
Après avoir uploadé votre musique, repérez le port de l'arduino Uno (par exemple : "/dev/ttyACM0") et celui de l'arduino Duo. Puis, lancez :
python SerialPipe.py [PORT_UNO] [PORT_DUO]
Note : vous devez avoir uploadé une musique avec serial HIGH.
Rebootez votre Arduino Uno. Enjoy !
===================
Written with StackEdit.