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

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

Re: CC dans le fichier MIDI


From: Jean Abou Samra
Subject: Re: CC dans le fichier MIDI
Date: Sun, 30 May 2021 16:53:31 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1

Le 30/05/2021 à 15:06, Christophe Pochon a écrit :
Merci pour ces explications Jean !
C'est frustrant de ne pas pouvoir ajouter les autres CC plus facilement. Ou de pouvoir passer le numéro de CC en paramètre.

C'est ce que devait faire le patch que tu as trouvé, mais il n'était pas complet.

Bon, si je peux déjà faire quelque chose avec le midiExpression ça me fera déjà gagner du temps. Mais il faudrait que je trouve le moyen de récupérer à tout moment la valeur de vélocité. J'ai trouvé dans midi.scm les correspondances des nuances avec les valeurs de vélocité, mais comment et où sont gérés les accents, crescendi, etc. ?

Les accents sont gérés directement par le Note_performer. Quant aux nuances (\p comme \<), elles sont traitées par le Dynamic_performer. Leurs codes respectifs sont dans les fichiers lily/note-performer.cc et lily/dynamic-performer.cc, dont on peut lire les sources ici par exemple :

https://gitlab.com/lilypond/lilypond/-/blob/master/lily/note-performer.cc

Idéalement j'aimerais créer une fonction qui ajouterait automatiquement des \set midiExpression = #x.x . Exemple :

musique = \relative c' { c4\p c c-> c\ff c\ppp }

exprMusique = \expr \musique

et le résultat serait que exprMusique contiendrait :

{
    \set midiExpression = #0.55 c4\p c \set midiExpression = #0.60 c-> \set midiExpression = #0.8 c\ff \set midiExpression = #0.42 c\ppp
}

\version "2.22.0"

#(use-modules (srfi srfi-26))

expr =
#(define-music-function (music) (ly:music?)
   (let ((last-expression #f))
     (music-map
       (lambda (m)
         (if (music-is-of-type? m 'note-event)
             (let* ((articulations (ly:music-property m 'articulations))
                    (dynamics (filter (cute music-is-of-type? <> 'absolute-dynamic-event)
                                      articulations)))
               (for-each
                 (lambda (d)
                   (set! last-expression
                         (default-dynamic-absolute-volume
                           (ly:music-property d 'text))))
                 dynamics)
               (if last-expression
                   (make-sequential-music
                     (list
                       (make-property-set 'midiExpression last-expression)
                       m))
                   m))
             m))
       music)))

musique = \relative c' { c4\p c c-> c\ff c\ppp }

\displayLilyMusic \expr \musique

Note bien les limitations :

- Dans de la musique parallèle << >>, il faudra sans doute l'appliquer à chaque tronçon de musique séquentielle { } (pas le temps de tester pour le moment),
- Les articulations ne sont pas prises en charge,
- Les crescendi et decrescendi non plus.

Mais bon, je crois que je vais continuer à demander à Logic Pro X de gérer cela :-)

Sage décision à mon avis.

Cordialement,
Jean



reply via email to

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