Autor Thema: Notenköpfe in Liturgie/Psalmen  (Gelesen 3841 mal)

gbehrendt

  • Gast
Notenköpfe in Liturgie/Psalmen
« am: Dienstag, 7. Juli 2015, 23:44 »
Hej.

Ich habe zwei Fragen im Feld von Psalm- und liturgischen Gesängen:

  • In der evangelischen Liturgie ist es üblich, Ligaturen durch dicht aneinander gerückte Notenköpfe und lange Töne durch zwei identische (und ebenso dicht zusammengerückte) Notenköpfe darzustellen (siehe png-Anhang). Ich bekomme das mit \once \override NoteHead #'extra-offset = #'( -x . 0 ) einigermaßen hin, auch Vorzeichen und (hier ohnehin ausgeblendete) Notenhälse und Fähnchen ließen sich so verschieben – aber keine Hilfslinien. Wie stelle ich für die einzelne konkrete Hilfslinie einen extra-offset ein?
    (Beim Suchen hier im Forum habe ich zwei Varianten gefunden, die es nicht ganz lösen: \tweak #'X-offset #'x [1] bringt den zweiten Notenkopf nicht nah genug heran; die Schreibung als Akkord mit identischen Tönen funktioniert zwar, aber eben nur für den gleichen Ton und dann auch gleich etwas zu dicht aneinander.)
  • Für Psalmgesänge aus dem katholischen Umfeld gilt die Konvention, dass wiederholbare Töne (auf denen also bei entsprechend langem Vers mehrere Silben gesungen werden können) zwei kleine senkrechte Striche zu beiden Seiten bekommen – zu sehen z.B. bei den Psalmtönen im Gotteslob [2].
    Eine ganze Note mit solchen Strichen sieht dann aus wie eine Brevis (und kann auch so gesetzt werden), für eine Viertelnote gibt es aber keinen passenden Notenkopf.
    Ich weiß, dass das hier schon mehrmals diskutiert wurde: Gibt es inzwischen eine elegante Lösung, wie ist der aktuelle Stand? Die Variante, eine Brevis zu kolorieren [3], ist eine gute Notlösung, aber nicht optimal, weil der Notenkopf von der Form her dann eben eine Ganze ist und keine Viertel, was eben doch anders aussieht.

Hat jemand zu dem einen oder dem anderen eine Idee?
Besten Dank
– Gereon

[1] aus diesem Thread: https://archiv.lilypondforum.de/index.php?topic=1199
[2] http://www.maria-laach.de/downloads/Psalmodie-Tafel_GL.pdf
[3] aus diesem Thread: https://archiv.lilypondforum.de/index.php?topic=1381

harm6

  • Gast
Re: Notenköpfe in Liturgie/Psalmen
« Antwort #1 am: Mittwoch, 8. Juli 2015, 01:40 »
Hallo,

ich verstehe noch nicht was gegen Akkorde in Verbindung mit X-offset spricht. Beispiele mit verschiedenen Werten für X-offset im Code unten.
Dazu eine Neukonstruktion eines Notenkopfes mit seitlichen senkrechten Strichen.
Sowie zahlreiche Anwendungsbeispiel.

Schau mal, ob was für Dich dabei ist.

\vrsion "2.19.22"

#(define (lined-nh grob)
  (let* ((default-stil (ly:note-head::print grob))
         (default-stil-x-lngth
           (interval-length (ly:stencil-extent default-stil X)))
         (line-thickness (ly:staff-symbol-line-thickness grob))
         (staff-space (ly:staff-symbol-staff-space grob))
         (font-size
           (assoc-get 'font-size
              (ly:prob-property (ly:grob-property grob 'cause) 'tweaks)))
         (corr
           (if (number? font-size)
               (magstep font-size)
               1))
         (lne
           (make-line-stencil
             (* 1.9 corr line-thickness)
             0
             (/ (* 1.25 corr staff-space) -2)
             0
             (/ (* 1.25 corr staff-space) 2))))
   (ly:stencil-add
     lne
     (ly:stencil-translate-axis
       default-stil (* 0.95 corr line-thickness) X)
     (ly:stencil-translate-axis
       lne (+ (* 1.9 corr line-thickness) default-stil-x-lngth) X))))
                     
{
\omit Stem
\omit Flag
\omit Staff.BarLine
\compressFullBarRests

<c' \tweak X-offset #-0.1 b>4
<c' \tweak X-offset #-0.2 b>4
<c' \tweak X-offset #-0.3 b>4

<c' \tweak stencil #lined-nh \tweak X-offset #-0.065 b>4
<\tweak stencil #lined-nh c'  \tweak X-offset #-0.065 b>4

\override NoteHead.stencil = #lined-nh
a'4       
\parenthesize \tweak font-size #-2 a'4
<c' \tweak X-offset #-0.1 b>4
\revert NoteHead.stencil
a'4
a'\breve


}

HTH,
  Harm

mgd

  • Gast
Re: Notenköpfe in Liturgie/Psalmen
« Antwort #2 am: Mittwoch, 8. Juli 2015, 10:55 »
Ich habe mal versucht das Gloria Patri zu setzen. Das hat auch weitestgehend gut funktioniert, allerdings sind ein paar Kleinigkeiten noch nicht so, wie ich mir das vorstelle.

Hier der Code:
\version "2.19.22"

#(set-default-paper-size "a5")

\include "gregorian.ly"

\paper {
  indent = 0
  ragged-last = ##f
}

chant = \relative c'' {
  <c \tweak X-offset #-0.5 c>4 a bes c c d c <c \tweak X-offset #-0.5 c> \divisioMinima
  c a <bes \tweak X-offset #-0.5 bes> g g <f \tweak X-offset #-0.5 f> \divisioMinima r32 \bar "" \break
  c'4 c f, bes <a \tweak X-offset #-0.5 g> <a \tweak X-offset #-0.5 a> \divisioMinima
  c c d d <c \tweak X-offset #-0.5 c> \divisioMinima
  c c bes a g r32 \bar "" \break a4 <bes \tweak X-offset #-0.5 a> g <a \tweak X-offset #-0.5 a> \divisioMinima
  c32( a f bes a g f g f) r32 <f \tweak X-offset #-0.5 f>4 \finalis
}

verba = \lyricmode {
  \set stanza = "G/Ch:"
  Ehr sei dem Va -- ter und dem Sohn
  und dem Hei -- li -- gen Geist,
  wie es war im An -- fang,
  jetzt und im -- mer -- dar
  und von E -- wig -- keit zu E -- wig -- keit.
  A -- men.
}

\score {
  \new Staff <<
    \new Voice = "melody" {
      \key f \major
      \omit Stem
      \omit Flag
      \omit Beam
      \omit Slur
      \omit Rest
      \omit Staff.BarLine
      \chant
    }
    \new Lyrics = "one" \lyricsto melody \verba
  >>
}

Offene Probleme:
  • Der \tweak Befehl um die Akkorde etwas zu entzerren hat keine Wirkung, und ich verstehe nicht, warum.
  • Beim letzten "Ewigkeit" in der 3. Zeile erscheint das "a" vor dem "b" - Lilypond scheint in Akkorden immer erst die untere Note zu setzen. Wie ändere ich hier die Reihenfolge ? (ich vermute ja, dies Problem erledigt sich, sobald das \tweak Wirkung zeigt...)

Liebe Grüße,
Michael
« Letzte Änderung: Mittwoch, 8. Juli 2015, 12:28 von mgd »

Pierre

  • Gast
Re: Notenköpfe in Liturgie/Psalmen
« Antwort #3 am: Mittwoch, 8. Juli 2015, 11:53 »
Hallo Gereon,

mit modernGregorian.ily :

\version "2.19.22"

\include "modernGregorian.ily"
#(set-default-paper-size "a5")

\paper {
  indent = 0
  ragged-last = ##t
}

\header {
  piece = \markup\override-lines #'(baseline-skip . 1) {
    \column {
      \line { "EHRE SEI DEM VATER" \italic "(Gloria Patri)" }
      \draw-hline
      \vspace #1
    }
  }
  opus = "(EGB 26,38)"
}

