Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: gbehrendt am Dienstag, 7. Juli 2015, 23:44

Titel: Notenköpfe in Liturgie/Psalmen
Beitrag von: gbehrendt am Dienstag, 7. Juli 2015, 23:44
Hej.

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


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
Titel: Re: Notenköpfe in Liturgie/Psalmen
Beitrag von: harm6 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
Titel: Re: Notenköpfe in Liturgie/Psalmen
Beitrag von: mgd 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:

Liebe Grüße,
Michael
Titel: Re: Notenköpfe in Liturgie/Psalmen
Beitrag von: Pierre am Mittwoch, 8. Juli 2015, 11:53
Hallo Gereon,

mit modernGregorian.ily (http://lilypond.1069038.n5.nabble.com/attachment/172075/1/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

Titel: Re: Notenköpfe in Liturgie/Psalmen
Beitrag von: gbehrendt 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
Titel: Re: Notenköpfe in Liturgie/Psalmen
Beitrag von: harm6 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
Titel: Re: Notenköpfe in Liturgie/Psalmen
Beitrag von: Pierre am Dienstag, 14. Juli 2015, 09:53
[...] hier mein Versuch "Gloria Patri" zu setzen. [...]
Echt Klasse Harm!

Gruß,
~Pierre
Titel: Re: Notenköpfe in Liturgie/Psalmen
Beitrag von: mgd 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
Titel: Re: Notenköpfe in Liturgie/Psalmen
Beitrag von: harm6 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
Titel: Re: Notenköpfe in Liturgie/Psalmen
Beitrag von: mgd 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