Se lancer dans la composition algorithmique et l'aide à l'écriture avec Common Music
- 69 réponses
- 6 participants
- 5 558 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?

amleth

Des antrhopologues comme Jack Goody ont finement étudié le passage de l'oral à l'écrit (ou des historiens/linguistes comme Sylvain Auroux). Il en est ressorti qu'à chaque technique, une rationnalité propre était associée. On ne pense pas pareil selon les propriétés des substrats matériels qu'on emploie pour véhiculer/produire la connaissance. L'apparition de l'écriture a vu naître l'idée de "grammaire", impensable dans une civilisation orale, car pour créer des paradigmes de déclinaison, il faut pouvoir spatialiser dans un même espace (en listes, tableaux, etc.) les mots prélevés du flux de parole. Bon, maintenant, un des thèmes de recherhce de notre labo, c'est de savoir si le support numérique - algos, calculabilité, dynamicité, etc. - induit également l'apparition d'une nouvelle rationnalité. En gros : est-ce qu'on pense et fait pareil avec du papier/crayon et un ordinateur ? On est bien sûr convaincu que non, que les structures même de notre intellect sont amenées à être reconfigurées.
Tu poses la question dans le champs musical. Common Music, les algorithmes, etc. sont de nouvelles façons d'écrire de la musique. Ce sont avant tout de nouveaux moyens techniques, mais qui permettent de nouvelles catégories de pensée. La question : l'écriture à apporté la grammaire et la théorie à la parole, ok, mais qu'apporte l'algorithme à l'écriture ? On dirait qu'on passe à un niveau d'abstraction ou de généricité supérieur. C'est également l'idée de Heinrich Taube quand il pose le terme de "metalevel" : l'algorithme musical n'est pas la partition, ni l'oeuvre, c'est davantage l'oeuvre potentielle, une sorte de moule génétique formel qui doit "être déroulé" pour donner naissance à une ou plusieurs oeuvres, comme lun schéma grammatical doit être parlé pour donner corps à un contenu langagier qui fait sens.
Cette technicité algorithmique permet d'obtenir des choses que l'espace de la partition en permet pas de penser. Elle se situe à un autre niveau que la partition. C'est un niveau purement formel, celui où on ne représente non plus des contenus musicaux, mais des idées musicales. Voir également les articles de l'équipe Représentation Musicale à l'IRCAM (ceux qui développent OpenMusic...).
De plus, on peut exprimer des choses fascinantes, comme "génère moi douze mille microévénements oscillant aléatoirement autour de telle, telle et telle note et suivant telle, telle et telle évolution paramétrique". On n'écrit pas effectivement els 12000 notes, mais plutôt l'idée qui permet de les produire. Enfin moi, ça me fascine.
Après la question, c'est aussi la question du "style de l'algorithme". Comment reconnaître le "cachet informatique" ? Le résultat n'est qu'une instance du type de déroulement temporel que définit l'algorithme. Comment remonter de l'un à l'autre... voilà une question posée aux musicologues. La structure formelle est explicitée en amont. Elle est écrite, au même titre que ses instances. Mais pas audible : elle ne l'est que par ses instances.
Oh, merde, je crois avoir été un peu chiant. Désolé, c'est un sujet qui me passionne. Bon, j'ai faim.
Hors sujet : Ca se rapprocherait davantage de Poe... c'est Lovecraft en fait. Mais traduit en allemand, parce que c'est une langue que j'affectionne. Mais comme tu l'as vu, je suis également un sacré amateur de Shakespeare... et Goethe est également mon compagnon de chevet...
And we're going to have this transitory cow fling thing right here in Cicely?

deb76

