Subject: [LilyPond] [Général] fonction scheme pour basculer un conducteur des sons réels aux parties transposées

From: Olivier Charade via LilyPond <[email-masked]>
Date: Thu, 04 Jan 2024 15:33:06 +0000

Bonjour,
Je n'imagine pas que quelqu'un n'ait pas déjà fait ça mais j’aimerais bien comprendre pourquoi ma petite fonction plante quand je veux les parties transposées.
L'idée est d'avoir une variable globale \oreille qui, quand elle est vraie, laisse toutes les parties en sons réels, et quand elle est fausse, transpose celles où c'est indiqué à l'intervalle propre à l'instrument.

```
version "2.24.0"
transposezmoi = #(define-music-function (depart arrivee non)
                                        (ly:pitch? ly:pitch? boolean?)
  (if non
      #{ #}
      #{\transpose $depart $arrivee #}
      )
  )
oreille =  ##f
\score { 
  \new Staff {\transposezmoi c f, \oreille {c''}}
}
```
Au moins pour les sons réels ça fonctionne, mais ça plante quand ça doit transposer.
J'ai vu une discussion sur les spécificités de la fonction transpose mais j'avoue que ce qui est dit me passe très nettement au-dessus.

Merci d'avance
Olivier

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/fonction-scheme-pour-basculer-un-conducteur-des-sons-reels-aux-parties-transposees/5597/1).

Pour créer un nouveau sujet, écrivez à [[email-masked]](mailto:[email-masked]) ou visitez la [page d'accueil de lilypond.community](https://lilypond.community).

---

From: Raphael Hardy via LilyPond <[email-masked]>
Date: Thu, 04 Jan 2024 16:18:17 +0000

Bonjour Olivier,
Si j'ai bien compris, ça fonctionne en intégrant la musique que tu souhaites manipuler à l'intérieur de ta fonction:
```
\version "2.25.7"

transposezmoi = #(define-music-function (depart arrivee non musique)
                                        (ly:pitch? ly:pitch? boolean? ly:music?)
  (if non
      musique
      (transpose depart arrivee musique)
      )
  )
oreille =  ##f
\score { 
  \new Staff { \transposezmoi c f, \oreille { c'' } }
}
```

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/fonction-scheme-pour-basculer-un-conducteur-des-sons-reels-aux-parties-transposees/5597/2).

---

From: Olivier Charade via LilyPond <[email-masked]>
Date: Thu, 04 Jan 2024 16:26:36 +0000

Je voulais juste rajouter ou pas la commande transpose avant la musique mais effectivement, en faisant carrément plus ambitieux ça fonctionne.
Chapeau!
C'est donc bien la spécificité de \transpose qui bloquait et pas une erreur de syntaxe Scheme (enfin, au final, c'était quand même une erreur de syntaxe).
Merci beaucoup

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/fonction-scheme-pour-basculer-un-conducteur-des-sons-reels-aux-parties-transposees/5597/3).

---

From: Jean Abou Samra via LilyPond <[email-masked]>
Date: Thu, 04 Jan 2024 16:29:51 +0000

Ce n'est pas vraiment une spécificité de `\transpose`, c'est surtout que `\transpose` est une fonction à trois argument (hauteur de départ, hauteur d'arrivée, musique). Et donc `\transpose x y` n'est pas valide, il manque le troisième argument.

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/fonction-scheme-pour-basculer-un-conducteur-des-sons-reels-aux-parties-transposees/5597/4).

---

From: Olivier Charade via LilyPond <[email-masked]>
Date: Fri, 05 Jan 2024 07:41:43 +0000

Merci Jean pour cette précision que me fait découvrir à quel point j'étais à côté de la plaque. Je croyais que ma petite fonction écrivait du code qui serait interprété "plus tard"...

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/fonction-scheme-pour-basculer-un-conducteur-des-sons-reels-aux-parties-transposees/5597/5).

---

From: Jean Abou Samra via LilyPond <[email-masked]>
Date: Sat, 06 Jan 2024 13:17:18 +0000

Oui, c'est une erreur fréquente de croire que LilyPond a des « macros », un peu comme LaTeX, qui insèrent un bout de code quelque part, alors qu'il n'y a que des vraies fonctions, qui prennent des arguments et renvoient une valeur.

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/fonction-scheme-pour-basculer-un-conducteur-des-sons-reels-aux-parties-transposees/5597/6).