Sujet Se lancer dans la composition algorithmique et l'aide à l'écriture avec Common Music
- 69 réponses
- 6 participants
- 5 306 vues
- 8 followers
amleth
1379
AFicionado·a
Membre depuis 22 ans
Sujet de la discussion Posté le 01/06/2008 à 13:40:21Se lancer dans la composition algorithmique et l'aide à l'écriture avec Common Music
L'outil de composition ultime : Common Music, écrit par Heinrich Taube... http://www.music.uiuc.edu/facultyBio.php?id=85
En suite à ce thread : /environnement-de-developpement-audio/cycling-74/Max-MSP/forums/t.198444,travail-midi.html
Prérequis :
Common Music n'est rien de plus qu'une librairie de fonctions écrites en LISP. Ce n'est donc ni un logiciel, ni un plug-in. Pour se servir de ces fonctions, il faut s'y connaître un minimum en LISP. Mais il se trouve que ce langage de programmation, qui a désormais 50 ans, est très abstrait, très haut niveau, et enquiquine jamais ses utilisateurs avec des considérations informatiques ésotériques (comme la gestion de la mémoire...). C'est à mon sens un des langages les plus simples à maîtriser.
Pourquoi utiliser un langage de programmation et pas un outil graphique ?
Parce qu'ainsi, on bénéficie de toute la flexibilité de l'écriture pour définir, manipuler et modifier des structures musicales. Common Music permet donc de formaliser des idées musicales, de les développer, de les réutiliser d'un morceau à l'autre. C'est une sorte de "partition potentielle", pour reprendre un terme cher aux développeurs d'OpenMusic à l'IRCAM. Common Music, c'est la dimension abstraite de la musique : les structures, la notation, les algorithmiques, les "idées". Concrètement, ça génère des fichiers MIDI, qu'il faut ensuite exploiter dans un séquenceur avec des VSTi. Common Music ne produit donc que des notes, et pas des sons, d'où son rapprochement avec la notion de partition.
Comment commencer ?
La transcription hypertexte du livre de Taube est disponible ici : https://www.music.mcgill.ca/%7Eferguson/Notes%20from%20the%20Metalevel/nm/index.html.
Mais il faut également avoir un environnement LISP qui tourne. LISP est un très vieux langage qui possède une histoire très fournie. Plusieurs versions (on dit : "implémentations") de LISP on vu le jour en 50 ans. Aujourd'hui, je vous propose d'utiliser la version Allegro Common Lisp, de Franz Lisp.
Première chose : télécharger un environnement LISP. Je vous laisse aller là :
http://www.franz.com/downloads/allegrodownload.lhtml
Une fois installé, vous avez un environnement pour faire du LISP. Chouette. Mais comment ? LISP est avant tout un langage interprété : vous allez écrire des expressions dans la fenêtre de droite (dans des fichiers texte), puis les évaluer (grâce à Ctrl+E), et voir le résultat dans la fenêtre de gauche, dite fenêtre de debug.
Je ne vais pas faire ici un tuto pour le LISP, car Notes From The Metalevel propose d'apprendre le LISP en visant directement un usage compositionnel.
Seconde chose : il vous faut Common Music.
Alors... rendez-vous ici : http://commonmusic.sourceforge.net/doc/cm.html, téléchargez l'archive, et décompressez là qqpart. Vous avec un dossier "cm", qui contient le code source des fonctions.
Comment l'utiliser dans Allegro Express ? Fastoche ! Créez un nouveau fichier texte dans l'éditeur, et écrivez ces deux premières lignes :
(load "<chemin du dossier cm>/src/cm.lisp")
(in-package :cm)
Faites Ctrl+E sur chacune, et voilà que l'environnement se met à charger les fonctions...
En suite à ce thread : /environnement-de-developpement-audio/cycling-74/Max-MSP/forums/t.198444,travail-midi.html
Prérequis :
Common Music n'est rien de plus qu'une librairie de fonctions écrites en LISP. Ce n'est donc ni un logiciel, ni un plug-in. Pour se servir de ces fonctions, il faut s'y connaître un minimum en LISP. Mais il se trouve que ce langage de programmation, qui a désormais 50 ans, est très abstrait, très haut niveau, et enquiquine jamais ses utilisateurs avec des considérations informatiques ésotériques (comme la gestion de la mémoire...). C'est à mon sens un des langages les plus simples à maîtriser.
Pourquoi utiliser un langage de programmation et pas un outil graphique ?
Parce qu'ainsi, on bénéficie de toute la flexibilité de l'écriture pour définir, manipuler et modifier des structures musicales. Common Music permet donc de formaliser des idées musicales, de les développer, de les réutiliser d'un morceau à l'autre. C'est une sorte de "partition potentielle", pour reprendre un terme cher aux développeurs d'OpenMusic à l'IRCAM. Common Music, c'est la dimension abstraite de la musique : les structures, la notation, les algorithmiques, les "idées". Concrètement, ça génère des fichiers MIDI, qu'il faut ensuite exploiter dans un séquenceur avec des VSTi. Common Music ne produit donc que des notes, et pas des sons, d'où son rapprochement avec la notion de partition.
Comment commencer ?
La transcription hypertexte du livre de Taube est disponible ici : https://www.music.mcgill.ca/%7Eferguson/Notes%20from%20the%20Metalevel/nm/index.html.
Mais il faut également avoir un environnement LISP qui tourne. LISP est un très vieux langage qui possède une histoire très fournie. Plusieurs versions (on dit : "implémentations") de LISP on vu le jour en 50 ans. Aujourd'hui, je vous propose d'utiliser la version Allegro Common Lisp, de Franz Lisp.
Première chose : télécharger un environnement LISP. Je vous laisse aller là :
http://www.franz.com/downloads/allegrodownload.lhtml
Une fois installé, vous avez un environnement pour faire du LISP. Chouette. Mais comment ? LISP est avant tout un langage interprété : vous allez écrire des expressions dans la fenêtre de droite (dans des fichiers texte), puis les évaluer (grâce à Ctrl+E), et voir le résultat dans la fenêtre de gauche, dite fenêtre de debug.
Je ne vais pas faire ici un tuto pour le LISP, car Notes From The Metalevel propose d'apprendre le LISP en visant directement un usage compositionnel.
Seconde chose : il vous faut Common Music.
Alors... rendez-vous ici : http://commonmusic.sourceforge.net/doc/cm.html, téléchargez l'archive, et décompressez là qqpart. Vous avec un dossier "cm", qui contient le code source des fonctions.
Comment l'utiliser dans Allegro Express ? Fastoche ! Créez un nouveau fichier texte dans l'éditeur, et écrivez ces deux premières lignes :
(load "<chemin du dossier cm>/src/cm.lisp")
(in-package :cm)
Faites Ctrl+E sur chacune, et voilà que l'environnement se met à charger les fonctions...
And we're going to have this transitory cow fling thing right here in Cicely?
deb76
3728
Squatteur·euse d’AF
Membre depuis 20 ans
2 Posté le 01/06/2008 à 17:27:05
Citation : Et bien sûr, tout (les environnements LIPS + Common Music) est absolument gratuit.
amleth, j'ai suivi tes indications mais j'ai l'impression que la version d'Allegro Common Lisp, de Franz Lisp n'est fonctionnelle que durant 1 mois. Après, semble-t-il, il faut l'updater pour 599 dollars... Mais je me trompe peut-être...
De même, que faut-il télécharger pour Common Music. Moi je tourne sur windows et comme je ne vois pas de version pour cet OS, guide moi. Faut-il prendre dans "any". D'autre part, il y a cm, cm-gtk, Grace... Il faut aussi prendre midi share, je suppose. Ce n'est pas très clair quand on est novice.
amleth
1379
AFicionado·a
Membre depuis 22 ans
3 Posté le 01/06/2008 à 17:44:14
La licence de la version express n'expire jamais. En tout cas, moi je tourne avec depuis des semestres, aussi bien sur ma version windows que linux.
Télécharge ça :
http://commonmusic.sourceforge.net/cm.tgz
Ce n'est que du code LISP, donc il n'y a ni version windows/osx/linux. Juste une archive, qui te donne le dossier "cm"...
Télécharge ça :
http://commonmusic.sourceforge.net/cm.tgz
Ce n'est que du code LISP, donc il n'y a ni version windows/osx/linux. Juste une archive, qui te donne le dossier "cm"...
And we're going to have this transitory cow fling thing right here in Cicely?
deb76
3728
Squatteur·euse d’AF
Membre depuis 20 ans
4 Posté le 01/06/2008 à 19:34:47
Bon, ça commence mal.
Tu me dis que pour charger les fonctions il faut faire ceci :
(load "<chemin du dossier cm>/src/cm.lisp"
(in-package :cm)
Donc, j'ai indiqué le chemin comme ceci :
(load "C:Program Filesacl81-expresscm/src/cm.lisp"
(in-package :cm)
Mais manifestement j'ai fait une erreur.
Mon dossier cm est inséré dans celui d'acl81. Où est mon erreur. Je sais que dans ce genre de formule tout à son importance, guillemets, parenthèses, etc... D'ailleurs, dans ton exemple, la première ligne n'est pas fermée par la parenthèse, ceci étant j'ai essayé mais c'est pareil.
Tu me dis que pour charger les fonctions il faut faire ceci :
(load "<chemin du dossier cm>/src/cm.lisp"
(in-package :cm)
Donc, j'ai indiqué le chemin comme ceci :
(load "C:Program Filesacl81-expresscm/src/cm.lisp"
(in-package :cm)
Mais manifestement j'ai fait une erreur.
Mon dossier cm est inséré dans celui d'acl81. Où est mon erreur. Je sais que dans ce genre de formule tout à son importance, guillemets, parenthèses, etc... D'ailleurs, dans ton exemple, la première ligne n'est pas fermée par la parenthèse, ceci étant j'ai essayé mais c'est pareil.
amleth
1379
AFicionado·a
Membre depuis 22 ans
5 Posté le 01/06/2008 à 20:30:38
Bon, il faut que je repasse sous Windows alors pour aller vérifier ça de mes mains.
A très vite...
A très vite...
And we're going to have this transitory cow fling thing right here in Cicely?
amleth
1379
AFicionado·a
Membre depuis 22 ans
6 Posté le 01/06/2008 à 20:49:51
OK, j'ai testé sur mon PC windows.
Alors,
(load "c:/Program Files/acl81-express/cm/src/cm.lisp")
(in-package :cm)
Dans ce que tu m'as inqiqué, il manque un paquet de "/" pour séparer les répertoires... ;)
Un petit coup de
(note 57)
pour s'assurer qu'on a bien le la...
hihihi
Alors,
(load "c:/Program Files/acl81-express/cm/src/cm.lisp")
(in-package :cm)
Dans ce que tu m'as inqiqué, il manque un paquet de "/" pour séparer les répertoires... ;)
Un petit coup de
(note 57)
pour s'assurer qu'on a bien le la...
hihihi
And we're going to have this transitory cow fling thing right here in Cicely?
deb76
3728
Squatteur·euse d’AF
Membre depuis 20 ans
7 Posté le 01/06/2008 à 22:57:47
Citation : il manque un paquet de "/" pour séparer les répertoires...
Oui, je n'ai pas bien compris pourquoi car je les avais mis. Mais j'ai fait plusieurs copier-coller, je voulais éviter la petite figurine narquoise que tu insères. A éviter pour des exemples.
Sinon, le chemin est bon, sauf que tu n'as pas mis la fin de parenthèse sur la première ligne.
Je viens de me rendre compte que c'est AF qui met ces petites figurines, d'où la disparition de la fin de parenthèse...
Donc, pour moi, et pour d'autres sur PC qui seraient intéressés, le chemin à inscrire est donc celui-ci :
(load "c:/Program Files/acl81-express/cm/src/cm.lisp")
(in-package :cm)
Avec les guillemets et les parenthèses. Autant que ma souffrance d'être complètement désemparé serve à quelque chose.
Et maintenant que le package est chargé que me conseilles-tu de faire. Il y a-t-il des patchs de démonstration que je pourrais regarder ?
Sinon, il y a des pièges. Je ne te dis pas pour les débutants qui n'ont jamais approché Lisp, ça ne va pas être évident. Exemple :
J'ai évalué
cm> 44100
44100
cm> #xFFFF
65535
cm> .500
0.5
cm> "Ondes Martenot"
"Ondes Martenot"
cm>
et au début je ne voyais rien. Car je me référais au tutorial de Taube mais je ne voyais aucun résultat apparaître. Et pour cause. Puis je me suis rappelé, grâce à Patchwork et Open Music, qu'il y avait un éditeur et la fenêtre "debug" et où apparaissent les résultats. Chose, d'ailleurs que tu avais signalé plus haut mais dont on ne se rappelle plus quand on est face à l'interface. Donc, pour ceux qui veulent se lancer comme moi, comme ça je ne serai pas seul, il y a la fenêtre d'éditeur et à côté la fenêtre debug, c'est là que vous trouverez les résultats.
De même, le backquote caractère, au début on se fait avoir, on prend l'apostrophe et ce n'est pas bon.
J'ai regardé les calculs, la fonction random, tout ça c'est bon. Je retrouve quelque part mes marques de Patchwork.
Mais j'ai des soucis avec
(define albans-row '(0 3 7 11 2 5 9 1 4 6 8 10)), je n'obtiens qu'un message d'erreur.
Mais maintenant, comment je passe à CM Car pour l'instant, c'est uniquement du Lisp ?
Mais c'est vraiment sympa. Ca me plait.
.
luciolis
6796
Je poste, donc je suis
Membre depuis 21 ans
8 Posté le 01/06/2008 à 23:10:13
amleth
1379
AFicionado·a
Membre depuis 22 ans
9 Posté le 02/06/2008 à 09:05:13
--- une précision utile qui peut servir à tout le monde ---
AH, HONTE SUR MOI !
J'ai oublié de vous préciser quelque chose d'hyper important.
Il existe deux principaux dialectes LISP : le Common LISP et le SCHEME.
A notre niveau, et pour ce que nous voulons faire, il n'y a qu'une infimie différence purement syntaxique :
EN LISP :
Pour définir une variable, on fait (setq blip "blop"), ce qui a pour effet de mettre la chaîne "blop" dans une variable nommée blip.
Le setq est une contraction de "set quote", le "quote" (') en LISP permettant de bloquer l'évaluation. Et oui, au moment de son affectation, la variable blip ne possède encore aucune valeur, il faut donc bloquer son évaluation.
Pour définir une fonction, on fait :
(defun nom-fonction (param1 param2 param3)
(print "coin coin"))
PAR CONTRE, EN SCHEME :
On fait identiquement :
(define blip "blop")
(define (nom-fonction param1 param2 param3)
(print "coin coin))
OR, IL SE TROUVE QUE LE LIVRE DE TAUBE EST ECRIT EN SCHEME... et que je vous ai guidé vers un environnement Commpon LISP. Mea Culpa, c'est une déformation professionnelle. Common Lisp est un langage bien plus puissant que Scheme, même si pour faire tourner Common Music, on s'en moque un peu. A force de n'utiliser que Common Lisp, j'en oublie même que Scheme existe. Désolé de vous avoir fait perdre du temps là-dessus.
Deb76, pour commencer, en dehors du livre hypertexte que tu connais déjà, il existe quatre petits fichiers très bien faits dans le dossier "cm" :
/cm/etc/tutorials/
Commencer par intro.lisp...
Qui te permettra de faire un joli sinus qui s'entend !
Il y a d'autres fichiers de démo bien fouttus dans :
/cm/etc/examples/
Il existe un dictionnaire (HTML) des fonctions, très clair :
/cm/doc/dict/index.html
Voilà pour l'instant, tiens moi au courant et pose moi des questions plus précises quand tu auras jeté un oeil à tout ça...
Th.
AH, HONTE SUR MOI !
J'ai oublié de vous préciser quelque chose d'hyper important.
Il existe deux principaux dialectes LISP : le Common LISP et le SCHEME.
A notre niveau, et pour ce que nous voulons faire, il n'y a qu'une infimie différence purement syntaxique :
EN LISP :
Pour définir une variable, on fait (setq blip "blop"), ce qui a pour effet de mettre la chaîne "blop" dans une variable nommée blip.
Le setq est une contraction de "set quote", le "quote" (') en LISP permettant de bloquer l'évaluation. Et oui, au moment de son affectation, la variable blip ne possède encore aucune valeur, il faut donc bloquer son évaluation.
Pour définir une fonction, on fait :
(defun nom-fonction (param1 param2 param3)
(print "coin coin"))
PAR CONTRE, EN SCHEME :
On fait identiquement :
(define blip "blop")
(define (nom-fonction param1 param2 param3)
(print "coin coin))
OR, IL SE TROUVE QUE LE LIVRE DE TAUBE EST ECRIT EN SCHEME... et que je vous ai guidé vers un environnement Commpon LISP. Mea Culpa, c'est une déformation professionnelle. Common Lisp est un langage bien plus puissant que Scheme, même si pour faire tourner Common Music, on s'en moque un peu. A force de n'utiliser que Common Lisp, j'en oublie même que Scheme existe. Désolé de vous avoir fait perdre du temps là-dessus.
Deb76, pour commencer, en dehors du livre hypertexte que tu connais déjà, il existe quatre petits fichiers très bien faits dans le dossier "cm" :
/cm/etc/tutorials/
Commencer par intro.lisp...
Qui te permettra de faire un joli sinus qui s'entend !
Il y a d'autres fichiers de démo bien fouttus dans :
/cm/etc/examples/
Il existe un dictionnaire (HTML) des fonctions, très clair :
/cm/doc/dict/index.html
Voilà pour l'instant, tiens moi au courant et pose moi des questions plus précises quand tu auras jeté un oeil à tout ça...
Th.
And we're going to have this transitory cow fling thing right here in Cicely?
amleth
1379
AFicionado·a
Membre depuis 22 ans
10 Posté le 02/06/2008 à 09:05:41
Citation : C'est un script du genre KARMA?
kezako ?
And we're going to have this transitory cow fling thing right here in Cicely?
- < Liste des sujets
- Charte