chant = \transpose c c' {
  \clef G
  \cadenzaOn
  \omit Stem
  \key f\major
  \melisma { a4 a } a bes c' c' d' c' \melisma { c' c' } \bar "'"
  c' a \melisma { \omit Accidental bes bes } g g \melisma { f f } \bar "'"
  \break
  c' c' f bes \melisma { a g } \melisma { a a } \bar "'"
  c' c' d' d' \melisma { c' c' } \bar "'"
  c' c' bes a g \bar ""
  \break
  a \melisma { \omit Accidental bes a } g \melisma { a a }  \bar "'"
  \space #2 \melisma { \omit Accidental c' a f bes a g f g f } \melisma { f f }
  \bar "||"
}

verba = \lyricmode {
  \set stanza = "G/Ch:"
  Ehr sei dem Va -- ter und dem Sohn
  und dem Hei -- li -- gen Geist,
  wie es war im An -- fang,
  jetzt und im -- mer -- dar
  und von E -- wig -- keit zu E -- wig -- keit.
  A -- men.
}


\score {
  <<
    \new Voice = "melody" { \chant }
    \new Lyrics \lyricsto "melody" { \verba }
  >>
  \layout {
    \context {
      \Score
      \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
    }
  }
}

Gruß,
~Pierre


gbehrendt

  • Gast
