Thank you Aaron and Jean, your code works!
But I have some trivial questions.
If I write:
\displayLilyMusic \chordmode {c}
I get:
{ < c' e' g' >4 }
It looks a good "compound music expression".
But Aaron code and Jean code behave differently. Have a look here
This does not work.
\version "2.23.2"
#(define (extract music)
(first (ly:music-property music 'elements)))
{ #(first-element #{ \chordmode {c} #}) }
And this work as expected:
\version "2.23.2"
extract =
#(define-music-function
(which what music)
(symbol? symbol? ly:music?)
(let ((extracted (extract-typed-music music what)))
(case which
((first) (first extracted))
((last) (last extracted))
((all all-as-sequence) (make-sequential-music extracted))
((all-as-chord) (make-event-chord extracted))
(else (ly:input-warning (*location*)
"\\extract does not understand '~s'" which)
music))))
{ \extract first event-chord \chordmode {c} }
why?
Sorry if the question is very trivial.
g.
On Fri, 23 Apr 2021 at 11:29, Aaron Hill <[email protected]> wrote:
> On 2021-04-23 1:58 am, Jean Abou Samra wrote:
> > If you have it at hand in Scheme:
> >
> > \version "2.23.
> >
> > #(define (first-element music)
> > (first (ly:music-property music 'elements)))
> >
> > { #(first-element #{ { c'1 } #}) }
> >
> > It would be helpful to understand your use
> > case; this sounds like you may not necessarily
> > need to unpack a sequential music expression.
>
> In my usual fashion, here's an over-engineered option showing off some
> of the built-in functions in an easily extensible pattern:
>
> %%%%
> \version "2.22.0"
>
> extract =
> #(define-music-function
> (which what music)
> (symbol? symbol? ly:music?)
> (let ((extracted (extract-typed-music music what)))
> (case which
> ((first) (first extracted))
> ((last) (last extracted))
> ((all all-as-sequence) (make-sequential-music extracted))
> ((all-as-chord) (make-event-chord extracted))
> (else (ly:input-warning (*location*)
> "\\extract does not understand '~s'" which)
> music))))
>
> foo = { c <e g> }
>
> \fixed c' {
> \extract first event-chord \foo
> \extract last note-event \foo
> \extract all note-event \foo
> \extract all-as-chord note-event \foo
> }
> %%%%
>
> -- Aaron Hill