Zitat von: ingmarWeil, ich denke schon länger darüber nach, dass LilyPond wie wohl kein anderes "Notenschreibprogramm" viel mehr kann als Noten schreiben. Man könnte zum Beispiel richtige Statistik betreiben,
#(use-modules (lily display-lily))
output =
#(define-scheme-function (music-list dur)(list? ly:duration?)
;; Return a formated markup expressing how many multiples of DURATION each
;; element of MUSIC-LIST contains. These element are counted: 1, 2, 3, ...
(let* ((amounts (certain-durations-amount music-list dur)))
#{
\markup
\override #'(baseline-skip . 3)
\column
#(map
(lambda (i p)
(format #f "Musik #~a dauert wie ~a Noten der Länge \"~a\""
i
(if (integer? p)
p
(format #f "~a (gerundet)"
(exact->inexact (/ (round (* p 100)) 100))))
(duration->lily-string dur)))
(iota (length amounts) 1) amounts)
#}))
Gerundet aber drin gelassen 
Zitat von: harm6 am Sonntag, 10. Mai 2026, 13:45Zitat von: ManuelaManchmal gibt es Fälle, wo das gerundete Ergebnis (zufällig) exakt ist, [...]Ja, das kann natürlich vorkommen. Ich würde das "(gerundet)" trotzdem drin lassen, schon um den user zu informieren, dass da eigentlich noch was ist.
Zitat von: ingmar am Sonntag, 10. Mai 2026, 17:44Weil, ich denke schon länger darüber nach, dass LilyPond wie wohl kein anderes "Notenschreibprogramm" viel mehr kann als Noten schreiben. Man könnte zum Beispiel richtige Statistik betreiben, Beispiel: Welche Dauern kommen wie oft vor, oder welche Tonhöhen.
Zitat von: ManuelaManchmal gibt es Fälle, wo das gerundete Ergebnis (zufällig) exakt ist, [...]Ja, das kann natürlich vorkommen. Ich würde das "(gerundet)" trotzdem drin lassen, schon um den user zu informieren, dass da eigentlich noch was ist.

: Manchmal gibt es Fälle, wo das gerundete Ergebnis (zufällig) exakt ist, wie z.B. Musik #2 bei Länge 1output =
#(define-scheme-function (music-list dur)(list? ly:duration?)
;; Return a formated markup expressing how many multiples of DURATION each
;; element of MUSIC-LIST contains. These element are counted: 1, 2, 3, ...
(let* ((amounts (certain-durations-amount music-list dur))
(dur-log (ly:duration-log dur))
(dot-count (ly:duration-dot-count dur))
(dots (list->string (make-list dot-count #\.)))
(dur-string
(if (negative? dur-log)
(case dur-log
((-1) (format #f "breve ~a" dots))
((-2) (format #f "longa ~a" dots))
((-3) (format #f "maxima ~a" dots))
(else (begin
;; Bad durations should error earlier, better be
;; paranoid, though.
(ly:warning "Unknown duration ~a" dur)
"?")))
(ly:duration->string dur))))
#{
\markup
\override #'(baseline-skip . 3)
\column
#(map
(lambda (i p)
(format #f "Musik #~a dauert wie ~a Noten der Länge \"~a\""
i
(if
(integer? p)
p
(if (= (/ (round (* p 100)) 100) p)
(format #f "~a"
(exact->inexact (/ (round (* p 100)) 100)))
(format #f "~a (gerundet)"
(exact->inexact (/ (round (* p 100)) 100)))
))
dur-string))
(iota (length amounts) 1) amounts)
#}))Zitat von: Manuela am Sonntag, 10. Mai 2026, 07:48Das ist jetzt Erbsenklauberei von mir. Wenn ich folgendes eingebe\markup \output #all-music ##{ 1*2 #}dann kommt als Ergebnis Musik #1 dauert wie 6 Noten der Länge 1/2 etc statt Länge 2 Ganze oder 8 Viertel

#(define all-music
;; Collect and list relevant music
(list musicA musicB musicC musicD))
#(define (all-unfolded-music music-list)
;; Unfold all music in MUSIC-LIST
(map unfoldRepeats music-list))
#(define (all-music-lengths-list music-list)
;; Return a list of all lengths of the elements of MUSIC-LIST
;; as a list of moments.
(map ly:music-length (all-unfolded-music music-list)))
#(define (certain-durations-amount music-list duration)
;; Return a list with the amount of multiples of DURATION for each element
;; of MUSIC-LIST
(map
(lambda (l)
(if (string<? "2.24.4" (lilypond-version))
(ly:moment-main (/ l (ly:duration->number duration)))
(ly:moment-main (ly:moment-div l (ly:duration-length duration)))))
(all-music-lengths-list music-list)))
output =
#(define-scheme-function (music-list dur)(list? ly:duration?)
;; Return a formated markup expressing how many multiples of DURATION each
;; element of MUSIC-LIST contains. These element are counted: 1, 2, 3, ...
(let* ((amounts (certain-durations-amount music-list dur))
(dur-log (ly:duration-log dur))
(dot-count (ly:duration-dot-count dur))
(dots (list->string (make-list dot-count #\.)))
(dur-string
(if (negative? dur-log)
(case dur-log
((-1) (format #f "breve ~a" dots))
((-2) (format #f "longa ~a" dots))
((-3) (format #f "maxima ~a" dots))
(else (begin
;; Bad durations should error earlier, better be
;; paranoid, though.
(ly:warning "Unknown duration ~a" dur)
"?")))
(ly:duration->string dur))))
#{
\markup
\override #'(baseline-skip . 3)
\column
#(map
(lambda (i p)
(format #f "Musik #~a dauert wie ~a Noten der Länge \"~a\""
i
(if (integer? p)
p
(format #f "~a (gerundet)"
(exact->inexact (/ (round (* p 100)) 100))))
dur-string))
(iota (length amounts) 1) amounts)
#}))
\markup
\override #'(baseline-skip . 15)
\column {
\output #all-music ##{ 4 #}
\output #all-music ##{ 4. #}
\output #all-music ##{ 4*3/2 #}
\output #all-music ##{ 4.. #}
\output #all-music ##{ 4.*3/2 #}
\output #all-music ##{ 1 #}
\output #all-music ##{ \breve . #}
\output #all-music ##{ \longa #}
}