Se lancer dans la composition algorithmique et l'aide à l'écriture avec Common Music
- 69 réponses
- 6 participants
- 5 318 vues
- 8 followers
amleth
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?
jbfairlight
A propos de la composition assistée ou speudo automatique voir intelligente Auriez vous eu vent de logiciels ou patch faisant un parallèle avec le jeu de la vie par exemple ?
Je n'utilise pas (encore ?) C.M., j'ai une petite expérience des patchs P.D. (OS/X, Linux et Irix) et Max/Fts (NeXT ISPW) et aussi de CSound. J'aimerais bien pour le "fun" faire une espèce d'adaptation des critères d'évolutions d'une cellule en composition comme par exemple le jeu de la vie...
Je sais qu'il existe un exemple "life" dans C.M. mais je n'ai pas encore regardé (bientôt des que j'ai plus de temps, après la schématisation des cartes Fairlight CMI-01-A-rev4 et N.E.D. SS5-280
Donc qui a l'expérience de ce genre de patch / logiciels ?
merci: mais NON pas de VST... j'aime avoir les sources
amleth
1. http://www.wordecho.org/code/cmcode/cmusic.html Je n'ai pas regardé, mais il semble y avoir un game of life ici. Tu parles le LISP ? Pour ma part, je n'ai jamais expérimenté ce genre de trucs... mais comme tu le dis, pour le fun, on doit bien pouvoir trouver une utilisation amusante et musicale de ce type de schéma.
2. Je vais couper les cheveux en quatre, mais je suis assez "contre" cette idée de la composition automatique ou intelligente. Utiliser un algorithme, c'est ni plus ni moins utiliser une règle d'écriture, au même niveau des automatismes dont se dotaient les compositeurs classiques pour écrire des symphonies et des sonates. Le truc que permet l'algorithme, c'est la formalisation des règles. Après, le bon compositeur, c'est celui qui va tripatouiller le résultat de l'algo pour lui conférer un intérêt musical humain. Faut voir comment Boulez et les autres compositeurs comtemporrains traffiquent les résultats de leurs moules formels.
3. Donc oui moi aussi ça m'intéresse le game of life... essayons de générer qq midifiles pour voir comment ça sonne ;)
And we're going to have this transitory cow fling thing right here in Cicely?
deb76
amleth j'ai trouvé ça sur le net concernant des tests pour midishare et Common Music :
http://www.koders.com/lisp/fid307E7A44C54DB897555D333CB45EFB184184AC25.aspx
http://www.koders.com/lisp/fidD746EAB20C23D9449D3030A6B472C2737F75AFC5.aspx
http://www.koders.com/lisp/fid92F9133BA879B3244D825F05904BFDEDD49966D0.aspx
http://www.koders.com/lisp/fid94E4639D9916CB803F39F4E92CAD974ABB26BB3F.aspx
Qu'en penses-tu ? Si j'ai bien compris, il doit y avoir des indications pour que je puisse tester midishare avec Common Music, vérifier si le chemin est bien actif ?
Hello jbfairlight
Citation : merci: mais NON pas de VST... j'aime avoir les sources
Oui, dans ton-votre cas je comprends vu tes-vos sources...
A propos, que devient la station Sim ?
amleth et agdgae je ne saurais trop vous conseiller d'aller regarder le blog de jbfairlight, il est passionnant.
Passionné par la remise en état des synthétiseurs musicaux, il avait éctit en avril 2007 tout un sujet sur historique de la 4X, un sujet qui me passionne puisque j'avais vu Morton Subotnick préparer une de ses créations à l'Ircam durant l'été 1981 puis vu en octobre ou novembre la création de Répons de Pierre Boulez à la maison de la Culture de Bobigny. Une année riche, d'ailleurs car dans un tout autre registre j'avais pu voir Gil Evans au New morning. Il a aussi mis en ligne, entre autres "papiers" passionnants, un article sur la
station d'informatique Sim et portée sur le Next. Bref, pour ceux qui ne le connaissent pas, c'est un blog à découvrir d'urgence.
A ce propos jbfairlight puis-je me permettre de référencer ton blog sur mes Nouvelles Chroniques de la Mao ?
jbfairlight
Citation : 1. http://www.wordecho.org/code/cmcode/cmusic.html Je n'ai pas regardé, mais il semble y avoir un game of life ici. Tu parles le LISP ? Pour ma part, je n'ai jamais expérimenté ce genre de trucs... mais comme tu le dis, pour le fun, on doit bien pouvoir trouver une utilisation amusante et musicale de ce type de schéma.
Je ne parle pas courament le LISP Mais je l'ai pratiqué sérieusement dans un ancien labo, il y a ~15 ans... on va dire que je manque de pratique, mais tous comme le velo ca ne doit pas s'oublier tant que ca
Pour l'usage d'un schéma a la "jeu de vie" j'ai deja fait des tests d'interaction d'une composition avec un algo en Max/Fts, et c'est pas si simple que ca, pour que l'ensemble garde une certaine cohérence musicale...
Citation : 2. Je vais couper les cheveux en quatre, mais je suis assez "contre" cette idée de la composition automatique ou intelligente. Utiliser un algorithme, c'est ni plus ni moins utiliser une règle d'écriture, au même niveau des automatismes dont se dotaient les compositeurs classiques pour écrire des symphonies et des sonates. Le truc que permet l'algorithme, c'est la formalisation des règles. Après, le bon compositeur, c'est celui qui va tripatouiller le résultat de l'algo pour lui conférer un intérêt musical humain. Faut voir comment Boulez et les autres compositeurs comtemporrains traffiquent les résultats de leurs moules formels.
Oula... Il me semble que la musique comme la totalité des modes de communication est régie par des règles autrement c'est le chaos
Encore que j'aime beaucoup les fractales il faut que j'arrête de voir / mettre des maths partout...
Citation : 3. Donc oui moi aussi ça m'intéresse le game of life... essayons de générer qq midifiles pour voir comment ça sonne
Comme je le disais des que j'aurais plus de temps...jbfairlight
Citation : A propos, que devient la station Sim ?
Elles vont bien
Vraiment de superbes machines...
Pour informé les "nouveaux" une SIM c'est la Station d'Informatique Musical de l'IRCAM basée sur des NeXT Cube...
A propos, j'ai un ami qui a chez lui deux Kyma Capybara...
C'est dans la même logique / approche que les cartes DSP M860 des SIM de l'IRCAM (2 i860 et 1 TI56001 par carte avec un maximum de 3 cartes par Cube).
Mais, il semble possible de faire un cluster de Cube... maximum 4 cubes donc 12 cartes (24 i860 et 12 TI56001)...
Et, c'est a peu de chose près la même technologie qui a été employé (2 TI56001 par carte avec jusqu'à 12 cartes ce qui fait 24 TI56001).
Voir le site de Symbolic Sound http://www.symbolicsound.com/cgi-bin/bin/view/Company/WebHome
La seule différence de taille, c'est que dans le cas des Capybara la ferme de DSP est externe, et ca permet d'avoir des Soft modernes sous OS/X, Windows...
Alors que sur les SIM c'est toujours NeXTStep 3.2 et le soft n'a pas évolué c'est toujours Max/Fts 0.26 (le plus moderne que je réussi a faire tourner).
Mais il y a de quoi déjà s'amuser sérieusement ;) avec un cube équipé de 3 cartes !
J'en parlerais plus sérieusement dés que j'ai un peu (un jour peut être ?) de temps sur mon blog...
Citation : A ce propos jbfairlight puis-je me permettre de référencer ton blog sur mes Nouvelles Chroniques de la Mao ?
Oui, bien évidemmentAvec grand plaisir
deb76
En effectuant une recherche, j'ai trouvé ceci :
ENIGMES: LA PARTITION NAVIGABLE, un projet de recherche collaboratif et interdisciplinaire en école supérieure d’art de Roland Cahen. Le projet ENIGMES1 (expérimentation de Nouvelles Interfaces Gestuelles pour la Musique et le Son)développé à l’ENSCI (Ecole Nationale Supérieure de Création Industrielle) en 2006-2007 est un projet de recherche et d’expérimentation pédagogique interdisciplinaire associant des étudiants, des enseignants, des
chercheurs et des artistes.
Cela devrait intéresser ehgdae (très intéressant ton tutorial sur la synthèse sonore, pour tes exemples tu devrais utiliser les ressources offertes par Max MSP 5. La démo est totalement fonctionnelle durant un mois et après, avec Max Runtime, tu peux utiliser les patchs qui t'intéressent voire modifier. Je suis en train d'établir un inventaire des [url=http://magelectrique.blogspot.com/ressources de Max MSP 5[/url] et elles sont nombreuses tant au niveau du midi (random et chaos à partir des fractales) et des manipulations audios. C'est en cours, je vais y insérer d'autres patchs et mettre des exemples sonores.
amleth
Dis-moi ce qui se passe quand tu évalues les lilgnes d'un fichier tel que celui-ci :
(load "c:/cm/src/cm.lisp")
(in-package :cm)
(in-package :ms)
(Midishare)
As-tu correctement écrasé le dossier vide cm/src/midishare par le dossier de l'archive : https://sourceforge.net/project/showfiles.php?group_id=9766&package_id=172112 avant de "loader" CM dans Allegro ?
Tu as bien tous les .dll et .ini de MidiShare dans C:\WINDOWS ?
Sinon, après avoir supprimé les sous-dossiers ce qui traînent dans cm/bin, copie moi ce que le debugger affiche quand il recompile CM. Chez moi, ça donne ça :
; Loading c:\cm\src\cm.lisp
; Loading c:\cm\cm.asd
; Loading c:\cm\src\asdf.lisp
; CM install directory: "c:\cm\"
; Compiling "src\\pkg.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\pkg.fasl"
; Compiling "src\\acl.lisp"
; Generating "src\\iter.lisp"
; Compiling "src\\iter.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\acl.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\iter.fasl"
; Compiling "src\\level1.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\level1.fasl"
; Compiling "src\\clos.lisp"
; Compiling "src\\scheme.lisp"
; Generating "src\\utils.lisp"
; Compiling "src\\utils.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\clos.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\utils.fasl"
; Generating "src\\mop.lisp"
; Compiling "src\\mop.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\mop.fasl"
; Generating "src\\objects.lisp"
; Compiling "src\\objects.lisp"
; Generating "src\\data.lisp"
; Compiling "src\\data.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\data.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\objects.fasl"
; Generating "src\\scales.lisp"
; Compiling "src\\scales.lisp"
; Generating "src\\spectral.lisp"
; Compiling "src\\spectral.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\scales.fasl"
; Generating "src\\patterns.lisp"
; Compiling "src\\patterns.lisp"
; Generating "src\\io.lisp"
; Compiling "src\\io.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\io.fasl"
; Generating "src\\scheduler.lisp"
; Compiling "src\\scheduler.lisp"
; Generating "src\\gnuplot.lisp"
; Compiling "src\\gnuplot.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\gnuplot.fasl"
; Generating "src\\plt.lisp"
; Compiling "src\\plt.lisp"
; Generating "src\\sco.lisp"
; Compiling "src\\sco.lisp"
; Generating "src\\clm.lisp"
; Compiling "src\\clm.lisp"
; Generating "src\\midi1.lisp"
; Compiling "src\\midi1.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\midi1.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\scheduler.fasl"
; Generating "src\\midi2.lisp"
; Compiling "src\\midi2.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\midi2.fasl"
; Generating "src\\midi3.lisp"
; Compiling "src\\midi3.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\midi3.fasl"
; Generating "src\\cmn.lisp"
; Compiling "src\\cmn.lisp"
; Generating "src\\fomus.lisp"
; Compiling "src\\fomus.lisp"
; Generating "src\\midishare.lisp"
; Compiling "src\\midishare.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\midishare.fasl"
; Generating "src\\player.lisp"
; Compiling "src\\player.lisp"
; Generating "src\\sc.lisp"
; Compiling "src\\sc.lisp"
; Generating "src\\pm.lisp"
; Compiling "src\\pm.lisp"
; Generating "src\\rt.lisp"
; Compiling "src\\rt.lisp"
; Loading "bin\\allegro_8.1_windows-i686\\scheme.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\spectral.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\patterns.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\plt.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\sco.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\clm.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\cmn.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\fomus.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\player.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\sc.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\pm.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\rt.fasl"
; Saving startup script in "c:\cm\bin\cm.bat"
Et enfin, après avoir tapé (in-package :cm) directement dans la boucle de DEBUG, saisis ensuite dans cette même boucle le nom : *midi-player*, et dis moi ce qui apparait...
On va y arriver..
And we're going to have this transitory cow fling thing right here in Cicely?
deb76
Citation : On va y arriver..
Oui, il n'y a pas de raison.
Citation : (load "c:/cm/src/cm.lisp"
; Loading c:\Program Files\acl81-express\cm\src\cm.lisp
; Loading c:\Program Files\acl81-express\cm\cm.asd
; Loading c:\Program Files\acl81-express\cm\src\asdf.lisp
; CM install directory: "c:\Program Files\acl81-express\cm\"
; Loading "bin\\allegro_8.1_windows-i686\\pkg.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\acl.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\iter.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\level1.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\clos.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\scheme.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\utils.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\mop.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\objects.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\data.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\scales.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\spectral.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\patterns.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\io.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\scheduler.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\gnuplot.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\plt.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\sco.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\clm.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\midi1.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\midi2.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\midi3.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\cmn.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\fomus.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\midishare.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\player.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\sc.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\pm.fasl"
; Loading "bin\\allegro_8.1_windows-i686\\rt.fasl"
Citation : (in-package :cm)
#<The CM package>
Citation : (in-package :ms)
#<The MIDISHARE package>
Citation : (Midishare
)0
Ce qui je suppose indique le port O.
Citation : *midi-player*
J'ai fait un copier-coller et inséré dans la boucle debug après avoir tapé (in-package :cm), ça me donne ceci : (ERROR Attempt to take the value of the unbound variable
`CM::MIDI-PLAYER'.)
Même chose si je tape midi-player
Citation : As-tu correctement écrasé le dossier vide cm/src/midishare par le dossier de l'archive :
Oui, j'ai scrupuleusement suivi tes indications.
amleth
Je ne vois toujours pas ... j'ai étudié les scripts que tu m'as proposés, mais je n'arrive pas à tout évaluer, il doit me manquer un binding lisp / midishare. En fait, je n'en sais rien, je ne suis pas certain d'avoir saisi ce à quoi correspondaient ces codes source...Normalement, l'interface fournie par Taube est suffisante. Je crois que j'arrive à bout de mes idées là. Il faudrait que je puisse voir ta machine. Argh.
And we're going to have this transitory cow fling thing right here in Cicely?
deb76
Citation : (defun full-random (len)
(process for i below len
for dur = (ran :from 0.01 :below 0.3)
output
(new midi
:time (now)
:keynum (ran :from 0 :below 127)
:amplitude (ran :from 0.2 :below 1)
:duration dur)
wait dur))
(events (full-random 48) "thomas.mid" :versioning false :play true)
Quand j'évalue successivement pour la première fois un tel patch , il me donne ceci :
CG-USER(2):
#<The CM package>
CG-USER(3):
FULL-RANDOM
CG-USER(4):
; Autoloading for EXCL::GRAY-OPEN:
; Fast loading from bundle code\streamc.fasl.
; Fast loading from bundle code\efft-1252-base.fasl.
; Fast loading from bundle code\efft-utf8-base.fasl.
; Fast loading from bundle code\efft-void.fasl.
; Fast loading from bundle code\efft-latin1-base.fasl.
"thomas.mid"
Ensuite pour le second fichier :
Citation : (defun sinus (len cycl low hi rhy dur amp)
(process for i below len
output
(new midi :time (now)
:keynum (rescale (sin (* 2 pi (/ i len) cycl))
-1
1
low
hi)
:amplitude amp
:duration dur)
wait rhy))
(events (sinus 80 4 20 100 .1 .1 .6) "intro.mid" )
J'obtiens ça :
SINUS
CG-USER(6):
"intro.mid"
Mais toujours pas trace des fichiers midi. J'ai l'impression que j'ai un problème avec le driver.
Je vais faire deux autres installations sur mes PC fixes dédiés musique. Je vais voir. Pour l'instant, Common Music était installé sur mes deux portables.
- < Liste des sujets
- Charte