Subject: Re: Répétition «octave en accord»

From: Gilles Thibault <[email-masked]>
Date: Mon, 09 Jul 2018 22:34:44 +0200

Le 2018-06-30 15:23, Bernard Meylan a écrit :
> Merci pour ta... piste! En fait ta solution m'a mis sur la piste d'une
> fonction qui permet exactement de générer des octaves à partir de notes
> seules: http://lsr.di.unimi.it/LSR/Item?id=445
> 

Notez que visuellement la solution ci-dessous donne le même résultat

%%
\version "2.19.65"
music = \relative { c'4 d r g f e f g <e g c>1}
\new Voice << \music \transpose c c' \music >>
%%

Je pensais que cela poserait des problèmes avec des articulations mais 
apparemment non :

%%
\version "2.19.65"
music = \relative { c'4-. d-. r g( f e f g) <e g c>1-> }
\new Voice << \music \transpose c c' \music >>
%%

NB
Bon, désolé de répondre si tard.

-- 
Gilles

---

From: Gilles Thibault <[email-masked]>
Date: Mon, 09 Jul 2018 23:09:28 +0200

> \new Voice << \music \transpose c c' \music >>

Pour la fonction correspondante, ça donnerait (en reprenant le nom de la 
fonction du snippet http://lsr.di.unimi.it/LSR/Item?id=445) :

%%

makeOctaves = #(define-music-function (parser location arg mus) 
(integer? ly:music?)
   (let ((p1 (ly:make-pitch 0 0 0))
         (p2 (ly:make-pitch arg 0 0)))
     #{ << $mus \transpose $p1 $p2 $mus >> #}))

\new Voice \makeOctaves #1 \music
\new Voice \makeOctaves #-1 \music

%%

Si on préfère tout en scheme (légérement plus court ici)

%%

makeOctaves = #(define-music-function (parser location arg mus) 
(integer? ly:music?)
   (make-simultaneous-music (list
      mus
      (ly:music-transpose (ly:music-deep-copy mus)
                          (ly:make-pitch arg 0 0)))))

\new Voice \makeOctaves #1 \music
\new Voice \makeOctaves #-1 \music

%%

-- 
Gilles

---

From: Gilles Thibault <[email-masked]>
Date: Mon, 16 Jul 2018 17:18:02 +0200

>                          (ly:make-pitch arg 0 0)))))

2 dernières choses.

1- la fonction ci-dessus copie en double les textes : ce n'est pas bien 
!

music = \relative { c'4-. d-. r g( f^"coucou" e f g) <e g c>1-> }
\new Voice \makeOctaves #1 \music
\new Voice \makeOctaves #-1 \music

Le "coucou" est en double...
Il ne faudrait pas copier les TextScript

2- La fonction \makeOctaves du snippet 
http://lsr.di.unimi.it/LSR/Item?id=445 ne marche pas pour moi avec 
l'exemple ci-dessus !
J'ai du changer la fonction (octave-up m t) pour que ça fonctionne :

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

#(define (octave-up m t)
  (let* ((old-pitch (ly:music-property m 'pitch))
         (new-pitch (ly:make-pitch
           (+ (ly:pitch-octave old-pitch) t)
           (ly:pitch-notename old-pitch)
           (ly:pitch-alteration old-pitch)))
         (new-note (ly:music-deep-copy m)))
   (set! (ly:music-property new-note 'pitch) new-pitch)
   new-note))

#(define (octavize-chord elements t)
  (cond ((null? elements) elements)
      ((eq? (ly:music-property (car elements) 'name) 'NoteEvent)
        (cons (car elements)
              (cons (octave-up (car elements) t)
                    (octavize-chord (cdr elements) t))))
      (else (cons (car elements) (octavize-chord (cdr elements ) t)))))

#(define (octavize music t)
  (if (eq? (ly:music-property music 'name) 'EventChord)
        (ly:music-set-property! music 'elements (octavize-chord
(ly:music-property music 'elements) t)))
  music)

makeOctaves = #(define-music-function (parser location arg mus) 
(integer? ly:music?)
  (music-map (lambda (x) (octavize x arg)) (event-chord-wrap! mus)))

music = \relative { c'4-. d-. r g( f^"coucou" e f g) <e g c>1-> }

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

-- 
Gilles