[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.