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

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

Re: nuances et bémol dans une fonction de groupe de notes


From: Valentin Villenave
Subject: Re: nuances et bémol dans une fonction de groupe de notes
Date: Sat, 24 Nov 2018 18:48:42 +0100

On 11/24/18, Daniel Bernair (Belgacom.net) <address@hidden> wrote:
> J’ai encodé normalement la portée soprani puis pour les alti
> j’ai voulu gagner du temps et créé une variable myR et deux
> fonctions strA et strB pour 4. 4 8.

Attention, ces fonctions attendent un argument ly:pitch, c’est-à-dire
seulement une hauteur sans rien d’autre (donc le point d’exclamation,
la liaison ou les silences provoquent une erreur).

En fait, utiliser ly:pitch apporte souvent plus d’inconvénients que
d’avantages (il a été conçu pour des cas très spécifiques, tels que
après \relative). Ici, on cherche à redéfinir la propriété 'duration
de n’importe quel événement : note, silence, accord, pouvant comporter
des articulations, des liaisons ou des altérations forcées, des
nuances etc. Il faut donc utiliser ly:music.

Dans un même ordre d’idées, je proposerais de détecter automatiquement
si le rythme doit s’appliquer à plusieurs notes différentes ou à une
seule note (qui doit alors être répétée), plutôt que de définir deux
fonctions différentes \strA et \strB.

> Comment puis-je faire ?

Ci-dessous une proposition ; j’ai également corrigé quelques petites
choses (notamment un double ~~) ; il n’y a pas besoin d’indiquer les
nuances avec ^\p lorsque \dynamicUp s’en charge déjà.

Au passage, privilégiez les pièces jointes .ly aux PDF (voire le code
directement dans le message comme ci-dessous).

% -------------

\version "2.18.2"

\header {
  title = "Idomeneo, Ré di Créta"
  subtitle = "Acte III, Scène I N° 18"
  composer = "W.A. MOZART"
  arranger = "Transcription pour EVI Laetare : Daniel Bernair"
}

global = {
  \key d \minor
  \time 12/8
  \tempo "Allegro assai" 4=100
}
myR = {r4 r8 r4}

% Largement inspiré de
% http://lists.gnu.org/archive/html/lilypond-user/2012-03/msg00621.html

#(define (extract-all-durations music)
   (map! (lambda (m) (ly:music-property m 'duration))
     (extract-music music
       (lambda (m) (ly:duration?
                    (ly:music-property m 'duration))))))

applyRhythm =
#(define-music-function (rhythm music)
   (ly:music? ly:music?)
   (let* ((r-elements (ly:music-property rhythm 'elements))
          (m-elements (ly:music-property music 'elements))
          (m (if (null? m-elements)
                 (ly:music-deep-copy
                  (make-sequential-music
                   (make-list
                    (length r-elements)
                    music)))
                 music))
          (durations (extract-all-durations rhythm))
          (l durations))
     (for-some-music
      (lambda (n)
        (and (pair? l)
             (if (ly:duration? (ly:music-property n 'duration))
                 (begin
                  (set! (ly:music-property n 'duration) (car l))
                  (set! l (cdr l))
                  (if (null? l) (set! l durations))
                  #t)
                 #f)))
      m)
     m))

str =
#(define-music-function (music) (ly:music?)
   #{ \applyRhythm {s4. s4 s8} $music #})

sopranoVoice = \relative c'' {
  \global
  \dynamicUp
  % En avant la musique !
  \clef soprano
  R1.*4 %4
  r4 r8 r4 d,8\f d4. d4 d8 \break %5
  f4. f4 f8 a4. a4 a8 %6
  d4. d, r4 r8 r4 d'8 %7
  d4. cis r4 r8 r4 e8 %8
  e4. d r4 r8 r4 f8\p %9
  f4. f4 f8 e4. e4 e8\f \break %10
  ees2. ees4.~ ees4 ees8 %11
  ees4. c r2. %12
  r r4 r8 r4 d8\p %13
  d4. d4 d8 d4. d4 d8 %14
  d4. d4 d8 d4. r4 d8 %15
  d2.\cresc d4.( d4) d8\! \break %16
}


altoVoice = \relative c' {
  \global
  \dynamicUp
  % En avant la musique !
  \clef alto
  R1.*4 %4
  \myR d8\f d4. d4 d8 %5
  \str f \str a %6
  \str {f d a'} f4. d %7
  \myR g8 e4. cis %8
  \myR a'8 f4. d %9
  \myR b'8\p \str {e, a a}   %10
  a2. a4.~ a4 a8 %11
  a4. a r2. %12
  r2. \myR a8\p %13
  \str {g c c} \str {bes! a a} %14
  \str {g c c}  \str {bes r a} %15
  g2.\cresc \str {a~ a a\!} %16

}

<<
  \sopranoVoice
  \altoVoice
>>

% ----------------------


Avec le code que je vous propose, il n’est pas possible d’attacher une
nuance à une note répétée sans que la nuance ne soit répétée elle
aussi. Du coup, voici une petite astuce qui pourrait vous être utile :
plutôt que de faire
  \str bes\mp
vous pouvez utiliser un accord vide, comme ceci :
  <>\mp \str bes

Cordialement,
V. V.



reply via email to

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