< Back to IRCAM Forum

Filter pitch in Chord-Seq (on request)

Thanks Karim! That’s a very useful function.

Graham

Hello,

Thank you it’s useful !

Once the .lisp file has been copied to the “init” folder and OM restarted, could you please tell me how do I call the function in a patch? Writing it down doesn’t call it and I don’t find it in library.

Best regards,

Lisa

Hi Lisa

make sure to type exactly: filter-pitch-range
This should definitively work.

Best
K

yes it works, Om version folder problem. Thank you !

Rebonjour Karim,

J’ai réalisé mon propre patch de référence “filter-pitch-range” avec les librairies d’origine, excepté l’objet “positions” d’OMTristan. Cet objet donne toutes les positions d’un élément dans une liste.

Existe-t-il un objet similaire dans les librairies de base ? Sinon pourriez-vous s’il vous plait me montrer quel patch avec les objets de base peut accomplir cette fonction ?

Je vous montre en fichier joint ma version de “filter-pitch-range” qui donne strictement les mêmes résultats, afin que vous puissiez s’il vous plait me donner un retour sur son élaboration et éventuellement remarquer des raccourcis logiques qui le rendraient plus simple ou plus “joli”.

En vous remerciant par avance, bien cordialement

Lisa

filter-pitch-range (pr).omp (33.1 KB)

Je n’ai pas tres bien compris la question. C’est la meme chose en plus complique. Que cherchez vous a faire au juste?

Chere Lisa

Je crois que j’ai compris…
Je vais ameliorer le filtre :slight_smile:
K

Bonjour Karim,

Je suis complètement autodidacte avec OM (comme beaucoup ici j’imagine). En plus de mes propres patchs liés à mes idées compositionnelles, il m’arrive de tenter de réaliser par mes propres moyens les patchs d’objets déjà existants afin de mieux comprendre le langage général autour des listes. Cela me permet également dans un second temps de développer ces outils : j’ai par exemple décliné filter-pitch-range dans une version où l’on ne choisit pas un ambitus mais des notes précises et auxquelles on peut appliquer une lambda fonction (transposition, approximation etc.) avant de les réinjecter à leur place dans l’objet initial.

Bien que je réussisse souvent à les faire fonctionner, je peux avoir parfois le sentiment d’avoir suivi un raisonnement logique quelque peu boursouflé, mon but étant de créer les liens les plus directs et économes qui soient. Je suis en effet soucieuse de la beauté du geste en programmation.

Ce pourquoi je me suis permise de vous soumettre ma version dans l’espoir d’avoir un retour sur sa conception. Vous l’avez trouvé trop compliqué et confirmez dans ce cas mon intuition. Si vous avez le temps, je serais alors ravie de voir votre version avec les objets de base d’OM. Oui car, en plus d’essayer de patcher des objets déjà existants, j’essaye d’utiliser les outils de bases qui opèrent directement sur les listes. Or dans mon patch je suis embêtée de devoir utiliser l’objet “positions” de la librairie d’OM-Tristan qui doit déjà être un patch élaboré…

Merci et à bientôt !

Lisa

Chere Lisa,

Par complique je voulez evidement dire que l’on peut faire la meme chose mais en plus simple. Deja on a pas besoin de positions de la lib tristan.

Je t’envoie donc le code (a mettre dans init) qui fait un filtrage:

  • par range (comme le premier code)
  • par notes donnees (comme tu voulais)

Evidement on peut aussi faire par d’autres criteres, mais dans ce cas mieux vaut faire une autre fonction.

les modes sont:

  1. band
  2. selected

avec soit option pass ou reject.

pour avoir les entrees supplementaires c’est ‘k’ (car c’est des key)

le code:
filterchordseq1.lisp (2.4 KB)

bien a toi
K

1 Like

Bonjour Karim,

Merci beaucoup pour ces détails !

À bientôt sur le forum,

Lisa

Continuing the discussion from Filter pitch in Chord-Seq (on request):
Bonjour Karim
J’ai téléchargé flilterchordseq1.lisp - qui est certainement très utile - dans le dossier de mon workspace (c’est bien ce que tu appelles “init folder”?. Ensuite j’ai relancé OM pour appeler “chord-filter” - rien!

Where can I find the “init folder”
?
My OM 6.18 app is located in the Application Folder, my libraries in the Home Folder.

Cher Markus,

Les fichiers lisp sont a mettre soit:

  • dans le dossier init se trouvant (pour mac) dans OMxxx.app (click droit) Show contents
  • ou dans le dossier user du workspace.

Dans le premier cas, il sera disponible pour tous les Workspaces
Dans le deuxieme, uniquement local, c-a-d dans le workspace en question.

Bien a toi
K

Merci Karim - amicalement Markus

Cher Karim

J’ai bricolé mon propre patch pour filtrer une liste de hauteurs selon la tessiture d’un instrument donné.
Je voudrais en faire une fonction générique. Si je suis le tutoriel (tutorial_index) je devrais ouvrir le patch, aller sur file/new generic function/ … Or ce menu n’est pas accessible ni sur mon OM 6.18 ni sur mon OM 6.15. Je tourne sous Mojave

Cher Markus,

C’est normal. Le tutoriel en question fait reference a la version 5 de OpenMusic. Cette feature a ete depuis retiree de la version 6. Il est possible que votre filtre existe deja dans la derniere version de OM (il y en a 2: chord-band-filter et chord-filter). Si vous avez un autre genre de filtrage que vous voulez faire, peut-etre decrivez le, ou mieux envoyer un patch d’exemple (MWE).

Best
K

Bonjour, il vous faut faire cette manip depuis la fenêtre “Packages” de OM, en ayant le préalablement ouver le package “user”.

Thanks Jean and Karim
I know that similar functions already exist, but I wanted to design my own function with “loop inside loop” as an OM exercise. There are certainly more elegant solutions - e.g. if there were a function om<>. Anyway it works perfectly.
Question: is it possible to retrieve the Lisp code from the patch?

Dear Markus,

some answers here:

  • om<> is like using (and (< x y1 ) (> x y2)) so yes somehow depending your needs. Again it is difficult to answer without any example…:slight_smile:

  • It is PARTIALLY possible, since version 6.18. Partially because for the time being, unfortunately if the patch contains, either: an omloop, another patch, or a lambda function, you will have a partial code. This is ok:

This is “obscure”:

the “g9317” represents the omloop. So you don’t have the complete code. Beside this, if you need to code it in CL, it would be different from the graphical code, to be efficient, you should re-write the code, omitting repetitive calls, etc.

For instance, in the first example the code generated is:

(list (progn (loop for i from 1 to 10 collect (om-random 0 10))) (arithm-ser 0 10 1))

but you don’t need the progn macro here you can code it simply like:

(list
(loop for i from 1 to 10 collect (om-random 0 10))
(arithm-ser 0 10 1))

So my advice: learn CommonLisp…
Best
K

Encore Merci Karim

Voici le patch fonction et un exemple:
filter-range.omp (7.3 KB)
e.g.flûte_basse.omp (4.7 KB)

In this case, the code is much much simpler than your patch:

(defun Markus-filter (pitch lower upper)
(remove nil
(loop for i in pitch
collect (if (and (<= i upper)
(>= i lower)) i))))

Here is the lisp code:
markus-filter.lisp (170 Bytes)

And you can even simplify your graphic code following this code:

here is the patch:

e.g.flûte_basse1 (15.1 KB)

Best
K