compoundMeter et Time signature style with note in the denominator

Bonjour !
Suite à un post sur la liste anglaise, je m'aperçois que le snippet 642 que j'utilise ignore le "compoundMeter"...
J'ai essayé pas mal de chose mais je ne trouve pas la solution...
L'idée c'est, dans l'exemple ci-dessous, d'avoir un compoundMeter égal à 1+1+3 sur une noire et non pas le chiffre 4...
Si quelqu'un à une idée!!!
Musicalement Gilles

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

#(use-modules (ice-9 pretty-print)) \void \displayScheme #(1- (integer-length 4))
#(define-public (format-time-sig-note grob)
(let* ((frac (ly:grob-property grob 'fraction))
(num (if (pair? frac) (car frac) 4))
(den (if (pair? frac) (cdr frac) 4))
(m (markup #:override '(baseline-skip . 0.5)
#:center-column (#:number (number->string num)
#:override '(style . default)
#:note
(ly:make-duration (1- (integer-length den)) 0 1)
DOWN))))
(grob-interpret-markup grob m)))

\layout {
\context {
\Score
\override TimeSignature.stencil = #format-time-sig-note
}
}

\score {
\relative {
\time 2/4 \clef "bass"
c16 d e f g a b c |
\time 3/4 \clef "treble"
c16 d e f g a b c d e f g |
\time 4/4
c,,16 d e f g a b c d e f g a b c d |
\compoundMeter #'((1 1 3 4))
c,,16 d e f g a b c d e f g a b c d e f g a |
}
}

Bonjour,

C'est parce que d'une part, le code du snippet ne se prend pas en
compte le cas d'une métrique plus complexe que A/B, d'autre part
parce que \compoundMeter fait elle-même un \override du TimeSignature.stencil,
qui écrase celui de la fonction. Donc, il faut la redéfinir.

\version "2.22.2"

#(define (format-compound-time-sig-note grob elts)
(cond
((number-list? elts)
(format-compound-time-sig-note grob (list elts)))
((number-pair? elts)
(format-compound-time-sig-note grob (list (list (car elts)
(cdr elts)))))
(else
(grob-interpret-markup
grob
(make-line-markup
(list-join
(map
(lambda (elt)
(let* ((rev (reverse elt))
(den (car rev))
(nums (reverse (cdr rev))))
(make-override-markup
'(baseline-skip . 0)
(make-center-column-markup
(list
(make-line-markup
(list-join
(map make-number-markup (map number->string nums))
"+"))
(make-note-markup
(ly:make-duration (ly:intlog2 den))
DOWN))))))
elts)
(make-vcenter-markup "+")))))))

#(define-public (format-time-sig-note grob)
(format-compound-time-sig-note grob (ly:grob-property grob 'fraction)))

\layout {
\context {
\Score
\override TimeSignature.stencil = #format-time-sig-note
}
}

compoundMeter =
#(let ((default-compoundMeter compoundMeter))
(define-music-function (args) (pair?)
#{
$default-compoundMeter #args
\once \override Timing.TimeSignature.stencil =
#(lambda (grob)
(format-compound-time-sig-note grob args))
#}))

\score {
\relative {
\time 2/4
\clef "bass"
c16 d e f g a b c |
\time 3/4 \clef "treble"
c16 d e f g a b c d e f g |
\time 4/4
c,,16 d e f g a b c d e f g a b c d |
\compoundMeter #'((1 1 3 4))
c,,16 d e f g a b c d e f g a b c d e f g a |
\compoundMeter #'((1 1 4) (1 8))
c,,,16 d e f g a b c d e
\compoundMeter #'(1 1 3 4)
c,16 d e f g a b c d e f g a b c d e f g a |
}
}

Cordialement,
Jean

···

Le 09/11/2022 à 16:10, Ya Gloops a écrit :

Bonjour !
Suite à un post sur la liste anglaise, je m'aperçois que le snippet 642 que j'utilise ignore le "compoundMeter"...
J'ai essayé pas mal de chose mais je ne trouve pas la solution...
L'idée c'est, dans l'exemple ci-dessous, d'avoir un compoundMeter égal à 1+1+3 sur une noire et non pas le chiffre 4...
Si quelqu'un à une idée!!!
Musicalement Gilles

Enorme !!!
On a beaucoup de chance de t'avoir sur la liste française Jean !!!
Merci beaucoup...

Bonjour !
Suite à un post sur la liste anglaise, je m'aperçois que le snippet 642 que j'utilise ignore le "compoundMeter"...
J'ai essayé pas mal de chose mais je ne trouve pas la solution...
L'idée c'est, dans l'exemple ci-dessous, d'avoir un compoundMeter égal à 1+1+3 sur une noire et non pas le chiffre 4...
Si quelqu'un à une idée!!!
Musicalement Gilles

Bonjour,

C'est parce que d'une part, le code du snippet ne se prend pas en
compte le cas d'une métrique plus complexe que A/B, d'autre part
parce que \compoundMeter fait elle-même un \override du
TimeSignature.stencil,
qui écrase celui de la fonction. Donc, il faut la redéfinir.

\version "2.22.2"

#(define (format-compound-time-sig-note grob elts)
(cond
((number-list? elts)
(format-compound-time-sig-note grob (list elts)))
((number-pair? elts)
(format-compound-time-sig-note grob (list (list (car elts)
(cdr elts)))))
(else
(grob-interpret-markup
grob
(make-line-markup
(list-join
(map
(lambda (elt)
(let* ((rev (reverse elt))
(den (car rev))
(nums (reverse (cdr rev))))
(make-override-markup
'(baseline-skip . 0)
(make-center-column-markup
(list
(make-line-markup
(list-join
(map make-number-markup (map number->string nums))
"+"))
(make-note-markup
(ly:make-duration (ly:intlog2 den))
DOWN))))))
elts)
(make-vcenter-markup "+")))))))

#(define-public (format-time-sig-note grob)
(format-compound-time-sig-note grob (ly:grob-property grob 'fraction)))

\layout {
\context {
\Score
\override TimeSignature.stencil = #format-time-sig-note
}
}

compoundMeter =
#(let ((default-compoundMeter compoundMeter))
(define-music-function (args) (pair?)
#{
$default-compoundMeter #args
\once \override Timing.TimeSignature.stencil =
#(lambda (grob)
(format-compound-time-sig-note grob args))
#}))

\score {
\relative {
\time 2/4
\clef "bass"
c16 d e f g a b c |
\time 3/4 \clef "treble"
c16 d e f g a b c d e f g |
\time 4/4
c,,16 d e f g a b c d e f g a b c d |
\compoundMeter #'((1 1 3 4))
c,,16 d e f g a b c d e f g a b c d e f g a |
\compoundMeter #'((1 1 4) (1 8))

c,,,16 d e f g a b c d e
\\compoundMeter \#'\(1 1 3 4\)
c,16 d e f g a b c d e f g a b c d e f g a |

}
}

Cordialement,
Jean

···

Le mercredi 9 novembre 2022 à 18:53:39 UTC+1, Jean Abou Samra <****@****> a écrit :
Le 09/11/2022 à 16:10, Ya Gloops a écrit :