Citation : "events" prend en paramètre un process musical, un fichiers midi, et hop, il en déclenche la lecture.
C'est ce qui me rend perplexe. Car midishare est actif puisqu'il lit les séquences d'Open Music. Ceci étant, comme je te le disais quand je veux exporter la séquence d'Open Music en midi, le fichier est bien écrit mais il est unitilisable, pas reconnu.
Donc, c'est à ce niveau là qu'il faut chercher et je pense que Common Music c'est pareil.
Citation : Ce mauvais format, quel est -il ? Vois-tu un objet ? Qqc sur le disque ?
Non avec Common Music, oui avec Open Music mais fichier illisible.
Citation : Je commence à désespérer : je me faisais une joie de présenter Common Music, et voilà que c'est ininstallable facilement !
On va trouver. De toute façon, je souhaite m'inscrire au forum de l'Ircam pour Open Music, mais je ne le ferai que si j'arrive à exporter mes fichiers en midi et qu'ils soient exploitables. Donc, je vais écrire à l'Ircam pour leur demander conseil, en leur signalant aussi mon problème avec Common Music. Cela serait bien le diable que personne ne me réponde. En 1981, j'ai fait le stage avec Marc Battier, je vais lui demander. Et j'ai le sentiment que si ce problème d'écriture du fichier midi est résolu, il le sera pour Common Music.
Cela va juste prendre un peu plus de temps. Il n'est pas question pour moi d'abandonner. Je suis particulièrement têtu et j'aime comprendre.

deb76

