Zitat von: Manuela am Sonntag, 3. Mai 2026, 12:55Unsereins ist schon froh, wenn er es überhaupt hinkriegt, auch wenn es umständlicher ist als nötig.

mymusicI = { c4 d e f g2 g2 a4 a a a g1 fis }
mymusicII = { c4 d e f g2 g2 a4 a a a g1 aes }
mybook = #(define-void-function (mus) (ly:music?)
(print-book-with-defaults
#{ \book { \bookpart { \score { \new Staff { \clef bass $mus } } } } #}))
\mybook \mymusicI
\mybook \mymusicII
mymusic = { c4 d e f g2 g2 a4 a a a g1 }
mybook = #(define-scheme-function (mymusic) (ly:music?) #{
\book { \bookpart { \score { \new Staff { \clef bass \mymusic }}} }
#})
\mybook \mymusicZitat von: harm6 am Sonntag, 3. Mai 2026, 12:25Nicht verstanden habe ich allerdings warum der übliche Ambitus nicht hinreichend ist.

\version "2.26.0"
#(define (make-note-event pitch duration)
"Takes PITCH and DURATION and returns a NoteEvent."
(make-music
'NoteEvent
'duration duration
'pitch pitch))
#(define (bottom-top-notes music duration)
"Takes MUSIC and returns lowest and highest note each with duration DURATION
as a plain list."
(let* ((all-pitches (music-pitches music))
(sorted-pitches (sort all-pitches ly:pitch<?)))
(map
(lambda (pitch) (make-note-event pitch duration))
(list (car sorted-pitches) (last sorted-pitches)))))
extrema =
#(define-music-function (proc m music duration)
((procedure? identity) ly:music? ly:music? ly:duration?)
"Takes MUSIC and returns sequential music, simultaneous music or an event-chord
with duration DURATION, relying on the type M provides.
The optional PROC, supposed to be @code{first} or @code{last}, may be used to
get the bottom or top note only."
(ly:music-set-property! m 'elements
(ensure-list (proc (bottom-top-notes music duration))))
m)
%%%%%%%%%%%%
%% EXAMPLES
%%%%%%%%%%%%
testMus = \relative { d' e fis g a b cis }
{ \extrema {} \testMus 4 }
%% Below, preceed with \new Staff to avoid implicit creation of two staves
{ \extrema <<>> \testMus 4 }
{ \extrema <> \testMus 4 }
%% Get only bottom or top note
{ \extrema #first {} \testMus 4 }
{ \extrema #last {} \testMus 4 }
#(define (pitches->chord plist)
(make-music
'EventChord 'elements
(if (list? plist)
(map (lambda (p)
(make-music
'NoteEvent 'duration (ly:make-duration 0)
'pitch p))
plist)
(make-music
'NoteEvent 'duration (ly:make-duration 0)
'pitch plist)
)))\version "2.26.0"
myambitus =
#(define-music-function (mus dur)(ly:music? integer?)
(let*
(
(alle-pitches
(let loop ((mus mus) (pitches '()))
(let ((p (ly:music-property mus 'pitch)))
(if (ly:pitch? p)
(cons p pitches)
(let ((elt (ly:music-property mus 'element)))
(fold loop
(if (ly:music? elt)
(loop elt pitches)
pitches)
(ly:music-property mus 'elements)))))))
(alle-sortiert (sort alle-pitches ly:pitch<?))
(tief (car alle-sortiert))
(hoch (car (reverse alle-sortiert)))
)
; (display tief )(display hoch)
; (write-me "alle pitches----> " (list? alle-pitches))
(make-music
'EventChord 'elements
(list
(make-music
'NoteEvent
'duration
(ly:make-duration dur)
'pitch
tief)
(make-music
'NoteEvent
'pitch
hoch
'duration
(ly:make-duration dur))))
))
mymus = \relative { c' c f,, }
{ \clef bass \myambitus \mymus #3 }\version "2.26.0"
myambitus =
#(define-music-function (mus dur)(ly:music? ly:duration?)
(let*
(
(alle-pitches
(let loop ((mus mus) (pitches '()))
(let ((p (ly:music-property mus 'pitch)))
(if (ly:pitch? p)
(cons p pitches)
(let ((elt (ly:music-property mus 'element)))
(fold loop
(if (ly:music? elt)
(loop elt pitches)
pitches)
(ly:music-property mus 'elements)))))))
(alle-sortiert (sort alle-pitches ly:pitch<?))
(tief (car alle-sortiert))
(hoch (car (reverse alle-sortiert)))
)
; (display tief )(display hoch)
; (write-me "alle pitches----> " (list? alle-pitches))
(make-music
'EventChord 'elements
(list
(make-music
'NoteEvent
'duration
dur
'pitch
tief)
(make-music
'NoteEvent
'pitch
hoch
'duration
dur)))
))
mymus = \relative { c' c f,, }
{ \clef bass \myambitus \mymus #(ly:make-duration 0) }
{ \clef bass \myambitus \transpose c e \mymus 2. }