Re: Notenköpfe in Liturgie/Psalmen
« Antwort #4 am: Montag, 13. Juli 2015, 20:40 »
Herzlichen Dank euch allen!
Mit Harms Neudefinition des Viertel-Notenkopfes bekomme ich genau das Ergebnis, das ich mir gewünscht hatte – klasse! Die Schreibweise der Melismen als Akkorde, deren Abstand mit dem tweak-Befehl kontrolliert wird, funktioniert bei mir allerdings nur im Minimalbeispiel und nicht in meiner letztendlichen Datei. Daher würde ich vielleicht doch auf Pierres Vorschlag mit modernGregorian.ily zurückgreifen – zwei Fragen aber dazu.

Zum Einen: Kann man Einfluss auf den Abstand der Notenköpfe eines Melismas zu nehmen? In deinem Minimalbeispiel entstehen unterschiedlich große Lücken (z.B. Amen), ohne dass ich dafür eine Ursache im Quelltext erkenne.
Und andererseits zerlegt mir die Funktion \melisma { } meine relative-Notation – lässt sich das noch kompatibilisieren?

Besten Dank
– Gereon

harm6

  • Gast
Re: Notenköpfe in Liturgie/Psalmen
« Antwort #5 am: Dienstag, 14. Juli 2015, 00:51 »
Hallo,

hier mein Versuch "Gloria Patri" zu setzen.
Meine 'foo'-Funktion (kann man ja umbenennen) erstellt einen Akkord mit via X-offset verschobenen Notenköpfen.
Solange ich kein Beispiel habe warum das nicht funktionieren soll, komm' ich immer wieder darauf zurück. ;)
So kann man auch ein anderes Ergebnis für \foo { c d } und \foo { d c } bekommen.
Natürlich ergibt sich das Problem das man den Text angemessen ausrichten muß.
Um den Text zentriert unter einen solchen "ausgefranzten" Akkord, genauer die NoteColumn, zu bekommen, setze ich:
\override LyricText.X-align-on-main-noteheads = ##f
Allerdings ist das nicht immer gewollt. Um das parent für den Text auf die erste (getippte) Note zu bekommen setze ich dann:
\alignOnFirstNote
vor die entsprechnede Silbe.

Hier der komplette Code. PNG im Anhang.

\version "2.19.22"

#(set-default-paper-size "a5")

foo =
#(define-music-function (p l music)(ly:music?)
"Return an event-chord with offsetted NoteHeads"
  (let* ((ev-notes (event-chord-notes music)))
    (make-event-chord
      (map
        (lambda (ecn val) #{ \tweak X-offset $val $ecn #})
        ev-notes (iota (length ev-notes) 0 1.4)))))
       
setOtherParent =
#(define-music-function (parser location which-note-head)(integer?)
"
 Set parent of LyricText to @var{which-note-head} specified by a number.
 The NoteHeads are numbered 1 2 3 ... as typed.
 not 0 1 2 ...
"
  #{
    \once \override LyricText.before-line-breaking =
      #(lambda (grob)
         (let* ((note-column (ly:grob-parent grob X))
                (note-heads-list
                  (ly:grob-array->list
                    (ly:grob-object note-column 'note-heads)))
                (count-note-heads (length note-heads-list)))
         (if (> which-note-head count-note-heads)
           (ly:warning "Can't find specified note-head - ignoring")
           (set! (ly:grob-parent grob X)
                 (list-ref note-heads-list (- which-note-head 1))))))
  #})
 
alignOnFirstNote = \once \setOtherParent #1

%% c/p from gregorian.ly
divisioMinima = {
  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima

  % Workaround: add padding.  Correct fix would be spacing engine handle this.
  \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
  \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)

  \breathe
}
     
\paper {
  indent = 0
  ragged-last = ##t
}

\layout {
  \omit Stem
  \context {
    \Score
    defaultBarType = #""
    \omit TimeSignature
    \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
    \remove "Bar_number_engraver"
  }
  \context {
    \Lyrics
    \override LyricText.X-align-on-main-noteheads = ##f
    \override LyricText.font-size = #-1
  }
}

\header {
  piece = \markup\override-lines #'(baseline-skip . 1) {
    \column {
      \line { "EHRE SEI DEM VATER" \italic "(Gloria Patri)" }
      \draw-hline
      \vspace #1
    }
  }
  opus = "(EGB 26,38)"
}

