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

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

Re: Coup de pouce Scheme


From: Christophe Pochon
Subject: Re: Coup de pouce Scheme
Date: Mon, 5 Jul 2021 18:31:27 +0200

Mille mercis Jean !

Christophe Pochon



Le lun. 5 juil. 2021 à 17:34, Jean Abou Samra <jean@abou-samra.fr> a écrit :
Le 05/07/2021 17:01, Christophe Pochon <music@christophe-pochon.com> a écrit :


Bonjour,
Est-ce que quelqu'un pourrait m'aiguiller pour réaliser une fonction scheme de filtrage. L'idée est de réaliser une fonction qui me permettrait facilement de séparer les notes d'un instrument en fonction des articulations. Ainsi je pourrais, à partir d'une portée destinée à l'impression, générer 4-5 portées midi, une pour les notes normales, la deuxième pour les notes staccato, etc. Et ensuite je pourrais assigner ces pistes aux sons de l'instrument, avec une piste par articulation.

Exemple :

%%%%%%%%%%%

\version "2.20.0"

music = \relative c'
{
    c8 c-. d( e f) g4-- a8
}
% normal = \keepOnly "n" \music % générerait :
normal = \relative c'
{
    c8 r r4 r r8 a'
}
% dotted = \keepOnly "d" \music% générerait :
dotted = \relative c'
{
 r8 c r4 r2  
}
% slurred = \keepOnly "s" \music% générerait :
slurred = \relative c'
{
    r4 d8 e f r8 r4
}
\score {
    <<
\music
\normal
\dotted
\slurred
    >>
}
%%%%%%%

Je ne souhaite pas que quelqu'un me fasse tout ce travail, au contraire : j'ai envie de profiter de cette motivation pour progresser en scheme. Mais je ne sais pas trop comment m'y prendre.

Je présume que ma fonction commencera ainsi :

keepOnly = #(define-music-function (what music) (string ly:music?))

mais à l'intérieur, je ne sais pas comment commencer. Il y aura probablement une ligne avec (case what , mais ça m'énerve de pas m'en sortir.

Merci de votre aide !

Christophe Pochon

Bonjour,

Content que le café Lily en ait poussé plus d'un à se mettre à Scheme !

Ce filtrage n'est pas tout à fait la tâche la plus facile pour commencer… Cela dit, si vous y tenez, voici quelques indications sans une solution complète :

- Écrivez une _expression_ musicale pas trop compliquée (comme { c'4 d-.\p }) et mettez \displayMusic juste devant, pour vous familiariser avec la manière dont elle est construite. Vous pouvez consulter la liste types de musique sur http://lilypond.org/doc/v2.22/Documentation/internals/music-expressions

- Pour parcourir et modifier la musique, utilisez music-map. Il y a quelques explications (en anglais) sur https://extending-lilypond.readthedocs.io/en/latest/music.html#music-transformation-tools. N'oubliez pas de travailler sur une copie de la musique pour ne pas l'abîmer, en vue de la transformer encore dans les appels suivants à votre fonction. Pour cela, on recourt à la fonction ly:music-deep-copy décrite sur https://extending-lilypond.readthedocs.io/en/latest/music.html#copying-music.

- En créant un SkipEvent à partir d'un NoteEvent, faites hériter la propriété 'duration. Voir https://extending-lilypond.readthedocs.io/en/latest/music.html#constructing-music-from-scratch.

- Pensez à la fonction any pour observer si l'une quelconque des articulations a le type recherché. Il faudra lui passer une fonction lambda. La documentation est par ici : https://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/SRFI_002d1-Searching.html#SRFI_002d1-Searching

Bon courage, et n'hésitez pas à demander de l'aide !

Cordialement,
Jean

reply via email to

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