Das archivierte Lilypond-Forum von 2017 ist hier als Lese-Archiv wieder verfügbar!

Hauptmenü

Balkenachtel erzwingen?

Begonnen von ingmar, Mittwoch, 31. Dezember 2025, 11:21

Vorheriges Thema - Nächstes Thema

ingmar

Hallo Freunde,

ich habe hier ein Stück, das eigentlich nur aus langen Noten und Achtelketten besteht. Sowohl die langen Noten als auch die Achtelketten laufen ganz unabhängig vom zugrundeliegenden Takt. Was ich mir wünsche, ist, dass alle aufeinanderfolgenden Achtel an einem einzigen Balken hängen, der nur unterbrochen wird, wenn eine Pause oder eine lange Note (>1/8) folgt.

Ich weiß, dass das grundsätzlich per [ ] geht, möchte mir aber vor den Achtelketten die Arbeit sparen. Meine Variablen enthalten immer eine Voice, also nix mehrstimmiges.

Es sollte auch möglich sein, Zeilenwechsel zu erzwingen, und dort sollten die Balken nicht enden und neu anfangen, sondern andeuten, dass auch in der nächsten Zeile weitergeht.

Heute:
\version "2.20.0"

music = \relative {
    c'8 d e f g r
    d2
    f8 g a b
    r4 a8 b c d e f
    r2 g,1 c8 d e f
    r4
}
   
\score { \music }


Ich stell mir also ungefähr sowas vor:

\score { \achtel-an-die-leine-bitte \music }

Gruß, herzlichen Dank – und heute Abend einen guten Rutsch! ; - )
--ingmar

Lilysetter

#1
Die Syntax hängt stark von der verwendeten Lilypond-Version ab, daher im passenden Notation-Handbuch nachschauen.
Stichworte sind automatic beaming, beatStructure, baseMoment etc.
Und mal überlegen, auf eine neuere Version umzusteigen, der Funktionsumfang steigt ständig.
Es muss ja nicht immer die allerneueste sein, aber etwa jedes Jahr kann man schon überlegen.
Für alte Files halte ich die alten Versionen auf dem System und starte die richtige mit einem batch-file.
\version"2.25.6"
music = \relative {
  \override Beam.breakable = ##t
  \overrideTimeSignatureSettings
    4/4 % timeSignatureFraction
    1/1 % baseMomentFraction
    3,1 % beatStructure
    #'()% beamExceptions
  \time4/4 %erst damit werden die oberen Settings aktiv
  c'8 d e f g r
  d2
  f8 g a b
  r4 a8 b c d e f
  r2 g,1 c8 d e f
  r4f8f f f f f f f f r f f f f f f f f f f \break
  f f f f f f f f f r f f f f f f f f f f f f f f f }
\score { \music }
Was mich wundert: die letzten Noten sind (wegen des unvollständigen Taktes) nicht mehr gebeamed.

Rudi Guggt

Hallo,

Lilysetter hat m.E. die gewünschte Lösung gezeigt, wobei ich mir nicht sicher bin, wie das Ergebnis genau aussehen soll.

Eventuell könnte man noch über \cadenzaOn nachdenken, wenn die Taktunabhängigkeit gewünscht ist.

Aber vor allem: aktuelle Version besorgen!

Gruß
Rudi

harm6

Hallo ingmar :),

ich wünsche allen einen gutes neues Jahr!

Zum Thema:
Dein Code-Beispiel zeigt leider nicht
- ob die Beams über das Taktende hinaus gezogen werden sollen (so habe ich es jetzt gemacht)
- wie mit einzelnen Achteln zu verfahren ist: Beam oder Flag? (ich habe beide Möglichkeiten implementiert)
- ob nur Achtel bebalkt werden sollen oder alles was kürzer als eine Viertel ist? (ich habe letzteres gewählt)
- ob manuelle Beams noch möglich sein sollen?

Hier der Code:
beamQuaver =
#(define-music-function (beam-all mus)((boolean? #f) ly:music?)
  "Beam all continuing quaver (or shorter) notes.
  CAVEAT: additional manual beaming disturbs.
