Subject: Coup de pouce Scheme

From: Christophe Pochon <[email-masked]>
Date: Mon, 5 Jul 2021 17:01:48 +0200

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

---

From: Jean Abou Samra <[email-masked]>
Date: Mon, 5 Jul 2021 17:34:46 +0200 (CEST)

Le 05/07/2021 17:01, Christophe Pochon <[email-masked]> 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
}
}
%%%%%%%

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.

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

---

From: Christophe Pochon <[email-masked]>
Date: Mon, 5 Jul 2021 18:31:27 +0200

Mille mercis Jean !

Christophe Pochon

Le lun. 5 juil. 2021 à 17:34, Jean Abou Samra <[email-masked]> a écrit :

> 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
> 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
>