Bonjour à vous deux,
Question à Karim : Pourquoi utiliser la fonction Lisp-car ?
Car ces histoires d’inversion, de mouvements contraires et différents de l’inversion miroir, m’intéresse beaucoup - je suis en train d’analyser avec les outils de Mathtools actuellement l’opus 22 de Webern - et du coup j’ai regardé le patch proposé par Jérôme et les tiens. Or, pour celui de Jérôme, où Lisp-first est utilisé, il est avantageusement remplacé par Lisp-nth dans la mesure où on peut choisir la hauteur de départ.
De même, j’arrive aux mêmes résultats avec Lisp-nth dans les patchs dans inversion_nth_Pivot sans passer par rotate et Lisp-car, les seules différences sont l’ordre du choix de la hauteur de départ qui est différente et l’octave qui est une octave plus haut. C’est pareil aussi avec inversion_nth_pivot_liste via l’Om-loop qui m’a bien intéressé et sur lequel - om-loop - je ne suis pas très performant. J’ai bien noté l’utilisation de forloop et là, effectivement de la nécessité de passer par rotate. En revanche, j’ai substitué dans un premier temps Lisp-car par Lisp-nth, et ça fonctionne mais avec des résultats différents. Puis, partant de cette base, où Lisp-nth est placé en sortie de forloop pour entrer dans dx->x pour le choix de la hauteur de note mais qui du coup n’est limité qu’à une seule hauteur, et n’étant pas satisfait sur ce point là, j’ai remarqué que Lisp-nth pouvait-être indépendant et qu’on pouvait ainsi lui indiquer via une seconde entrée dans l’om-loop le choix de la hauteur de départ pour l’inversion. Et là, j’ai exactement les mêmes résultats que ton patch sur la première position mais avec l’avantage de pouvoir décliner différentes inversions. D’ailleurs, c’est intéressant à examiner car selon les hauteurs différentes j’ai des répétitions de hauteurs, avec une différence d’octave ou non, dont le nombre est différent…
Donc, concernant Lisp-car, si je comprends bien sa fonction est similaire à Lisp-first ? Pour ma part, j’ai pris l’habitude d’utiliser Lisp-nth car je le trouve plus souple, d’autant qu’on peut effectuer des choix aléatoires si on le souhaite grâce à ses deux entrées.
En tout cas, ce que je trouve intéressant avec OM, c’est la possibilité de passer aussi par des chemins différents pour arriver à un même résultat.
Bien entendu, je peux vous envoyer les fichiers avec une explication avec copies d’écran sur ce que j’ai modifié.
PS : Je travaille aussi, dans une sorte de va-et-vient très instructif, avec Opusmodus, le soft de CAO développé par Janusz Podrazik bien connu pour son implémentation des outils de la Set Theory en Lisp et dans lequel il y a une fonction dédiée pour cette inversion avec une hauteur de départ spécifiée :
(setf renversement (pitch-invert-start 'eb4 '(eb4 b4 bb4 d4 cs4 c4 fs4 e4 g4 f4 a4 gs4))) ===> (eb4 g3 gs3 e4 f4 fs4 c4 d4 b3 cs4 a3 bb3)
(setf renversement (pitch-invert-start 'fs4 '(eb4 b4 bb4 d4 cs4 c4 fs4 e4 g4 f4 a4 gs4))) ===> (a4 cs4 d4 bb4 b4 c5 fs4 gs4 f4 g4 eb4 e4)
L’intérêt, c’est qu’on peut dans la ligne de script insérer les durées (ici deux tuplets, un de 5 pour une noire et un de 7 pour une noire), les nuances de dynamiques et les articulations, avec une traduction en partition en notation standard très aisée:
(setf renversInteg (pitch-invert-start 'eb4 '(5q eb4 sfz stacc+gliss b4 p stacc bb4 mp stacc q d4 stacs+marc cs4 ppp marc+stacc 7q c4 mf h fs4 ten+marc e4 f ped+gliss g4 f4 pp e a4 fermata gs4 p)))
====> (5q eb4 sfz stacc+gliss g3 p stacc gs3 mp stacc q e4 stacs+marc f4 ppp marc+stacc 7q fs4 mf h c4 ten+marc d4 f ped+gliss b3 cs4 pp e a3 fermata bb3 p)
Une autre fonction, de transposition, pitch-transpose-start, s’apparente à la fonction Zn-transp-comp très utile pour calculer les modes à transposition limitées, la multiplication d’accords et le carré de transposition de Structure Ia, de Pierre Boulez.