chant = \relative c'' {
\key f\major
\foo { c c } a bes c c d c \foo { c c } \divisioMinima
c a \foo { bes bes } g g  \foo { f f } \divisioMinima
\bar ""
\break
c' c f, bes \foo { a g } \foo { a a } \divisioMinima
c c d d \foo { c c } \divisioMinima
c c bes a g \bar "" \break
a \foo { bes a } g \foo { a a } \divisioMinima
\foo { c a f bes a g f g f } \foo { f, f }
\bar "||"
}

verba = \lyricmode {
  \set stanza = "G/Ch:"
  Ehr sei dem Va -- ter und dem Sohn
  und dem Hei -- li -- gen Geist,
  wie es war im An -- fang,
  jetzt und im -- mer -- dar
  und von E -- wig -- keit zu \alignOnFirstNote E -- wig -- keit.
  \alignOnFirstNote
  A -- men.
}

\score {
  <<
    \new Voice = "melody" \chant
    \new Lyrics \lyricsto "melody" \verba
  >>
}

Sollte sowohl mit \relative, \absolute als auch mit \transpose funktionieren.
Man braucht allerdings eine neuere devel-Version.


HTH,
  Harm

Pierre

  • Gast
Re: Notenköpfe in Liturgie/Psalmen
« Antwort #6 am: Dienstag, 14. Juli 2015, 09:53 »
[...] hier mein Versuch "Gloria Patri" zu setzen. [...]
Echt Klasse Harm!

Gruß,
~Pierre

mgd

  • Gast
Re: Notenköpfe in Liturgie/Psalmen
« Antwort #7 am: Montag, 18. Januar 2016, 08:55 »
Liebe Lilyponder,

die Fassung von Harm, insbesondere die Funktion \offsetChord, die die Gruppierungen (Melissma etc.) erledigt ist seit der damaligen Antwort in meiner privaten Schnipselsammlung gut aufbewahrt.

Ich habe damit aktuell einen Introitus gesetzt, was auch prima klappt. Bis auf ein "kleines" Problem:
Ich möchte in dem Melissma einzelne Noten mit Artikulationen versehen, z.B. \offsetChord { e f g a f^- e^- } oder auch \offsetChord { e^- g^- f e }. Dabei sollen die letzten beiden bzw. die ersten beiden Noten zusätzlich mit Tenutostrichen versehen werden. Das klappt aber nicht so, wie ich mir das vorstelle. Die Artikulationen sammeln sich alle auf der letzten Note.

Wenn ich das Problem richtig verstehe, liegt es daran, dass die Figur als ein Akkord behandelt wird, der "nur" in der Darstellung in die Breite verschoben wird.

Gibt es eine (einfache) Lösung für das Problem, oder ist in dem Falle der Ansatz mit \offsetChord schlicht ungeeignet ?

LG,
Michael

harm6

  • Gast
Re: Notenköpfe in Liturgie/Psalmen
« Antwort #8 am: Dienstag, 19. Januar 2016, 00:41 »
Hallo Michael,

unten eine überarbeitete Fassung, die die Artikulationen automatisch richtig setzen soll.
Sie heißt bei mir nach wie vor foo ;)
Ist noch nicht über Deine zwei Beispiel hinaus getestet...
Allerdings mußte ich den 'X-offset leicht erhöhen, ansonsten werden die tenutos nach oben gedrückt, Platzmangel/Kollisionsvermeidung wegen.


\version "2.19.35"

#(set-default-paper-size "a5")