"
 (let* ((quaver '())
        (single-quaver #f)
        (quater-dur (ly:make-duration 2)))
   ;; Add beam to continuing quaver (or shorter) notes
   (map-some-music
     (lambda (m)
       (and
         (ly:duration? (ly:music-property m 'duration))
         (or (music-is-of-type? m 'event-chord)
             (music-is-of-type? m 'note-event)
             (music-is-of-type? m 'rest-event))
         (let* ((m-dur (ly:music-property m 'duration))
                (rest? (music-is-of-type? m 'rest-event)))
           (cond
             ((and (not rest?) (null? quaver) (ly:duration<? m-dur quater-dur))
               (ly:music-set-property! m 'articulations
                 (cons #{ [ #} (ly:music-property m 'articulations)))
               (set! quaver (cons m quaver)))
             ((and (not rest?) (pair? quaver) (ly:duration<? m-dur quater-dur))
               (set! quaver (cons m quaver)))
             ((or rest? (and (pair? quaver) (not (ly:duration<? m-dur quater-dur))))
               (if (= (length quaver) 1)
                   (set! single-quaver (car quaver))
                   (set! single-quaver #f))
               (ly:music-set-property! (car quaver) 'articulations
                 (cons #{ ] #} (ly:music-property (car quaver) 'articulations)))
               (set! quaver '())))
            m)))
     mus)
   
   ;; Special case: Deal with single quaver, relies on `beam-all`
   (if (and single-quaver (not beam-all))
       (let ((arts (ly:music-property single-quaver 'articulations)))
         (ly:music-set-property! single-quaver 'articulations
           (remove
             (lambda (q) (music-is-of-type? q 'beam-event))
             arts))
         (set! single-quaver #f)))
   
   ;; Special case: Beam at end of music
   (if (pair? quaver)
       (begin
         (ly:music-set-property! (car quaver) 'articulations
           (cons #{ ] #} (ly:music-property (car quaver) 'articulations)))
         (set! quaver '())))
   ;; Return
   mus))

music = \relative {
  c'8 d e f g r
  d2
  f8 g a b
  r4 a8 b c d e f
  r2 g,1 c8 d e f
  r4
  e8 r8
}

\score {
  <<
    \beamQuaver ##t \music
    \beamQuaver \music
  >>
  \layout {
    \context {
      \Voice
      \override Beam.breakable = ##t
    }
  }
}

\score {
  \beamQuaver \repeat unfold 40 { b4 b8 16 8 8 8 }
  \layout {
    \context {
      \Voice
      \override Beam.breakable = ##t
    }
  }
}

Gruß,
  Harm

ingmar

Zitat von: harm6 am Donnerstag,  1. Januar 2026, 11:19Dein Code-Beispiel zeigt leider nicht
- ob die Beams über das Taktende hinaus gezogen werden sollen (so habe ich es jetzt gemacht)
- wie mit einzelnen Achteln zu verfahren ist: Beam oder Flag? (ich habe beide Möglichkeiten implementiert)
- ob nur Achtel bebalkt werden sollen oder alles was kürzer als eine Viertel ist? (ich habe letzteres gewählt)
- ob manuelle Beams noch möglich sein sollen?
Ja, sehr berechtigte Fragen - die ich einfach deshalb vergessen hatte, weil sie in meinem Fall nicht vorkommen.

Wenn ich diese Fragen lese, fang ich auch an, mich nachträglich zu ärgern, den Thread aufgemacht zu haben – denn sie verdeutlichen, dass es wahrscheinlich nur eine einzige Komposition auf der Welt gibt, wozu die Lösung hilfreich sein kann. Eigentlich hatte ich immer die Meinung vertreten, dass man sowas dann grundsätzlich besser auf Ebene des Editors lösen sollte!

Also zuerst mal herzlichen Dank an die, die geantwortet haben, mit Hinweis auf ein schlechtes Gewissen meinerseits. ; - ) Immerhin hoffe ich, aus den Antworten auch ein paar andere Sache zu lernen.. Ich werde die Vorschläge aber leider erst nach dem Wochenende auswerten können und werde mich dann nochmal melden.

Also, novchmal danke – und allen nun auch von mir ein großartiges Jahr 2026!

--ingmar