lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: doigté d'extension


From: Jean Abou Samra
Subject: Re: doigté d'extension
Date: Thu, 18 Jun 2020 19:35:21 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0

Bonjour,

Le 18/06/2020 à 00:52, Valentin Villenave a écrit :
On 6/17/20, Jean Abou Samra<jean@abou-samra.fr>  wrote:
Si je puis me permettre d'ajouter mon grain de sel dans cette affaire,
pourquoi pas une nouvelle voix plutôt que d'insérer le X dans la voix
d'origine ?
Oui, c’est ce que j’ai essayé de faire dans mon nouveau code.
Absolument, mais comme nous avons envoyé nos messagesà une minute
d'intervalle, je n'avais pas reçu votre réponse en envoyant la mienne.
Bien sûr, ce que vous proposez est plus malin, donc je me contente
de poser mes questions.
extension =
#(define-music-function (note) (ly:music?)
    #{
      <<
Attention, en partant avec << vous créez un nouveau contexte Voice --
du coup vous allez perdre tous les spanners en cours (Beam, Slur etc.)
et toutes les éventuelles modifications (\overrides,
context-properties telles que subdivideBeams, followVoice ou, dans le
cas qui nous occupe, fingeringOrientations.

Je ne suis pas certain de comprendre. Dans le \new Voice, c'est sûr
que les propriétés changée au niveau de Voice seront perdues, mais
je ne vois pas le problème que cela poserait, donc vous devez parler
de la voix principale. Mais dans celle-ci, je ne comprends pas ce
qui se produit.


\relative do' {
  \override Voice.NoteHead.color = #red
  \clef bass
  sib4-2(\( \extension { do8-4) } ré8-1\)
}

Dans cet exemple, d'un côté la couleur de NoteHead est bien conservée pour
la note qui fait l'objet de \extension, d'un autre côté, la liaison marche mais
LilyPond se fend pourtant d'une plainte « impossible de terminer slur ».
Qu'est-ce qui se passe ?

        {
          $note
        }
        \new Voice \with {
          midiMinimumVolume = 0
          midiMaximumVolume = 0
Bien vu ! Je n’y pense jamais. Il y aurait aussi \remove
Note_performer qui revient au même (à moins que?).

        } {
          \voiceOne
Là aussi vous faites une supposition sur la position dans laquelle va
se trouver la $note.

          %% J'espère n'avoir rien oublié mais si un objet venait à se
“tripliquer”,
          %% il faudrait simplement l'omettre en l'ajoutant à cette liste.
Dots, par exemple. Maintenant, je ne suis pas sûr que virer autant de
trucs soit ce qu’on cherche puisque précisément le but est de
reproduire l’alignement du doigté précédent. Personnellement j’ai viré
ce qui prendrait trop de place _horizontale_ : Flag et Dots.

          % Pour le cas où la note porterait un TextScript, on le supprime.
Tout ce qui est attaché aux notes se trimballe dans 'articulations.
          % Il faut ensuite rétablir le stencil du x.
          \omit TextScript
          \override NoteHead.stencil = #point-stencil
          \override NoteHead.no-ledgers = ##t
          \scaleDurations 1/2 {
            $note
            $note \tweak TextScript.stencil #ly:text-interface::print ^\x
Pas mal mais du coup ça ne respectera pas fingeringOrientations…

En effet, j'ai succombé au péché originel de la programmation
qui consiste à ne pas tester tous les cas. Je pensais à tort que
la position du \markup allait s'ajuster correctement mais il aurait
fallu -\x au lieu de ^\x, évidemment. Quoi qu'il en soit, ce n'est
pas configurable.

Ce que j’ai fait, de mon côté, est assez moche mais ça fonctionne
presque : d’abord je m‘insère dans la voix existante (avec \context)
pour garder tout les spanners et \overrides en cours, ensuite je crée
une voix (en lui donnant un identifiant unique pour être sûr qu’il n’y
aura pas d’effet de bord) avec simplement \hideNotes. Là où ça devient
vraiment crapoteux, c’est que pour récupérer l’état de la
context-property 'fingeringOrientations, je commence par la passer au
contexte parent (Staff), même s’il n’est pas fait pour ça (a priori ça
ne devrait pas avoir d’effet sur la suite des voix mais il vaut mieux
ne pas trop se poser la question) ; puis je récupère sa valeur dans ma
nouvelle voix temporaire. Ce n’est pas un modèle ; la solution bien
propre serait de définir un Scheme engraver.

Si d'aventure vous le faisiez, prévenez-moi : cela me fournira un exemple
pour comprendre enfin les graveurs Scheme !

Bien cordialement,
Jean Abou Samra




reply via email to

[Prev in Thread] Current Thread [Next in Thread]