Subject: [LilyPond] Utiliser Lilypond pour écrire des partitions de castagnettes de concert

From: Sébastien Richard via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 07:02:15 +0000

Bonjour @FabFlam 

Peux tu nous joindre ton fichier Lilypond STP ? Cela permettra de mieux comprendre tes erreurs et te faire des propositions adaptées à ton besoin

Belle journée et bienvenue parmi nous :wink:

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/2).

Pour créer un nouveau sujet, écrivez à [[email-masked]](mailto:[email-masked]) ou visitez la [page d'accueil de lilypond.community](https://lilypond.community).

---

From: FabFlam via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 09:40:56 +0000

Bonjour Sébastien,
Merci du message. Voilà mon code (je l'ai peut-être légèrement modifié depuis hier)
Mais c'est trop compliqué d'écrire des partitions de castagnettes comme ça, je vais m'y prendre autrement en définissant des fonctions musicales qui me donnent les différents "toque" de castagnettes.
Fab
> Citation
\version "2.24.4"
\language "english"

%% http://lsr.di.unimi.it/LSR/Item?id=700

%LSR This snippet was contributed by Neil Puttock

#(define-public ((color-staff-lines . rest) grob)
   
   (define (index-cell cell dir)
     (if (equal? dir RIGHT)
         (cdr cell)
         (car cell)))
   
   (define (index-set-cell! x dir val)
     (case dir
       ((-1) (set-car! x val))
       ((1) (set-cdr! x val))))
   
   (let* ((common (ly:grob-system grob))
          (span-points '(0 . 0))
          (thickness (* (ly:grob-property grob 'thickness 1.0)
                        (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness)))
          (width (ly:grob-property grob 'width))
          (line-positions (ly:grob-property grob 'line-positions))
          (staff-space (ly:grob-property grob 'staff-space 1))
          (line-stencil #f)
          (total-lines empty-stencil)
          ;; use a local copy of colors list, since
          ;; stencil creation mutates list
          (colors rest))
     
     (for-each
      (lambda (dir)
        (if (and (= dir RIGHT)
                 (number? width))
            (set-cdr! span-points width)
            (let* ((bound (ly:spanner-bound grob dir))
                   (bound-ext (ly:grob-extent bound bound X)))
              
              (index-set-cell! span-points dir
                               (ly:grob-relative-coordinate bound common X))
              (if (and (not (ly:item-break-dir bound))
                       (not (interval-empty? bound-ext)))
                  (index-set-cell! span-points dir 
                                   (+ (index-cell span-points dir)
                                      (index-cell bound-ext dir))))))
        (index-set-cell! span-points dir (- (index-cell span-points dir)
                                            (* dir thickness 0.5))))
      (list LEFT RIGHT))
     
     (set! span-points
           (coord-translate span-points
                            (- (ly:grob-relative-coordinate grob common X))))
     (set! line-stencil
           (make-line-stencil thickness (car span-points) 0 (cdr span-points) 0))
     
     (if (pair? line-positions)
         (for-each (lambda (position)
                     (let ((color (if (pair? colors)
                                      (car colors)
                                      #f)))
                       (set! total-lines
                             (ly:stencil-add
                              total-lines
                              (ly:stencil-translate-axis
                               (if (color? color)
                                   (ly:stencil-in-color line-stencil
                                                        (first color)
                                                        (second color)
                                                        (third color))
                                   line-stencil)
                               (* position staff-space 0.5) Y)))
                       (and (pair? colors)
                            (set! colors (cdr colors)))))
                   line-positions)       
         (let* ((line-count (ly:grob-property grob 'line-count 5))
                (height (* (1- line-count) (/ staff-space 2))))
           (do ((i 0 (1+ i)))                      
             ((= i line-count))
             (let ((color (if (and (pair? colors)
                                   (> (length colors) i))
                              (list-ref colors i)
                              #f)))
               (set! total-lines (ly:stencil-add
                                  total-lines
                                  (ly:stencil-translate-axis
                                   (if (color? color)
                                       (ly:stencil-in-color line-stencil
                                                            (first color)
                                                            (second color)
                                                            (third color))
                                       line-stencil)
                                   (- height (* i staff-space)) Y)))))))
     total-lines))

% Définition des toque castagnettes
% \NoBeam: supprime la ligature il suffit de l'enlever pour retrouver une ligature
TA = {e'8}
TAnb = {e'8\noBeam}
PI = {f''8}
PInb = {f''8\noBeam}
TAN = {<<f''8 \\ e' >>}
TANnb = {<<f''8\noBeam \\ e'\noBeam >>}
TIN = {<<\override Stem.direction =#down b'8 \\\once \override NoteColumn.force-hshift = 0.9 \override Stem.direction =#up b' >>}
TINnb = {<< \once \override NoteColumn.force-hshift = 0.9 b'8\noBeam \\ b'8\noBeam >>}
PIM = {<< c''8\\ a' >>}
PIMnb = {<< c''8\noBeam \\ a'\noBeam >>}
trioPIM={<< \tuplet 3/2 {c''8\noBeam c''\noBeam c''} \\ \once \override TupletNumber.transparent = ##t \once \override TupletBracket.transparent = ##t\tuplet 3/2 {a'\noBeam a'\noBeam a'} >>}

RA = {[e'8 e' e' e']}
RI = {[f''8 f'' f'' f'']}
RIA = {\tuplet 5/4 {[f''16( f'' f'' f''] e')}}
TATINPInb ={\voiceOne {\override Stem.direction =#down {e'8}}{<< \once \override NoteColumn.force-hshift = 0.9 b'8 \\ b' >>} {\voiceTwo\override Stem.direction =#up f''8}}

% >Définition de la portée castagnettes
 \new Staff { 
%   \set Staff.autobeaming = ##t
%   \override Beam #'transparent = ##t
%   \revert Beam #'transparent
      % masquer les lignes centrales
    \override Staff.StaffSymbol.stencil = #(color-staff-lines black white white white black)
    % masquer la clé
    \override Staff.Clef.transparent = ##t
% Réglage de l'espacement minimal entre les objets sur la portée
%    \override SpacingSpanner.base-shortest-duration = \musicLength 16.
% Votre partition commence ici
    \numericTimeSignature \time 4/4
    
%    \set Timing.beamExceptions = #'()
     \tempo "Tempo"

{r1*20}
{\override Stem.direction =#up \TA} |
{\override Stem.direction =#up \PI} |
{\TANnb}
{\TIN}
{\PIM}
r8 r4
{\RA}
{\RI}
{\RIA}
r4
\trioPIM
r4
{{<<f''4 \\ e' >>} {e'16} \RIA \TIN \TA}
{\tweak Dots.Y-offset 1 c''8.\noBeam }

{<< \once \override Dots.transparent = ##t c''8.\noBeam \\ a'8.\noBeam >>} {<< c''16 \\ a' >>}
{<< \once \override Dots.transparent = ##t c''8.\noBeam \\ a'8.\noBeam >>} {<< c''16 \\ a' >>}
{<< \once \override Dots.transparent = ##t c''8.\noBeam \\ a'8.\noBeam >>} {<< c''16 \\ a' >>}
{<< \once \override Dots.transparent = ##t c''8.\noBeam \\ a'8.\noBeam >>} {<< c''16 \\ a' >>}
\TATINPInb
          }
 \header {
  dedication = "Dédicace"
  title = "Titre"
  subtitle = "sous-titre"
  subsubtitle = "Sous-sous-titre"
  instrument = "Instrument"
  composer = "Compositeur"
  arranger = "Arrangeur"
  copyright = "©2026 AtikaFlamenco. All rights reserved"
  tagline = ""
}
% Votre partition termine là
\layout {
  
}

> Citation

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/3).

---

From: FabFlam via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 10:12:53 +0000

\version "2.24.4"
\language "english"

   

     
     (for-each
      (lambda (dir)
        (if (and (= dir RIGHT)
                 (number? width))

     (set! span-points

RA = {[e'8 e' e' e']}
\score {

{r1*20}

}
}

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/4).

---

From: FabFlam via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 10:15:05 +0000

Bonjour Sébastien,
Merci du message. J'ai mis le code mais je ne comprends pas pourquoi il est formaté bizarrement.
Je l'ai peut-être un peu modifié depuis hier mais surtout je pense que je n'irais pas beaucoup plus loin avec cette façon de faire.
Fab

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/5).

---

From: FabFlam via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 13:07:46 +0000

Voilà je poursuis un pau chaque méthode en testant de nouvelles idées, alors si vous en avez, n'hésitez pas à me les proposer.
Merci à tous et très bonne fin de journée,
Fab

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/7).

---

From: MartialR via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 17:09:30 +0000

Bonjour, 
Alors je ne suis pas du tout à l'aise avec la percussion DrumStaff 
voici avec l'exemple précédent   

```
\version "2.24.0"

%%%%%%Nouveau nom 
drumPitchNames = #`(
  (pi  . snare)
  (ta  . dbass )
  (tin . hihat)
)

  drumPitchNames.pi  = #'snare
  drumPitchNames.ta  = #'dbass
  drumPitchNames.tin = #'hihat

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% STYLE DE LA PORTÉE (2 LIGNES)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#(define castanet-style
   '(
     (snare default #f  -2)   
     (dbass  default #f  0)  
     (hihat default #f   2)
     ))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% midi Pitches
  midiDrumPitches.snare  = g
  midiDrumPitches.dbass  = g,
  midiDrumPitches.hihat  = e
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\score {
\new DrumStaff 
\with { 
   \numericTimeSignature 
   \omit Clef
    \override StaffSymbol.line-count = #2 %2 lignes
    %espacement des lignes
    \override StaffSymbol.line-positions =   #'(-2  2) 
    instrumentName = "Castagnett' "
    %appel des nouvelles définition PitchName et midi 
    drumStyleTable = #(alist->hash-table castanet-style)
    drumPitchTable = #(alist->hash-table midiDrumPitches)
  } 

\drummode { 
  \time 4/4
  \stemDown pi8 ta \stemUp tin 
}

 \layout {  }
 \midi {  }
}
```
![image|201x85](upload://2y1le9sbWPbA2Ep044fItmbVGNe.png)

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/8).

---

From: FabFlam via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 19:21:06 +0000

Bonsoir Martial,
Merci du message et de la proposition.
Cette proposition est intéressante mais ne correspond pas à ce que je dois avoir car il y a un petit morceau de ligne au niveau de la note centrale qui n'existe pas dans les partitions de castagnettes.
Est-ce que tu sais pourquoi je n'arrive pas à bien positionner mes notes sur les lignes de la portée de percussion ?
Fab

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/9).

---

From: FabFlam via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 19:29:16 +0000

Par ailleurs, j'ai besoin des 5  lignes de la portée car il y aura d'autres sons.

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/10).

---

From: MartialR via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 19:49:26 +0000

peux-tu mettre un extrait image de ta partition. 

la hauteur des notes est située sur les 5 lignes et interlignes.

 0 la ligne du milieu 
 4 dernière ligne du haut
-4 dernière ligne du bas

```
 4--------------------
 3
 2 -------------------
 1 
 0 -------------------
-1
-2--------------------
-3
-4---------------------

```

donc ceci ne marche pas  avec l'intervalle standard des portées

```
#(define castanet-style
  (alist->hash-table
   '(
     (pi  default #f  10)   
     (ta  default #f  5)  
     (tin default #f  0) 
   )))
```
il faut faire
```
#(define castanet-style
  (alist->hash-table
   '(
     (pi  default #f   -2)   
     (ta  default #f   0)  
     (tin default #f   2) 
   )))
```

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/11).

---

From: MartialR via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 21:34:37 +0000

Voici un essai 
avec 2 lignes 3 lignes et 5 lignes
instruments de percussion arbitraire 

```
\version "2.24"

%transparence du point de prolongement
ndot= { \override Dots.transparent = ##t }
rdot= { \revert Dots.transparent }

% placement sur la portée des instruments Drums
#(define mydrums '(
                    (claves default #f  4)
                    (snare default #f  2)
                    (hiwoodblock default #f  0)
                    (handclap default #f -2)
                    (lowoodblock default #f -4)))

%renommage des Drums (to et h au hasard)
drumPitchNames = #`(
                     (pi  . hiwoodblock )
                     (ta  . lowoodblock )
                     (tin . claves)
                     (to . snare)
                     (clap . handclap)
                     )

catagnetstaffTwolignes = {
  \override Staff.LedgerLineSpanner.stencil = ##f
  \override Staff.StaffSymbol.line-positions = #'(-4  4)
}

catagnetstaffTroislignes = {
 \override Staff.LedgerLineSpanner.stencil = ##f
  \override DrumStaff.StaffSymbol.line-positions = #'(-4 0 4)
}

\score {
  \new DrumStaff {
    % with this you load your new drum style table
    \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
    \drummode {
      \catagnetstaffTwolignes
      \time 2/4
      tin8 16 16 8-> 8
      \tuplet 5/2 {  tin16[ 16 16 16 16] }
      pi8 16 16-> ~ 16 ta16
      \stopStaff \startStaff
      \catagnetstaffTroislignes
      pi8 pi tin8 ta
      pi8 pi tin8 ta
      \stopStaff \startStaff
      \revert Staff.StaffSymbol.line-positions
      \ndot to8. pi16  to8. ta16  \tuplet 5/2 { clap16 16 16 16 16 }
      \rdot ta4.
    }
  }
  \layout { }
  \midi {  }
}
```

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/12).

---

From: FabFlam via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 21:45:04 +0000

Ah bien merci infiniment.
Je testerai demain et te dirai le résultat.
En tout cas, c'est vraiment super sympa de me proposer tout ça.
Fab

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/13).

---

From: FabFlam via LilyPond <[email-masked]>
Date: Tue, 06 Jan 2026 15:55:23 +0000

@MartialR Super ! c'est exactement ce qu'il me faut. Je vais pouvoir continuer à avancer dans cette direction.
Merci encore.

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/14).

---

From: FabFlam via LilyPond <[email-masked]>
Date: Thu, 08 Jan 2026 16:17:09 +0000

Bonjour,
Alors, grâce à Martial j'ai bien avancé dans mon projet. Mais il y a encore des points que je n'arrive pas à résoudre.
Pour introduire les différents "toque" propres aux castagnettes je définis des fonctions musicales. Mais il y en a que je n'arrive pas à faire:
1) j'aimerais une fonction musicale qui permette d'écrire RAIAI= << {s32 [pi16 pi pi pi]} \\ {[ta16 ta ta ta] s32} >> mais en passant les durées en arguments.
J'ai écrit:
RAIAI = #(define-music-function (dur1 dur2) (ly:duration? ly:duration?)
         #{
           <<
             \new DrumVoice {
               \voiceOne
               \drummode {s $dur1 [pi $dur2 pi pi pi]}
             }

             \new DrumVoice {
               \voiceTwo
               \drummode { [ta $dur2 ta ta ta] s $dur2 }
             }
         #})
Je n'ai pas d'erreur en compilation mais je ne sais pas comment passer les durées en arguments au moment de l'appel à la fonction.
Pour info, une fonction comme:
RA = #(define-music-function (dur) (ly:duration?)
        #{
          \drummode {\stemDown { [ta $dur ta ta ta] }}
        #})
fonctionne parfaitement lorsqu'on l'appelle avec \RIA16

Je ne sais pas si je m'y prend bien, une idée ?
Fab

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/15).

---

From: MartialR via LilyPond <[email-masked]>
Date: Thu, 08 Jan 2026 16:24:39 +0000

voir dans ce message une piste : 
https://lilypond.community/t/raccourcis-pour-les-flas/5999 

Peut-on avoir un scan de la partition s'il existe ?

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/16).

---

From: FabFlam via LilyPond <[email-masked]>
Date: Thu, 08 Jan 2026 16:31:06 +0000

Je vais regarder ce message. MAis sinon pas de partition puisque je n'arrive pas à faire appel à cette fonction.
Pr contre lorsque j'écris dans la partition:
<< {s32 [pi16 pi pi pi]} \\ {[ta16 ta ta ta] s32} >>
ça donne bien ce qu'il faut, à savoir:
![image|370x173](upload://byv2dAFmxnA7GLI48Bd9f1WJjyt.png)

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/17).

---

From: FabFlam via LilyPond <[email-masked]>
Date: Thu, 08 Jan 2026 17:01:22 +0000

Ah encore merci @MartialR en regardant le fil que tu m'as indiqué j'ai en effet trouvé comment faire appel à ma fonction.
Mais je me demande: y aurait-il moyen de n'avoir que la durée des notes en argument ? Puisque les silences durent 2 fois moins longtemps, faire un calcul au sein de la fonction qui permette d'avoir durs = dur*2 ?

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/utiliser-lilypond-pour-ecrire-des-partitions-de-castagnettes-de-concert/6064/18).