Citation : Si vous permettez, concernant le résultat musical, cette programmation permet-elle d'obtenir des musiques qu'on n'aurait pas idée d'écrire par crayon et papier ? Et le résultat sera-t-il identifiable au moyen qui a permis de l'obtenir ?
Pour ma part, je dis non car l'algorithme n'est qu'un outil parmi tant d'autres. Je m'explique. Il va me permettre d'obtenir un matériel de base sur lequel ensuite je vais travailler. C'est ce que j'ai fait pour la Grande Bleue, une création réalisée pour les journées du patrimoine en 199 autour des Vitraux d'Alfred Manessier en l'église Saint-Sépulcre d'Abbeville. Le matériau en notes midi a été généré de façon aléatoire par Patchwork. Il n'y a que juste l'intro qui est aisément identifiable, et c'était volontaire, car je voulais faire référence à Patchwork. J'avais utilisé pour celle-ci, un Random walk, en réfrence à Xénakis. Pour le reste, j'ai tellement mouliné, joué avec les transpositions, travaillé avec l'Ips de Cubase Vst - qui à partir d'une phase midi, permet de générer des phrases très complexes ainsi que des structures rythmiques.
Ceci étant, cela donne aussi des idées. Pouvoir multiplier des accords, générer des contractions de séquences injouables par ailleurs, construire des clusters, travailler avec des séries harmoniques, les décliner selon des rangs différents (1 3 7 8 912 15 16 17 18 21 23 26 28 - c'est un exemple, autant d'outils fantastiques pour quelqu'un comme moi qui vient du rock et de la tape music électronique.
Citation : De plus, on peut exprimer des choses fascinantes, comme "génère moi douze mille microévénements oscillant aléatoirement autour de telle, telle et telle note et suivant telle, telle et telle évolution paramétrique". On n'écrit pas effectivement els 12000 notes, mais plutôt l'idée qui permet de les produire. Enfin moi, ça me fascine.
Oui, moi aussi.

Anonyme

Hors sujet : ach ja ... Cthulhu !

deb76

Citation : Oh, merde, je crois avoir été un peu chiant. Désolé, c'est un sujet qui me passionne.
Ah, non pas du tout. Je trouve ça très agréable d'échanger ainsi.
Citation : Cette approche de la composition me rappelle l'évolution du déterminisme en cybernétique : au lieu de programmer de façon complexe et complète une entité dans son ensemble (ce qui correspond à l'écriture note à note d'une partition) on préfère, pour se rapprocher davantage du modèle vivant, programmer plus simplement une foule de cellules élémentaires en intégrant des interactions entre-elles (ce qui renvoie aux modules dont vous parlez) et comptant sur les causes initiées pour en attendre des résultats globalement prévisibles mais pourtant étonnants dans leur réalisation.
Oui, à mon sens, nous sommes dans ce registre. J'aime beaucoup ta dernière phrase, avec cet aspect prévisible des résultats mais "pourtant étonnants dans leur réalisations". Et de fait, ces outils me fascinent. Peut-être est-ce le fait d'avoir connu toutes cette évolution de l'informatique musicale.
Dans un autre forum, lesInstruments virtuels (très agréable, très sympa et surtout très convivial grâce à Burnie) on évoquait le geste lié au matériel hardware, en gros le plaisir de tourner un potentiomètre d'un synthé vintage, du rêve de posséder un Moog Modular ou un Ems Synthi Aks, que sais-je. Pour ma part, je disais que mon rêve à moi, c'était la station 4X (ou son équivalent) de l'Ircam car je suis passé de la bande magnètique à directement l'ordinateurlors de mon stage à l'Ircam en 1981. Et donc du temps différé et qui ne me gêne pas. Et j'expliquais que le passage au temps réel, de la puissance des outils que nous, particuliers, nous commençons à avoir, cela me fascinait. Et je suis bien plus intéressé par les possibilités offertes aujourd'hui par Open Music ou Common Music que d'avoir un gros synthé vintage. Car il sera figé dans ses possibilités de création. Ce qui n'est d'ailleurs pas le cas d'un expandeur comme le Clavia G2 Engine qui grâce à son éditeur permet de construire des patchs tout à fait passionnants et très complexes. Là, on dispose d'un synthé qui est réellement une station de travail dans le sens recherche, dans la lignée de l'Ircam. En fait, on créée ses propres synthés et ses propres partitions dans le cadre des performances.
Mais bon, moi aussi je m'égare. Mais une chose est sûre, je suis de plus en plus fasciné. Et je n'ose pas penser à ce que nous allons disposer comme outils dans 10 ans...
J'ai lu il y a très longtemps Herman Hess, et comme beaucoup le fameux Loup des Steppes mais pas "le jeu des perles de verre". Cela me donne envie de le découvrir.
Bon, je vais me replonger dans le mythique Necromonicon d'Abdud Al-Hazred et qui sait rencontrer Charles Dexter Ward qui m'ouvrira enfin les portes de la compréhension du chemin de l'objet midi dans midishare, où enfin, je pourrais maîtriser la magie de Common Music, de ses mystérieux codes se transformant en de multiples séquences musicales sorties du ventre d'un ordinateur. Oui, c'est vraiment fascinant.

jbfairlight


A propos de la composition assistée ou speudo automatique voir intelligente

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



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


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

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 évidemment
Avec 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.

amleth

Chez moi, elle indique l'emplacement de Windows Media Player.
And we're going to have this transitory cow fling thing right here in Cicely?

deb76

Mais bon, ça fonctionne sur l'autre et c'est l'essentiel.
En même temps, j'ai résolu mon problème d'écriture des séquences générées par Open Music en midi. C'est tout bête en fait.
L'écriture des séquences se fait avec en .midi et non pas en .mid. Du coup, mce format n'était pas lu.
En plus, même en effectuant une sauvegarde en .mid directement à partir de la séquence comme c'est possible, le fichier n'était pas bon. J'ai donc mis en sortie de la séquence un module midifile et un second midi out en final. Et là, ô bohneur, je peux enregistrer mes séquences.

arkanovoid


amleth

Les options de sécurité windows sont assez aisées à intégralement désactiver...
Alors, maintenant, as-tu une idée sur ce que tu désires faire avec CM ? Nous allons pouvoir parler de choses plus fondamentales !
And we're going to have this transitory cow fling thing right here in Cicely?

deb76

désolé mais j'ai travaillé toute la journée au journal et je suis rentré tard. Déjà, sans que cela soit une prise de tête, j'aimerais bien générer des clouds, des évènements stochastiques, je pense notamment aux random walk, générer un accord avec des rangs différents d'harmoniques (avec des sauts, pas forcément régulier) et pouvoir décliner le contenu de l'accord généré en une lecture linéaire et non pas verticale.
Les multiplications d'accords me plaisent bien aussi, et puis bêtement générer un nombre X de notes de façon aléatoire tant au niveau de la hauteur, de la durée et du positionnement.
Ah, aussi jouer sur l'offset, contracter ou effectuer un processus d'expansion d'une série d'accords ou de notes. Je faisais ça avec Patchwork et cela donnait des résultats très intéressants.
Et puis, bien entendu, générer une série dodécaphonique, et appliquer toutes les mutations possibles. Est-il possible de faire une transcription du tableau de Boulez ?
De même sur une série, est-il possible de la gérer dans une optique sérielle pure et dure, appliquer à tous les paramètres (la hauteur bien entendu, mais aussi la durée, intensité, etc.) la méthode sérielle ?
Merci en tout cas pour ton écoute.

amleth

Je rentre d'un séminaire qui a duré toute la semaine. Je me repose un peu, et je me penche précisément sur ton mail.
Bien à toi,
Th.
And we're going to have this transitory cow fling thing right here in Cicely?

deb76

Citation : Je rentre d'un séminaire qui a duré toute la semaine. Je me repose un peu, et je me penche précisément sur ton mail.
Salut amleth,
Merci. Ca fait du bien de souffler un peu. Prends ton temps. A bientôt.
Bien à toi.
D.D.

amleth

J'ai juste fait un petit algo qui permet d'afficher le tableau de Boulez à partir de n'importe quelle série.
Pour tes autres questions, tout est possible, facilement même, on y reviendra...
(load "/home/amleth/Desktop/Moi/Composition/CM/src/cm.lisp")
(in-package :cm)
;; Boulez's row !
(setq br '(63 62 57 56 55 54 52 61 60 58 53 59))
;; Fonction auxiliaire de transposition d'une série selon un intervalle
(defun transpose-row (reihe intervall)
(loop for pc in reihe collect (mod (+ pc intervall) 12)))
;; Renvoie la série des indexes de chacune des composantes de "reihe" au sein de "grundgestalt"
(defun indexes-in-gg (grundgestalt reihe)
(let ((gg (rowmod12 grundgestalt))
(rr (rowmod12 reihe)))
(loop for x from 0 to (- (length grundgestalt) 1)
collect (position (list-ref rr x) gg))))
;; Renvoie une série "aplatie" entre 0 et 11
(defun rowmod12 (reihe)
(loop for x from 0 to (- (length reihe) 1)
collect (mod (list-ref reihe x) 12)))
;; Fonction principale
(defun make-boulez-chart (reihe)
(loop for r from 0 to (- (length reihe) 1)
collect (indexes-in-gg reihe (transpose-row reihe (- (first reihe) (list-ref reihe r))))))
;; Pour afficher le beau tableau...
(loop for x in (sort (make-boulez-chart br) #'< :key #'first)
do (print x))
Ah oui, et sinon, pour le générateur purement aléatoire, tu peux t'inspirer de ça, que je t'avais déjà donné :
(defun full-random (len)
(process for i below len
for dur = (ran :from 0.01 :below 0.1)
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)
And we're going to have this transitory cow fling thing right here in Cicely?

deb76

J'ai essayé et c'est fascinant de découvrir le tableau. J'ai testé avec une autre série, avec des intervals différents et ça fonctionne.
Sinon, où puis-je trouver un manuel qui puisse m'expliquer pas à pas ce que tu me fais découvrir. J'ai regardé le dictionnaire de Common Music mais le nom des fonctions est différent (define au lieu de defun; différence aussi pour lancer une séquence. Donc, je ne peux pas m'y référer même si cela me permet de voir les possibilités offertes.
Donc où puis-je trouver les explications concernant ce que tu appelles la fonction auxiliaire de transposition d'une série selon un interval : (defun transpose-row (reihe intervall) - ce qui je suppose est l'interval de série ? Si j'ai bien compris, dans cette fonction, la série est transposée 12 fois avec une boucle (loop) ?
Bredf, j'ai un peu du mal avec la syntaxe, je n'arrive pas encore à faire la différence entre le commentaire et la fonction réelle. Surtout dans le cas du tableu de Boulez.
A ce sujet, le tableau donne la série transposée mais est-il possible avec CM de pouvoir à partir de la série de base, des transformations, traduire le résultat du tableau en notes midi ?
Sinon, pour le petit pattern pour obtenir des notes aléatoires, je me suis amusé à changer les valeurs des durées, de très courtes à très longues, ainsi que la hauteur des notes, dans un registre de 36 à 90 ainsi qu'une légère modification de l'amplitude, 0.4 au lieu de 0.2.
Celui-là, j'en maîtrise au moins le principe.
Dans le dictionnaire de CM j'ai trouvé ce pattern pour
un Random 12-tone generator:
(define (ran-row end)
(let ((rows (new transposer
:of (new cycle :of '(0 1 6 -5 10 11 5 16 15 21 26 20))
:on (new weighting :keynums '(c4 cs3 b3 fs4 fs3))))
(rhys (new weighting
:of `((t :min 4) (s :min 2)
(q :weight 3)
(te :min 3) (tq :min 3)
,(new cycle :of '(e. s))
(e :weight 2))))
(amps (new weighting :of '((mf :weight 7)
(mp :weight 3)
p))))
(process while (< (now #t) end)
for k = (next rows)
for r = (rhythm (next rhys) 70)
for a = (amplitude (next amps))
output (new midi :time (now)
:keynum k :amplitude a
:duration r)
wait r )))
(events (ran-row 30) "test.mid")
⇒ "test.mid"
Pourrais-tu me guider pas à pas pour l'adapter ?
En tout cas, merci encore pour cette découverte de CM.

amleth

Le problème quand on découvre le LISP, c'est en effet la syntaxe. Là encore je recommande chaudement la lecture des premiers chapitres de NFTML.https://www.music.mcgill.ca/%7Eferguson/Notes%20from%20the%20Metalevel/nm/00/contents.html
Je pense que le tuto accéléré que H. Taube y fait reste le meilleur moyen de s'y mettre _sérieusement_.
Juste un détail, que je croyais avoir déjà expliqué : LISP connaît plusieurs "dialectes". Common Lisp est celui que tu utilises au sein d'Allegro. Taube, quant-à-lui, utilise "Scheme". La principale différence réside dans l'emploi du mot-clef permettant de définir une fonction ou une variable. En scheme, "define" est employé dans les deux cas :
(define ma-variable 69)
(define (ma-fonction param1 param2)
...)
En Common Lisp, on écrira :
(setq ma-variable 69)
(defun ma-fonction (param1 param2)
...)
Tu noteras que la syntaxe change pour la définition d'une fonction. Pour une simple variable, dans un long post, j'avais expliqué le rôle de "setq", je t'y réfère donc.
Tu peux dès lors utiliser n'importe quel exemple tiré du dictionnaire CM ou de NFTML

L'avantage avec l'apprentissage de Common Lisp, c'est que c'est le langage dans lequel est codé OpenMusic. Tu pourras donc créer tes propres fonctions sur les deux systèmes... tu ne perds pas ton temps

Concernant mon code "Boulez-chart" : il est illisible et pas trop commenté... je voulais simplement faire ça comme "exercice personnel", mais d'un point de vue disdactique, pour toi, c'est pas génial.
Enfin, ma fonction transpose-row est tirée de NFTML. Lis bien le chapitre sur les boucles et leur usage en contexte sériel (7 et 8), c'est HYPER IMPORTANT. Voilà, je sais que c'est une lecture peu sexy, mais grâce à ce formidable ouvrage, concis et clair, tu pourras faire ce que tu veux.
Citation : A ce sujet, le tableau donne la série transposée mais est-il possible avec CM de pouvoir à partir de la série de base, des transformations, traduire le résultat du tableau en notes midi ?
Oui, c'est d'ailleurs bien plus simple à générer en fait. Je tâcherai de te retrouver le code que j'avais initialement fait.
Et le petit alog de génération aléatoire que j'ai écrit à un mérite : il te fera découvrir la syntaxe de la fonction "process", qui permet d'écrire une séquence temporelle d'événements... "process", c'est comme "loop", mais temporel. C'est la fonction de séquençage.
Et donc pour ton random-12-tone, la seule ligne à changer, c'est :
(define (ran-row end)
pour
(defun ran-row (end)
Bien à toi,
Th.
And we're going to have this transitory cow fling thing right here in Cicely?
- < Liste des sujets
- Charte