Neueste Beiträge

#41
Fragen und Probleme aller Art / Antw:Länge eines Musikstücks?
Letzter Beitrag von harm6 - Montag, 11. Mai 2026, 00:33
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,

Manches davon würde mit einem engraver besser gehen als mit einer function, zumindest um sich Statistik anzeigen zu lassen.
Wir haben ja bereits event-listener.ly
https://lilypond.org/doc/v2.24/Documentation/notation-big-page#saving-music-events-to-a-file
Schon mal versucht?

Gruß,
  Harm
#42
Fragen und Probleme aller Art / Antw:Länge eines Musikstücks?
Letzter Beitrag von harm6 - Montag, 11. Mai 2026, 00:26
Ich habe `output` noch kürzen können:
#(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 ;)

Gruß,
  Harm
#43
Fragen und Probleme aller Art / Antw:Länge eines Musikstücks?
Letzter Beitrag von Manuela - Sonntag, 10. Mai 2026, 19:43
Zitat von: harm6 am Sonntag, 10. Mai 2026, 13:45
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.

Ist halt Geschmackssache. Ich finde den Zusatz "gerundet" eher verwirrend, wenn es tatsächlich der exakte Wert ist.
#44
Fragen und Probleme aller Art / Antw:Länge eines Musikstücks?
Letzter Beitrag von Manuela - Sonntag, 10. Mai 2026, 19:42
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.

So ein Programm habe ich mal geschrieben, das Klaviertasten entsprechend der relativen Häufigkeit der Noten einfärbt. Weil das aber überhaupt keinen Erkenntnisgewinn gebracht hat, bin ich wieder davon abgekommen. Ich weiß nicht, ob ich das Programm überhaupt noch auf meiner Festplatte finden würde.
#45
Fragen und Probleme aller Art / re: Länge eines Musikstücks?
Letzter Beitrag von ingmar - Sonntag, 10. Mai 2026, 18:21
ja, genau, sowas.

aber da muss man sich natürlich vorher überlegen, was man da forschen will. Zum Beispiel ist bei Singstimmen ein hoher Ton, der einmal vorkommt, sehr relevant (die Stimme muss es hergeben), bei einem Instrument könnte gerade genau dieser eine Ton wieder einfach zu produzieren sein (etwa als Flageolett, oder wegen vorhergehender Pause). Oder bei harmonischer/tonaler Analyse müsste in deinem Beispiel ein auftretendes sagenwirmal dis zwischen d und e in der Grafik klar auffallen.

Ich will für heute nur sagen: LilyPond erlaubt sowas, weil man an die interne Darstellung der Töne drankommt.. bei anderen Systemen geht das eben nicht.

--i
#46
Fragen und Probleme aller Art / Antw:Länge eines Musikstücks?
Letzter Beitrag von Malte - Sonntag, 10. Mai 2026, 18:01
Meinst du sowas? https://josquin.stanford.edu/work/?id=Jos0603
Du darfst diesen Dateianhang nicht ansehen.
#47
Fragen und Probleme aller Art / re: Länge eines Musikstücks?
Letzter Beitrag von ingmar - Sonntag, 10. Mai 2026, 17:44
Ah, interessant!

Weil, 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. Oder das Verhältnis von gespielten Tönen zu Pausen. Außer dem Umfang würde mich auch vielleicht der "Schwerpunkt" interessieren, also die Mitte des verwendeten Tonumfangs (unter Berücksichtigung der Dauern).*) Wenn man wie ich schon sehr viel Musik verschiedener Komponisten abgeschrieben hat, könnte vielleicht der Vergleich auf interessante Details stoßen...

Für diesen Thread hatte ich zunächst geschrieben, dass ich nur ein ganzzahliges Ergebnis brauche; ich hab das dann weggelassen, weil es einfach egal ist für meinen Hauptzweck, die Spiellänge zu bestimmen. Nu find ich es richtig toll, wie erbsenhaft ihr euch für das Thema interessiert.. : - )

Gruß, und danke!
--ingmar

*) (Halt! Das machen wir dann aber in einem neuen Thread, nicht wahr..?)
#48
Fragen und Probleme aller Art / Antw:Länge eines Musikstücks?
Letzter Beitrag von harm6 - Sonntag, 10. Mai 2026, 13:45
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.

Gruß,
  Harm
#49
Fragen und Probleme aller Art / Antw:Länge eines Musikstücks?
Letzter Beitrag von Manuela - Sonntag, 10. Mai 2026, 13:17
Harm, genial wie immer, danke.  :)

Um die Erbsenzählerei jetzt auf die Spitze zu treiben ;) : Manchmal gibt es Fälle, wo das gerundete Ergebnis (zufällig) exakt ist, wie z.B. Musik #2 bei Länge 1

Update: ich habe es mit meinen bescheidenen Kenntnissen geschafft, den Zusatz "gerundet" für diesen Fall zu entfernen

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
                    (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)
     #}))
#50
Fragen und Probleme aller Art / Antw:Länge eines Musikstücks?
Letzter Beitrag von harm6 - Sonntag, 10. Mai 2026, 11:56
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

Hallo Manuela,

schwächen im Code aufzuzeigen ist doch keine Erbsenklauberei, sondern notwendig um Verbesserungen überhaupt zu erreichen! Oder anders gesagt: ohne bug-report kein fix.
Also vielen Dank für den Hinweis. :)

Hier eine überarbeitete Fassung.
  • läuft mit 2.24. und neuer
  • falls Brüche auftauchen, so werden sie auf 2 Stellen nach dem Komma gerundet.
  • Punktierungen/Skalierungen werden berücksichtigt.
  • ausgegeben werden wieviele Noten der eingegebenen Dauer vorkämen, keine Umrechnung in Viertel (wenn man Viertel haben will, dann sollte man das auch so eingeben).

#(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 #}
  }

Gruß,
  Harm