< Back to IRCAM Forum

Modifier dynamiquement le pitch et la duré


Bonjour,

Je travaille avec OpenMusic 7.7 et j’essaie d’utiliser des Number Box pour modifier dynamiquement le pitch et la durée (dur) d’accords générés via un Lisp Function, mais cela ne fonctionne pas comme prévu. Voici la structure actuelle de mon patch :

【Structure à l’intérieur de mypatch】

  • Nœud Input (1 seul inlet)
  • Nœud Lisp Function (prend un argument n)
    Exemple de code actuel :
    (lambda (n)
    (list
    (make-instance 'chord :pitch (list n) :dur 1)))
  • Nœud Output (1 seul outlet)

【À l’extérieur du patch】

  • Number Box (valeurs 60, 64, etc.)
  • Number Box → connecté à l’inlet de mypatch
  • mypatch → connecté à CHORD-SEQ
  • Sortie de CHORD-SEQ → Score Viewer

【Comportement actuel】

  • Dans le Listener, un chord-seq est généré (ex : OM => #<chord-seq 8010001193>)
  • Sur la partition, toutes les notes affichées sont identiques (le pitch ne change pas)
  • Modifier la valeur du Number Box ne change pas les hauteurs affichées sur la partition

【Question】

  • Dans OM7, comment puis-je utiliser un Number Box pour passer dynamiquement pitch et dur dans un Lisp Function afin que CHORD-SEQ et le Score Viewer reflètent correctement ces valeurs ?
  • J’ai joint des images montrant le code à l’intérieur du Lisp Function ainsi que la structure complète de mypatch.
  • Je souhaite que non seulement le pitch, mais aussi la durée (dur) puisse être contrôlée par des Number Box.

Merci d’avance pour toute aide ou indication sur une méthode fonctionnelle ou une solution de contournement dans OM7.7.

Bonjour Sengoku,

D’apres ce que je vois, votre patch comporte des erreurs.
Pouvez-vous l’envoyer?

Merci
K

Patch.omp (9.7 KB)
Monsieur,
Merci beaucoup pour votre réponse rapidement.
Veuillez vérifier. Au fait, cela fait longtemps que je n’ai pas utilisé OM, et je viens d’installer la version 7.7 il y a deux jours.

Cordialement.

Qu’est-ce que vous-voulez faire au juste?
ce que vous faites ici, c’est cree un objet et le mettre dans un chord-seq.

Mon objectif final est plus large que l’exemple actuel.

Je pense créer une machine de génération infinie de séquences atonales de 12 tons en utilisant Lisp en utilisant la pensée contrain.

Pour y parvenir, il faut d’abord déterminer, utiliser et exploiter les éléments nécessaires.:
– génération de séquences harmoniques,
– contrôle du nombre de notes par accord,
– variations de durées,
– et interaction entre contrôle externe et structures musicales internes.

Dans ce cadre, la création de chord-seq avec des accords
ayant un nombre de notes variable
n’est qu’un sous-problème parmi d’autres.

Le problème est que je me retrouve bloqué dès cette étape très initiale :
je n’arrive pas à vérifier de manière fiable
que les paramètres (comme le nombre de notes ou les hauteurs),
passés depuis l’extérieur du patch,
sont effectivement pris en compte
dans les objets musicaux construits et affichés.

Avant d’aller plus loin dans la structure globale,
j’essaie donc de clarifier ce point fondamental,
mais quelque chose m’échappe dans le modèle d’évaluation ou de propagation des données d’OM7.7.

Je vous conseille donc de parcourir les tutoriels de OM:

Vous pouvez les obtenir dans le menu Help → ‘Import Tutorials Help…’
La doc des tutoriels est ici:

Apres avoir vu cela vous pouvez aussi voir la librairie OMCS qui se trouve ici:

Bien a vous
K

Je vous remercie pour votre conseil.
J vais les essayer.

Cordialement.

Je travaille actuellement avec OpenMusic 7.7 et la librairie OMCS, avec pour objectif de pouvoir effectuer une recherche de contraintes en mode piloté par le patch (GUI) et d’en observer les résultats pendant la conception de séquences musicales.
Pour cela, je réalise actuellement un test minimal, basé sur une contrainte simple interdisant les demi-tons consécutifs.

Comme vous me l’avez conseillé, je consulte les tutoriels d’OpenMusic tout en avançant en parallèle sur OMCS.
Je suis conscient qu’idéalement il faudrait maîtriser les bases d’OpenMusic avant d’utiliser OMCS, mais, pour des raisons de temps, j’avance de manière simultanée. Il est donc possible que le problème provienne d’une mauvaise compréhension de notions fondamentales.

Voici l’état actuel :

J’utilise OpenMusic 7.7.

La librairie OMCS est chargée.

Les objets pmc-engine, wildcard-rule, partial-solution et current-index

peuvent être placés normalement dans un patch.

La règle de contrainte est définie sous le nom no-consecutive-semitone,et sauvegardée dans un fichier Lisp (par exemple : /Users/xxxxx/Documents/OpenMusic/lisp_list/no-consecutive-semitone.lisp).

Le contenu du fichier est le suivant :

(in-package :omcs)

(defun no-consecutive-semitone ()
(let* ((sol (partial-solution))
(idx (current-index)))
(if (< idx 1)
t
(let ((interval
(- (nth idx sol)
(nth (- idx 1) sol))))
(not (= interval 100))))))

Ce code peut être évalué dans le Lisp Editor : l’évaluation affiche “Finished evaluating” et ne produit pas d’erreur.

En revanche, je ne sais pas comment vérifier concrètement que cette fonction est bien prise en compte par wildcard-rule.

Le code suivant peut également être ajouté et évalué sans erreur :

(defparameter engine
(make-pmc-engine
:variables 8
:domains (list 6000 6100 6200 6300 6400 6500 6600 6700
6800 6900 7000 7100 7200)
:rules '(no-consecutive-semitone)))

Toutefois, je ne parviens pas à consulter les résultats de la recherche en mode piloté par le patch (GUI).

La sortie de l’objet pmc-engine ne me permet pas d’obtenir ou d’afficher directement les solutions produites.

Mes questions sont donc :

  • Existe-t-il une méthode correcte pour observer les résultats d’OMCS directement dans un patch ?

  • Comment récupérer, afficher ou réutiliser les solutions générées par pmc-engine dans un patch ?

  • Quel est le workflow minimal recommandé pour ce type de test simple ?

Si le problème provient d’une incompréhension de base, je serais reconnaissant pour toute clarification.

Cordialement.

2026年1月27日(火) 7:01 Karim via Ircam Forum <noreply@discussion.forum.ircam.fr>:

Le probleme vient que vous “melanger” les methodes et variables evaluees en lisp et ceux qui sont graphiques (gui).

je vous conseille de choisir l’une ou l’autre methode.
Si vous decider d’utiliser la programation graphique, je vous conseille:

  1. de parcourir les tutoriels om
  2. de regarde aussi les exemples de la libraries OMCS menu (Help->Import tutorial Patches->Libraries->OMCS

De plus vous pouvez lire la documentation:

D’ailleurs pour votre exemple, ce patch est utile:

Si on modifie une regle >200 on obtient ce que vous chercher:

Le patch:
tut-01 2.omp (15.3 KB)

Bien a vous
K

Merci beaucoup. J’étais complètement perdue et ne savais plus quoi faire, alors votre aide est vraiment précieuse. Je vais continuer à étudier et essayer.

Cordialement.