Se lancer dans la composition algorithmique et l'aide à l'écriture avec Common Music
- 69 réponses
- 6 participants
- 5 350 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?
deb76
Citation : ça fait quoi comme résultat ? C'est un script du genre KARMA?
Je ne connais pas les scripts Karma. Voici, deux très, très, très courts exemples pris dans un fichier tutorial :
|#
(new seq :name 'pulse
:subobjects
(loop with d = .1
for i below 80
collect (new midi :time (* i d)
:keynum (pickl '(c4 d4 ef4 f4 g4 af4 bf4 c5))
:duration d
:amplitude (interp (mod i 8) 0 .25 7 .75))))
#|
ou
|#
(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))
#|
Ca me rappelle CSound mais en plus concis, me semble-t-il, puisqu'il n'y a la partie définition de l'instrument mais aussi l'écriture de script du VRML (crétion de mondes virtuels en 3D)dans sa disposition.
Ca a l'air très puissant au niveau des manipulations des structures musicales.
Mais ceci dit, ça donne quand même le vertige quand je vois le fichier spectral, qui si j'ai bien compris doit donner une série harmonique, c'est beaucoup d'écriture de code alors qu'avec patchwork ou OPen Music, le résultat peut être obtenu avec un script objets relativement simple.
Qu'en pense, d'ailleurs amleth ?
Et à divre vrai, je me sens coincé car j'ai manifestement un problème avec les functions : row-matrix, define, transpose-row, et pourtant prises sur le tutorial de Taube...
amleth
;;; Je définis, par exemple, une série dodécaphonique
(setq gg '(62 63 53 58 55 61 57 60 59 54 52 56))
;;; J'utilise une fonction qui me permet de rapporter les notes d'une série sur une échelle de 0 à 12. Utilisation de la fonction mathématique "modulo", qui renvoie le reste de k dans la division par 12.
(defun keynum->pc (k)
(mod k 12))
;;; Corps de la fonction
(defun transpose-row (row to)
(loop for pc in row collect (keynum->pc (+ pc to))))
;;; Un p'tit test et ça marche !
(transpose-row gg 6)
Oublie le mot clef "define", qui appartient au monde du Scheme (cf. mon post précédent).
Pour row->matrix, j'imagine qu'il te manque une fonction annexe définie qqpart...
Pour les séries harmoniques : je ne suis pas certain de voir de quel fichier "spectral" tu parles... ??? Dis moi précisément, et je te trouves la solution pour ce que tu veux faire.
Mais derrière PatchWork, il y a lisp également. Donc ce doit être la même chose...
And we're going to have this transitory cow fling thing right here in Cicely?
deb76
Citation : cm/etc/tutorials/
Commencer par intro.lisp...
Qui te permettra de faire un joli sinus qui s'entend !
Oui, j'avais repéré ce fichier ainsi que les autres. Ceci étant, je fais comment ? Quelle est la procédure. Car pour le moment, je ne vois que du code, or ce code j'aimerais l'écouter, en faire du fichier midi. A chaque fois que je tente d'évaluer un script, en le sélectionnant et en faisant CTRL-E, je me prends un message d'erreur.
Où puis-je trouver un tutorial expliquant pas à pas la conception d'un script avec les fonctions de base et le faire fonctionner ? Je pense aux exemples d'Open Music qui sont très bien faits et qui permettent d'avancer, de comprendre la logique du langage.
Pour transpose-row :
;;; Je définis, par exemple, une série dodécaphonique
(setq gg '(62 63 53 58 55 61 57 60 59 54 52 56))
Concernant ta série, je comprends sa logique, mais c'est au niveau de sa syntaxe que cela devient obscur par la suite.
"J'utilise une fonction qui me permet de rapporter les notes d'une série sur une échelle de 0 à 12."
OK.
Utilisation de la fonction mathématique "modulo", qui renvoie le reste de k dans la division par 12.
D'accord, mais où est déclaré k ? Je pose cette question car il apparait ici : defun keynum->pc (k)
(mod k 12)) or, je ne le vois pas dans la série dodécaphonique. De même, ok pour setq, mais que signifie gg
Corps de la fonction
Je suppose que le corps de la fonction c'est ceci ? :
(defun transpose-row (row to)
(loop for pc in row collect (keynum->pc (+ pc to))))
Un p'tit test et ça marche !
(transpose-row gg 6)
Oui, mais on fait comment pour que ça marche ? C'est en sélectionnant la fonction et en faisant CTRL-E ? Si oui, pour ma part, je n'obtiens que des messages d'erreur.
Attention, je suis novice et qu'un très basique utilisateur et comme je le disais plutôt littéraire. Ce qui est évident pour toi, ne l'est pas pour moi.
Je sens que tu vas me trouver très pénible avec mon incompréhension et mes questions.
Ah, dernière chose, j'ai trouvé Common Lisp the Language, 2nd Edition, cela me semble être les bonnes références, il y a notamment defun et non pas define dans cette liste de
fonctions...
Quand je travaillais avec Patchwork, j'avais eu à la base un tutorial écrit avec toute la démarche à observer de A jusqu'à Z, ce qui était bien pratique. Si tu pouvais me trouver un petit tuto allant dans ce sens, j'en serais très reconnaissant.
amleth
Je vais rassembler des ressources pour faire une sorte de "getting started" en trois points :
* La syntaxe Common LISP
* Le fonctionnement de base de l'environnement Allegro
* Le chargement de la librairie de fonctions LISP Common Music
Mais, oh, horreur, le site de l'UV dans laquelle j'enseigne est down. Je vais voir s'il me reste une copie locale des documents...
A tout de suite...
And we're going to have this transitory cow fling thing right here in Cicely?
amleth
Je vais d'abord repréciser la base de la base.
LISP est un langage fonctionnel, ce qui signifie que nous allons écrire un ensemble de fonctions qui s'appellent entre elles. Une fonction prend un certain nombre de paramètres en entrée, et en recrache d'autres (souvent, un seul...). Dans OpenMusic, les fonctions sont représentées par des boîtes graphiques possédant des paramètres d'entrée (les points bleus en haut) et de retour (les points bleus... en bas).
Il existe deux "trucs" fondamentaux en LISP :
* Les "atomes" : les nombres (69, .3, 46346736743676237), les symboles (toute séquence non vide de caractères, pouet, blip, blop, tagada)
* Les listes : n'importe quelle suite d'atomes ou de listes entre parenthèses :
(a b c), (42 a "pouet pouet" ), (a (1 2 3) b (c (d e))), etc.
Pour faire du LISP (qui est un langage), il faut disposer d'une de ses implémentations. Nous utiliserons Allegro Common Lisp. En lançant le logiciel, on a directement une fenêtre, dite "Debug Window". Il y a une sorte de ligne de commande, CG-USER(xxx):, qui nous invite à taper des choses.
Il s'agit de la "boucle d'interaction". Elle LIT, EVALUE, et AFFICHE les expressions que nous saisissons. Tu as déjà fait connaissance avec cette boucle d'interaction, donc on va supposer que c'est clair.
Maintenant, on aimerait pouvoir disposer d'un lieu où écrire notre premier programme. File->New, et hop, voici un fichier texte. On le sauvegarde : coincoin.cl (cl pour Common Lisp, mais .lisp est aussi traditionnellement admise comme extension).
Allons-y, écrivons. Tapons :
"coin coin !"
Pour évaluer ce symbole, il faut positionner le curseur de la souris dessus et faire Ctrl+E. Par magie, il est passé à la boucle d'interraction, qui lit cette chaîne de caractère ,l'évalue (une chaîne ou un nombre est évalué à lui-même), et l'affiche effectivement.
Maintenant, nous voulons manipuler des variables et des fonctions. Il est important de comprendre qu'en LISP, une fonction se note ainsi :
(nomdelafonction param1 param2 param3)
Ainsi, sommer 1 et 2 s'écrit non pas 1+2, mais (+ 1 2). Et ça renvoie... 3 ! Formidable, LISP sait compter.
Comment affecter 37 à une variable nommée blop ? :
(set blop 37)
set est le nom de la fonction d'affectation. Ah mais tiens, ça ne marche pas... ! Oui, car blop n'a pas été définie auparavant, et quand la boucle tentera de l'évaluer après avoir lu "(set blop 37)", et bien il y aura plantage. Il faudra donc bloquer l'évaluation de blop, ce qui se fait par l'utilisation du symbole "quote", ou "'" :
(set (quote blop) 37)
est équivalent à
(set 'blop 37)
ou encore à
(setq blop 37)
Cette troisième forme est plus rapide et plus utilisée.
Un petit coup de Ctrl+E dans notre fichier texte, et voilà, blop vaut 37.
Maintenant, on veut pouvoir créer sa propre fonction, ce dont se charge l'opérateur "defun". Je veux par exemple une fonction qui affiche la somme de deux nombres, et qui s'apellerait "somme" :
(defun somme (n1 n2)
(+ n1 n2)
(print "Et voilà, c'est fait" )
)
Pas très utile, j'ai simplement refait la fonction de base "+", mais en l'appelant "somme" et en affichant un petit message (via la primitive "print").
Voilà, tu sais tout sur LISP, ses principes, sa syntaxe ! Le reste n'est que raffinement.
Passons à Common Music.
Créons un nouveau script.
La première ligne de notre nouveau fichier code source doit contenir un appel qui charge les fonctions de Taube :
(load "c:/Program Files/acl81-express/cm/src/cm.lisp" )
Puis, la seconde ligne va indiquer qu'on se place dans le package cm :
(in-package :cm)
Un petit coup de Ctrl+A pour tout sélectionner, et de Ctrl+E juste après pour tout évaluer. Et oui, on peut évaluer l'intégralité d'un fichier de code LISP en sélection tout son contenu textuel puis en faisant Ctrl+E.
Pour écouter quelque chose : écrivons la fonction sinus du fichier intro.lisp
(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))
C'est pour l'instant totalement incompréhensible...
Cette fonction prend donc 7 paramètres (détaillés dans NFTML).
Pour l'écouter, il faut utiliser la super fonction de Taube qui convertit des événements midi en fichier .mid : "events"
Ainsi :
(events (sinus 80 4 20 100 .1 .1 .6) "intro.mid" )
events prend deux paramètres : un appel vers une fonction qui produit des événements midi, et un fichier midi dans lequel écrire.
Il faut bien sûr avoir évalué le (defun sinus... avant d'y faire appel, sinon ça plantera. Allegro ne connait que ce qui a été évalué correctement.
Donc : Ctrl+E dans le corps du defun, puis Ctrl+E sur le (events ..., et hop le fichier devrait être joué à ce moment là...
Ou bien, encore une fois Ctrl+E après avoir mis en surbrillance à la souris la portion de code concernée.
Voilà pour le début.. dis moi déjà si c'est clair, si tu te sens bien à l'aise avec la logique "écriture / évaluation", si tu entends le midi, etc. Ensuite, on passera à la suite.
PS : désolé, ce post est très mal écrit... mais c'était pour aller vite.
And we're going to have this transitory cow fling thing right here in Cicely?
deb76
Citation : Ah, dernière chose, j'ai trouvé Common Lisp the Language, 2nd Edition, cela me semble être les bonnes références, il y a notamment defun et non pas define dans cette liste de
fonctions...
Est-ce que mes liens sont intéressants ?
Sinon, merci, c'est sympa.
Est-ce qu'il ya des petits patchs qui permettent de générer comme dans Patchwork ou Open Music un nombre x de notes aléatoires dans un registre précis, style CO à C8 ? Peut-on à partir de cette liste, la mettre à une échelle de temps (d'ailleurs comment se traduit une noire, une blanche, une ronde, une croche, etc, sur un tempo de 60, dans common music ? C'est du style 4,2, 1, 0.5, 0.75, 0.375, 0.25, 0.125 ? Et l'intensité, c'e'st sur une échelle de 127 ?) ou d'intensité ?
Peut-on créer à partir d'une fondamentale les harmoniques, y compris dans un rang inhabituelle, style 1...12,15,19,20, 22, 25. C'est un exemple.
Comment effectue-t-on les renversements, un mouvement rétrograde, etc ?
A propos, je viens de tester au bureau - je l'ai mis sur mon petit portable perso qui me sert pour le journal mais aussi pour tester les softs de musique sur Vista - la function defunet ça fonctionne.
amleth
Je dois filer bosser, donc je réponds très rapidement à tes questions. La réponse globale est "Oui, absolument, c'est même expressément fait pour ça."
Tu trouveras des détails sur la notation au chapitre : https://www.music.mcgill.ca/%7Eferguson/Notes%20from%20the%20Metalevel/nm/10/sound.html
Pour générer des notes aléatoires, il n'y a pas plus chouette que Common Music. Notamment grâce à la fonction "ran".
Voilà une fonction stupide écrite en trois secondes qui génères "len" notes dont l'amplitude et le pitche sont aléatoires :
(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)
Indente ça correctement dans Allegro avec la touche TAB sur chaque ligne pour que ça soit plus lisible.
Pour comprendre les plages de variation des paramètres midi :keynum, :amplitude et :duration, cf. chapitre évoqué supra.
Le vrai problème, c'est la gestion du temps. On séquence les notes en créant un "process", sorte d'algorithme musical temporalisé. Son explication est au chapitre 13 de NFTML. Mais tu as un bel exemple sous les yeux avec ma fonction. Au final, le but de Common Music est de produire des .mid, composés de notes midi, qui ont une valeur :time, le temps de leur occurence dans la séquence.
Pour ta question sur les rétrogradages, etc., cf. chapitre https://www.music.mcgill.ca/%7Eferguson/Notes%20from%20the%20Metalevel/nm/09/sets.html
And we're going to have this transitory cow fling thing right here in Cicely?
deb76
Bon, j'ai pas mal avancé. Mais j'ai encore quelques soucis.
Ainsi, ta fonction "somme" s'évalue, la fenêtre debug affiche somme mais en revanche pas de "et voilà, c'est fait" quand j'évalue l'ensemble. Par contre si je fais (print "et voilà, c'est fait", le message apparaît.
Pas de soucis pour le lancement du package avec les deux lignes. Ca me rappelle le chargement des librairies dans Patchwork .
Oui, pas problème pour Ctrl-A et E, j’ai vite compris qu’il fallait faire une sélection pour évaluer.
Les deux scripts Sinus et Pulse se sont évalués correctement, enfin je pense. Debug m'affiche Sinus et Pulse.
Même chose pour ton script notes aléatoires, Debug m'affiche full-random
Mais tout compte fait, est-ce bien évalué ? Car ensuite quand je veux faire une enregistrement-lecture midi, à partir de tes deux fichiers, il m'indique qu'il a un problème avec la function events, qu'elle n'est pas définie. Le message d'erreur est celui-ci : Error: attempt to call `EVENTS' which is an undefined function.
[condition type: UNDEFINED-FUNCTION]
J'ai vérifié, j'ai ce problème sur les 2 PC sur lesquels j'ai installé le programme.
D'ailleurs, je ne comprends pas très bien cette histoire de midi. OK pour l'écriture du fichier midi, ça d'accord mais sa lecture ? Commengt se fait-elle ? Ne faut-il pas indiquer un chemin ?
Je viens d'essayer le script spectral dont je parlais plus haut (dans cm/src) et l'évaluation s'est bien faîte comme indiqué ci-dessous :
HARMONICS
[5] CG-USER(31):
RM-SPECTRUM
[5] CG-USER(32):
FM-SPECTRUM
[5] CG-USER(33):
SIDEBANDS-TO-CM
[5] CG-USER(34):
BES-JN
[5] CG-USER(35):
FM-SPECTRUM1
[5] CG-USER(36):
HZ-IFY
[5] CG-USER(37):
HZ-INVERT
[5] CG-USER(38):
BES-J0
[5] CG-USER(39):
BES-J1
[5] CG-USER(40):
IMPORT-SPEAR-DATA
[5] CG-USER(41):
READ-SPEAR-FRAME
[5] CG-USER(42):
[5] CG-USER(42):
READ-SPEAR-PARTIAL
[5] CG-USER(43):
SPECTRUM-MAXFREQ
[5] CG-USER(44):
SPECTRUM-MINFREQ
[5] CG-USER(45):
SPECTRUM-MINAMP
[5] CG-USER(46):
SPECTRUM-MAXAMP
[5] CG-USER(47):
SPECTRUM-FREQS
[5] CG-USER(48):
SPECTRUM-AMPS
[5] CG-USER(49):
[5] CG-USER(49):
SPECTRUM-GUESS-TYPE
[5] CG-USER(50):
CONVERT-SPECTRUM
[5] CG-USER(51):
RESCALE-SPECTRUM
[5] CG-USER(52):
INVERT-SPECTRUM
[5] CG-USER(53):
SPECTRUM->MIDI
A la fin, il indique bien spectrum midi mais rien. Par contre, les 2 PC m'ont donné l'impression de tourner en rond. Je viens de réessayer avec midi1 (cm/src) et là aussi malgré la longueur du patch, l'évaluation s'est faîte sans problème. Mais toujours rien en midi, par contre, comme pour Spectrum, le sablier tourne toujours.
Mais ça avance...
En tout cas merci encore pour tous ces conseils.
amleth
Citation : Ainsi, ta fonction "somme" s'évalue, la fenêtre debug affiche somme mais en revanche pas de "et voilà, c'est fait" quand j'évalue l'ensemble. Par contre si je fais (print "et voilà, c'est fait", le message apparaît.
C'est normal que tu ne vois pas ce que fais la fonction quand tu évalues sa définition. Après avoir évalué le "(defun somme (..." etc., évalue :
(somme 2 3)
Là, tu auras une éxécution de la fonction somme.
Citation : Pas de soucis pour le lancement du package avec les deux lignes. Ca me rappelle le chargement des librairies dans Patchwork .
Oui, pas problème pour Ctrl-A et E, j’ai vite compris qu’il fallait faire une sélection pour évaluer.
Je me suis dit qu'en remettre une couche permettrait à d'autres de s'y mettre
Après avoir évalué le "defun sinus", si tu évalues :
(events (sinus 80 4 20 100 .1 .1 .6) "intro.mid" )
alors ça plante ? C'est impossible
C'est comme si la fonction events n'était pas reconnue, pourtant, tu as bien chargé la librairie Common Music. Si ce n'était pas le cas, la définition de la fonction sinus planterait, car elle fait appel à des éléments de langage propres à CM ("midi" par exemple, et "process"). Là, je ne sais pas trop quoi dire... Dans le même script :
1. Evaluer le "(load ...)"
2. Evaluer le "(in-package :cm)"
3. Evaluer la définition de la fonction sinus : "(defun ..."
4. Evaluer la génération du .mid : "(events...".
Par contre, pour ce qui est des fonctions spectrales, je te conseille de ne surtout pas aller fouiller dans le dossier "src", car il s'agit des définitions des fonctions que Taube met à notre service. C'est donc pour ça que le code est complexe, ce ne sont pas des exemples ou des tutos, mais bel et bien la coeur même de CM, auquel on n'a pas besoin de s'intéresser pour faire fonctionner la chose.
Donc... ne regarde pas les fichiers de src ! Point de besoin d'ouvrir le moteur pour rouler. C'est normal qu'il ne se passe rien quand tu évalues les fichiers src/spectral, src/midi, etc. Ils ne font que te rendre possible l'usage des fonctions qu'ils définissent, ce qui a de toute façon déjà été fait dans le load initial, qui se charge de tout charger pour toi.
Je vais un peu me renseigner sur les fonctions spectrales, mais il me semble qu'il y a un très bon chapitre dans NFTML.
(...)
Ah oui, c'est le chapitre 23... je n'y suis pas encore, c'est un peu bourrin. N'étant pas du tout callé en composition spectrale, peux-tu me définir exactement quelle fonctionnalité de PatchWork / OM tu souhaites retrouver ?
Enfin, concernant le midi. La fonction "events" génère donc un fichier midi. Je ne sais pas trop où CM le place (fait une recherche sur ton disque dur sur le nom que tu as passé en paramètre). Normalement, il le joue automatiquement. Honnêtement, je ne sais pas trop pourquoi. Il faudrait regarder le code, mais ça ne me parait pas très important. Une fois le fichier midi obtenu, on peut aller l'utiliser dans un séquenceur..
Hope that helps...
And we're going to have this transitory cow fling thing right here in Cicely?
deb76
Bon, je pense avoir avancé car je n'ai plus de problème pour les évaluations. Et c'est ce que je subodorais, quand la fonction events pour créer mon fichier midi me posait problème. Dans scr, il y a un fichier midishare, celui qu'on utilise aussi pour OPen Music. Donc, j'ai mis Midishare - du coup j'en ai profité pour installer sur mon portable qui tourne sur Vista Open Music - et là, maintenant l'évaluation se fait sans problème, avec l'indication de la création du fichier midi.
Le seul problème, c'est que je ne suis pas sûr qu'il soit créé, car j'ai effectué plusieurs recherches et pour le computer il n'existe pas.
Mais ça ne m'étonne pas, je pense que quelque part, il faut lui donner un chemin. De même, je trouve le dossier midishare dans cm plutôt léger, il n'y a qu'un fichier alors que dans Open Music, il y a notamment un driver et un fichier de contrôle qui permet d'indiquer quel port Open Music utilise pour la création et la lecture du midi.
Mais déjà, le fait de pouvoir évaluer, c'est déjà beaucoup. Après, il faut trouver la solution de ce problème de midi, je vais me renseigner, je vais rechercher ce qui concerne common music et midishare, je pense pouvoir trouver l'indication qui me mettra sur le bon chemin.
Voilà, je te tiens au courant. Mais de ton côté, peux-tu regrader sur ton PC où vont se nicher tes fichiers midi ? et puis surtout me dire quels sont tes fichiers midishare. Cela devrait me donner des indications.
OK pour les fichiers src, je n'y touche plus. Mais en même temps, ils m'ont permis de constater sur un fichier complexe que l'évaluation s'effectuait. C'était donc encourageant.
PS : dès que je rentre, je te mets un lien sur les deux tableaux de Boulez que j'ai scanné. J'ai trouvé pour nos amis qui pratiquent Max des copies d'écran sur des patchs pour créer des séries dodécaphoniques et leurs renversements. Je mets ça dans l'autre forum.
OK pour les fichiers src, je n'y touche plus. Mais en même temps, ils m'ont permis de constater sur un fichier complexe que l'évaluation s'effectuait. C'était donc encourageant.
- < Liste des sujets
- Charte