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

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

Re: bug arranger.ly et pitchedTrill


From: Jean Abou Samra
Subject: Re: bug arranger.ly et pitchedTrill
Date: Thu, 13 May 2021 09:55:26 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1


Le 13/05/2021 à 09:42, Gilles Thibault a écrit :
Le 2021-05-12 23:41, Jean Abou Samra a écrit :
Le 12/05/2021 à 23:18, Gilles Thibault a écrit :
Gilles, voudrais-tu proposer un patch ? Jette un œil à
http://lilypond.org/doc/v2.23/Documentation/contributor/working-with-source-code pour savoir comment faire.

Hum, j'ai (péniblement) réussi à cloner le répertoire Lilypond.

Parfait.

Faut-il que je crée un "fork" maintenant ? Ils disent dans l'aide que ce n'est pas utile ! Je ne risque pas de mettre le bazar ?


En effet, c'est comme cela qu'il faut procéder tant
que tu n'a pas le droit d'écriture sur le dépôt principal
(qui est accordé après certain nombre de contributions).
Un fork est justement une copie qui n'appartient qu'à toi,
donc tu ne risques pas de mettre le bazar dans quoi que
ce soit.

Rah, au moment où je commençais à comprendre git, je m'aperçois que music-map a changé d'implémentation dans la 2.23.
C'est maintenant :

%%%%%%%%
(define-public (music-selective-map descend? function music)
  "Apply @var{function} recursively to @var{music}, but refrain
from mapping subexpressions of music that does not satisfy
@var{descend?}."
  (if (descend? music)
      (let ((es (ly:music-property music 'elements))
            (e (ly:music-property music 'element)))
        (if (pair? es)
            (set! (ly:music-property music 'elements)
                  (map (lambda (y)
                         (music-selective-map descend? function y)) es)))
        (if (ly:music? e)
            (set! (ly:music-property music 'element)
                  (music-selective-map descend? function e)))))
  (recompute-music-length (function music)))

(define-public (music-map function music)
  "Apply @var{function} to @var{music} and all of the music it contains.

First it recurses over the children, then the function is applied to
@var{music}."
  (music-selective-map ly:music? function music))

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Il n'y est toujours pas question d'articulations donc la nouvelle implémentation serait le code ci-dessous, mais je ne peux rien tester (je ne souhaite pas passer à la 2.23).


As-tu essayé de compiler LilyPond ? Jette un œil à http://lilypond.org/doc/v2.23/Documentation/contributor/compiling. Cela te donne une version locale qui n'interfère pas avec le reste du système (comme la version 2.22 que tu dois utiliser couramment).

(Bon, c'est vrai que c'est plus compliqué sous Windows. Plutôt que LilyDev, je recommanderais le Windows Subsystem for Linux, mais c'est ton choix.)

En particulier, il est de bon ton, lorsque l'on propose un patch, de vérifier soi-même qu'il n'y a pas de différences inattendues dans les tests de régression, et, si possible, d'en ajouter un pour que le bug ne soit pas réintroduit à l'avenir.

N'hésite pas si tu as des questions.


En particulier cette version a très bien pu changé la structure des notes et des silences et mis par exemple les articulations dans leur propriétés 'elements qui pour le moment est vide '().

Dans 2.22
\displayMusic { c'2-> }
donne
(make-music
  'SequentialMusic
  'elements
  (list (make-music
          'NoteEvent
          'articulations
          (list (make-music
                  'ArticulationEvent
                  'midi-extra-velocity
                  20
                  'articulation-type
                  "accent"))
          'duration
          (ly:make-duration 1)
          'pitch
          (ly:make-pitch 0 0))))

C'est toujours le cas dans 2.23 ?

Oui. elements est pour ce qui donne à la musique sa structure temporelle, tandis que articulations contient des événements sans durée.

%% Proposition de patch %%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

(define-public (music-selective-map descend? function music)
  "Apply @var{function} recursively to @var{music}, but refrain
from mapping subexpressions of music that does not satisfy
@var{descend?}."
  (if (descend? music)
      (let ((es (ly:music-property music 'elements))
            (as (ly:music-property music 'articulations))
            (e (ly:music-property music 'element)))
        (if (pair? es)
            (set! (ly:music-property music 'elements)
                  (map (lambda (y)
                         (music-selective-map descend? function y)) es)))
        (if (pair? as)
            (set! (ly:music-property music 'elements)
                  (map (lambda (y)
                         (music-selective-map descend? function y)) as)))
        (if (ly:music? e)
            (set! (ly:music-property music 'element)
                  (music-selective-map descend? function e)))))
  (recompute-music-length (function music)))

(define-public (music-map function music)
  "Apply @var{function} to @var{music} and all of the music it contains.

First it recurses over the children, then the function is applied to
@var{music}."
  (music-selective-map ly:music? function music))

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Ça semble logique.

Merci,
Jean




reply via email to

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