foo =
#(define-music-function (music)(ly:music?)
"Return an event-chord with offsetted NoteHeads. 
Articulations are printed with respect to their corresponding NoteHeads "
  (let* ((ev-notes (event-chord-notes music)))
    (make-event-chord
      (map
        (lambda (ecn which val)
          (let ((arts (ly:music-property ecn 'articulations)))
            ;; set 'articulations of 'NoteEvent
            (ly:music-set-property! ecn 'articulations
              (if (not (null? arts))
                  (map
                    (lambda (a)
                      ;; set a new parent for 'ArticulationEvent
                      (if (music-is-of-type? a 'articulation-event)
                          #{
                            \tweak after-line-breaking
                              #(lambda (grob)
                                 (let* ((note-head (ly:grob-parent grob X))
                                        (nc (ly:grob-parent note-head X))
                                        (nh
                                          (ly:grob-array->list
                                            (ly:grob-object nc 'note-heads))))
                                   (set!
                                     (ly:grob-parent grob X)
                                     (list-ref nh which))))
                            $a
                          #}
                          a))
                    arts)
                  '()))
              ;; apply 'X-offset-tweak to every NoteHead
              #{ \tweak X-offset $val $ecn #}))
        ev-notes
        (iota (length ev-notes))
        (iota (length ev-notes) 0 1.48)))))
       
setOtherParent =
#(define-music-function (parser location which-note-head)(integer?)
"
 Set parent of LyricText to @var{which-note-head} specified by a number.
 The NoteHeads are numbered 1 2 3 ... as typed.
 not 0 1 2 ...
"
  #{
    \once \override LyricText.before-line-breaking =
      #(lambda (grob)
         (let* ((note-column (ly:grob-parent grob X))
                (note-heads-list
                  (ly:grob-array->list
                    (ly:grob-object note-column 'note-heads)))
                (count-note-heads (length note-heads-list)))
         (if (> which-note-head count-note-heads)
           (ly:warning "Can't find specified note-head - ignoring")
           (set! (ly:grob-parent grob X)
                 (list-ref note-heads-list (- which-note-head 1))))))
  #})
 
alignOnFirstNote = \once \setOtherParent #1

%% c/p from gregorian.ly
divisioMinima = {
  \once \override BreathingSign.stencil = #ly:breathing-sign::divisio-minima

  % Workaround: add padding.  Correct fix would be spacing engine handle this.
  \once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
  \once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)

  \breathe
}
     
\paper {
  indent = 0
  ragged-last = ##t
}

\layout {
  \omit Stem
  \context {
    \Score
    defaultBarType = #""
    \omit TimeSignature
    \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
    \remove "Bar_number_engraver"
  }
  \context {
    \Lyrics
    \override LyricText.X-align-on-main-noteheads = ##f
    \override LyricText.font-size = #-1
  }
}

\relative e' {
  \foo { e f g a f^- e^- }
  \foo { e^- g^- f e }
}

%{

\header {
  piece = \markup\override-lines #'(baseline-skip . 1) {
    \column {
      \line { "EHRE SEI DEM VATER" \italic "(Gloria Patri)" }
      \draw-hline
      \vspace #1
    }
  }
  opus = "(EGB 26,38)"
}

chant = \relative c'' {
\key f\major
\foo { c c } a bes c c d c \foo { c c } \divisioMinima
c a \foo { bes bes } g g  \foo { f f } \divisioMinima
\bar ""
\break
c' c f, bes \foo { a g } \foo { a a } \divisioMinima
c c d d \foo { c c } \divisioMinima
c c bes a g \bar "" \break
a \foo { bes a } g \foo { a a } \divisioMinima
\foo { c a f bes a g f g f } \foo { f, f }
\bar "||"
}

verba = \lyricmode {
  \set stanza = "G/Ch:"
  Ehr sei dem Va -- ter und dem Sohn
  und dem Hei -- li -- gen Geist,
  wie es war im An -- fang,
  jetzt und im -- mer -- dar
  und von E -- wig -- keit zu \alignOnFirstNote E -- wig -- keit.
  \alignOnFirstNote
  A -- men.
}

\score {
  <<
    \new Voice = "melody" \chant
    \new Lyrics \lyricsto "melody" \verba
  >>
}
%}

Das "Gloria Patri" von oben ist auskommentiert, aber noch drin.


HTH,
  Harm

mgd

  • Gast
Re: Notenköpfe in Liturgie/Psalmen
« Antwort #9 am: Dienstag, 19. Januar 2016, 01:11 »
Herrlich !

Ich hatte ja ein wenig darauf spekuliert, dass du so etwas produzieren könntest ;)

Hatte schon komplett vergessen, dass die Funktion im Original "foo" geheißen hatte.
Habe die Funktion soeben im includierten File ersetzt und auf  den gesetzten Introitus angewendet. Funktioniert aus meiner Sicht perfekt.

Vielen Dank,
Michael