[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