< Back to IRCAM Forum

Filter pitch in Chord-Seq (on request)

Hi,

On request from OpenMusic Groupes Facebook here is some code:

filter-pitch-range method will filter a range of pitches in a CHORD-SEQ preserving all vel,dur chan and data.

Screenshot_2021-02-21_16-34-16

here is the code (put it in the init folder and restart OM):
filterchordseq.lisp (1.7 KB)

If useful and required, will be integrated in next release.

Best
K

1 Like

Thanks Karim! That’s a very useful function.

Graham

Hi Lisa

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

Best
K

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

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

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