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

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

Re: Altérations dièse ou bémol au lieu de bécarre avec easyHeadsOn


From: Ya Gloops
Subject: Re: Altérations dièse ou bémol au lieu de bécarre avec easyHeadsOn
Date: Mon, 20 Mar 2023 23:48:38 +0000 (UTC)

C'est exactement ça !, c'est génial… Bravo Jean
Pour une question pratique, y a-t-il un moyen, en gardant exactement ce 
résultat, d'éviter d'avoir à modifier \key ?

C'est-à-dire appliquer le context automatiquement ...
J'ai essayé ça mais ça plante 

key =
#(define-music-function (pitch mode) (ly:pitch? number-pair-list?)
   #{
     \key #pitch #mode
     \context Staff \applyContext
       #(lambda (context)
          (ly:context-set-property! context 'keyAlterations '()))
   #})

\relative c' {
  \easyHeadsOn
  \key fis \major
  fis gis ais b cisis d eis fis  e eis fis
}





Le lundi 20 mars 2023 à 21:47:44 UTC+1, Jean Abou Samra <jean@abou-samra.fr> a 
écrit : 





Le lundi 20 mars 2023 à 19:50 +0000, Ya Gloops a écrit :

>  
> Mince ça ne fonctionne pas avec les doubles dièses et doubles bémols !
> Voici une transposition en fa♯ et sol♭ pour illustrer...
> 

Ça fonctionne... dans une certaine logique : le do double dièse dans la 
tonalité de fa dièse majeur est un demi-ton au-dessus de la quinte de fa dièse 
(do dièse), donc reçoit, selon ton système, un dièse, or il y a déjà un dièse à 
la clé…

Si j'ai bien compris ce message et le précédent, tu veux en fait que l'armure 
n'ait absolument aucune influence sur les altérations qui sont imprimées au 
milieu de la portée. Dans ce cas, essaie ce code :
\version "2.24.1"

#(define Ez_numbers_engraver
   (make-engraver
    (acknowledgers
     ((note-head-interface engraver grob source-engraver)
      (let* ((context (ly:translator-context engraver))
             (tonic-pitch (ly:context-property context 'tonic))
             (tonic-name (ly:pitch-notename tonic-pitch))
             (grob-pitch
              (ly:event-property (event-cause grob) 'pitch))
             (grob-name (ly:pitch-notename grob-pitch))
             (delta (modulo (- grob-name tonic-name) 7))
             (note-names
              (make-vector 7 (number->string (1+ delta)))))
        (ly:grob-set-property! grob 'note-names note-names))))))

#(define (Relative_alterations_engraver context)
   (let ((note-events '()))
     (make-engraver
      (listeners
       ((note-event engraver event)
        (set! note-events (cons event note-events))))
      ((pre-process-music engraver)
       (let ((tonic (ly:context-property context 'tonic)))
         (for-each
          (lambda (ev)
            (let* ((pitch (ly:event-property ev 'pitch))
                   (octave (ly:pitch-octave pitch))
                   (notename (ly:pitch-notename pitch))
                   (rel-pitch (ly:pitch-diff pitch tonic))
                   (rel-alt (ly:pitch-alteration rel-pitch)))
              (ly:event-set-property!
               ev 'pitch
               (ly:make-pitch octave notename rel-alt))))
          note-events)
         (set! note-events '()))))))

fakeKey =
#(define-music-function (pitch mode) (ly:pitch? number-pair-list?)
   #{
     \key #pitch #mode
     \context Staff \applyContext
       #(lambda (context)
          (ly:context-set-property! context 'keyAlterations '()))
   #})

\layout {
  ragged-right = ##t
  \context {
    \Voice
    \consists \Ez_numbers_engraver
    \consists \Relative_alterations_engraver
  }
}

\relative c' {
  \easyHeadsOn
  \fakeKey c \major
c d e f gis as b c  
}


\relative c' {
  \easyHeadsOn
  \fakeKey fis \major
  fis gis ais b cisis d eis fis  
}


\relative c' {
  \easyHeadsOn
  \fakeKey ges \major
  ges' as bes ces d eses f ges   
}

Cordialement,

Jean



reply via email to

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