Subject: Passage noires à blanches

From: Jean-Julien Fleck <[email-masked]>
Date: Mon, 23 Dec 2019 09:24:19 +0100

Bonjour à tous,

Je dispose de musique déjà tapée sur deux temps constituée principalement
de noires. J'aimerais ne conserver que la première note de chaque mesure et
la transformer en blanche. Est-ce facilement faisable de manière
automatique ?

Exemple

musique = \relative c' {a4 b c d e f g a}
\new Staff {\time 2/4 \musique}

% S'il y avait une commande magique permettant de faire
% musiqueVoulue = \fonctionMagique \musique
% qui ait le même effet que
musiqueVoulue = \relative c' {a2 c e g}
\new Staff {\time 2/4 \musiqueVoulue}

Question subsidiaire: de temps en temps, il y a des passages sous formes de
4 croches, peut-on les garder inchangés ?

Merci pour votre aide,

-- 
JJ Fleck
Physique et Informatique
PCSI1 Lycée Kléber

---

From: Vincent Gay <[email-masked]>
Date: Mon, 23 Dec 2019 09:47:12 +0100

Le 23/12/2019 à 09:24, Jean-Julien Fleck a écrit :
> Je dispose de musique déjà tapée sur deux temps constituée
> principalement de noires. J'aimerais ne conserver que la première note
> de chaque mesure et la transformer en blanche.

Bonjour,

avec Frescobaldi sélectionner la partie concernée puis menu Outils ->
Rythme -> Doubler les durées

Bonne semaine et joyeuses fêtes.

-- 
Vincent Gay
Envoyé depuis mon saxo-phone :)
http://blog.vintherine.org/ - http://photos.vintherine.org/

---

From: Jean-Julien Fleck <[email-masked]>
Date: Mon, 23 Dec 2019 09:58:57 +0100

Bonjour Vincent,

> Rythme -> Doubler les durées

Merci pour la réponse (qui m'a fait découvrir le menu "Outils") mais
malheureusement c'est plus compliqué que cela: je ne veux pas juste doubler
les durée de toutes les notes mais doubler les durées *et* n'en prendre
qu'une sur deux (de sorte que la durée totale soit conservée).

Je pensais qu'une fonction scheme pourrait faire une chose pareille, mais
je bien incapable d'en écrire pour le moment.
Je vais donc plonger du côté du code de Frescobaldi pour voir si je peux
plus facilement adapter le script Python qui permet de doubler toutes les
durées.

Merci pour l'idée et bonnes fêtes aussi !

-- 
JJ Fleck
Physique et Informatique
PCSI1 Lycée Kléber

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Mon, 23 Dec 2019 23:02:14 +0100

Voir éventuellement :
http://lilypond-french-users.1298960.n2.nabble.com/reecrire-en-changeant-le-temps-td2967000.html#a2969027
Cordialement,
Pierre

---

From: Valentin Villenave <[email-masked]>
Date: Wed, 25 Dec 2019 13:22:35 +0000

On 12/23/19, Jean-Julien Fleck <[email-masked]> wrote:
> Est-ce facilement faisable de manière automatique ?

Facilement, c’est certain pour quelqu’un qui s’y connaît vraiment (ce
qui, hélas, n’est toujours pas mon cas).

J’ai essayé de faire ça de façon sophistiquée et intelligente, mais je
ne parviens qu’à donner un grand coup de massue à la fin avec un code
qui fonctionne mais qui génère tout plein d’erreurs. (La chose
élégante à faire serait d’utiliser 'void, mais pour une raison bizarre
ça ne marche pas.)

Voici :

%%%%

% Pompé sur Gilles:
% http://gillesth.free.fr/Lilypond/extractMusic/extractMusic.ly

#(define (moment->rhythm moment)
   "Try to convert moment to a duration suitable for displaying a note
or a rest,
so in the following form : (ly:make-duration k dots 1 1)
Note that, if moment=5/8, for example, no duration of this form is possible."
   (let* ((p (ly:moment-main-numerator moment))
          (q (ly:moment-main-denominator moment))
          (k (- (ly:intlog2 q) (ly:intlog2 p))))
     (if (< (ash p k) q) (set! k (1+ k)))
     (if (> k 6)
         (ly:make-duration 6 0)
         (let loop ((p1 (- (ash p k) q))
                    (dots 0))
           (let ((p2 (ash p1 1)))
             (if (>= p2 q)
                 (loop (- p2 q) (1+ dots))
                 (let* ((dur (ly:make-duration k dots))
                        (dur-len (ly:duration-length dur))
                        (frac (ly:moment-div moment dur-len)))
                   (ly:make-duration k dots
                     (ly:moment-main-numerator frac)
                     (ly:moment-main-denominator frac)))))))))

simplify =
#(define-music-function (dur m) ((ly:duration? '()) ly:music?)
   (music-map
    (lambda (ev)
      (make-sequential-music
       (list
        (make-apply-context
         (lambda (ctx)
           (let ((pos (ly:moment-main
                       (ly:context-property ctx 'measurePosition)))
                 (len (ly:context-property ctx 'measureLength)))
             (if (and
                  (ly:moment? len)
                  (music-is-of-type? ev 'rhythmic-event))
                 (if (eq? pos 0)
                     (ly:music-set-property! ev 'duration
                       (if (null? dur)
                           (moment->rhythm len)
                           dur))
   ;; Moche, mais efficace…
                     (ly:music-set-property! ev 'name 'portnawak))))))
        ev)))
    m))

\relative {
  \time 2/4
  \simplify {
    a8\f b c b
    r8 a b4~
    \time 3/4
    b a8 b c d
    e4 e e
  }
  \time 5/8
% Pour des mesures plus compliquées,
% indiquer la valeur rythmique souhaitée :
  \simplify 2.*5/6 {
    c8 d e d e f4. e8 d c2*5/4
  }
}

%%%%

V.