Autor Thema: Haltebögen bis Taktende  (Gelesen 2974 mal)

walt

  • Member
Haltebögen bis Taktende
« am: Samstag, 5. November 2011, 17:41 »
Musici!
Ich bastele an einigen Incipits, die in der Regel nur 2 Anfangstakte des ganzen Werkes wiedergeben. Nun möchte ich,
1. dass ein Bindebogen bis zum Taktende angegeben wird, obwohl keine mehr Note folgt. Mit \laissezVibrer entstehen nur kurze Bögen, die meist nicht bis zum Ende des Taktes reichen.
2. dass bei einem Melisma in der Gesangsstimme die Bindestriche (doppelte Minuszeichen) ebenfalls bis zum Taktende weiterlaufen. Ohne folgende Silbe unterdrückt Lilypond die Bindestriche.
Die obere Zeile das ganze Stück, unten zwei Takte Ausschnitt davon, wo aber der Haltebogen und die Bindestrichen fehlen.
Dank im Voraus,
walt


\version "2.14.2"

\header {
  tagline = ##f
}

\paper {
  indent = 0\mm
  ragged-right = ##f
}

\relative c'
{ c1 ~ c ~ c2 d }
\addlyrics { Do -- na }

\relative c'
{ c1 ~ c }
\addlyrics { Do }
« Letzte Änderung: Samstag, 5. November 2011, 17:48 von walt »

harm6

  • Member
Re: Haltebögen bis Taktende
« Antwort #1 am: Samstag, 5. November 2011, 21:16 »
Hallo walt,

das ist jetzt etwas komplizierter.

Ich habe:
  • die ganze Note aus Takt 2 um ein 128-tel gekürzt und eine 128-tel Note am Ende dieses Taktes eingefügt.
  • diese eingefügte Note dann per \hideNotes unsichtbar gemacht.
  • die Silbe "na" des Textes mittels \override Lyrics . LyricText #'transparent = ##t ebenfalls unsichtbar gemacht.
  • einen Pharsierungsbogen im zweiten Takt gesetzt
  • diesen Phrasierungsbogen dann verlängert.

Zur Verlängerung des Phrasierungsbogens:

Das geschieht laut Handbuch mittels [\once]\override PhrasingSlur #'control-points = #'((x1 . y1) (x2 . y2) (x3 . y3) (x4 . y4)) Wobei die x- bzw y-Werte durch ausprobieren zu ermitteln sind.

Mittlerweile gibt es aber eine angenehmere Methode:\shapePhrasingSlur
Man muß zwar immer noch alle x- und y-Werte setzen, allerdings werden diese Werte zu den von lilypond errechneten addiert. Das macht die Sache wesentlich einfacher und das ganze funktioniert auch beim Zeilenumbruch.
Wenn Du willst kannst Du den links folgen um mehr zu erfahren. Bzw hier hin schauen. Oder hier.
Das ganze klappt dann (leicht verändert) auch mit Slur und Tie. Die entsprechenden Definitionen habe ich mit dazu gepackt, auch wenn sie im vorliegenden Fall nicht gebraucht werden.

Und hier alles zusammen:

\version "2.14.2"

% http://old.nabble.com/file/p32185810/shapeSlur_rev1.ly

#(define ((alter-slur-curve offsets) grob)
   (let ((coords (ly:slur::calc-control-points grob)))
     (define (add-offsets coords offsets)
       (if (null? coords)
       '()
       (cons
         (cons (+ (caar coords) (car offsets))
               (+ (cdar coords) (cadr offsets)))
         (add-offsets (cdr coords) (cddr offsets)))))

     (if (null? offsets)
         coords
         (add-offsets coords offsets))))


#(define ((shape-slur offsets) grob)
   (let* ((orig (ly:grob-original grob))
          (siblings (if (ly:grob? orig)
                        (ly:spanner-broken-into orig) '() ))
          (total-found (length siblings)))
     (if (>= total-found 2)
         (let loop ((n 0))
                   (if (eq? (list-ref siblings n) grob)
                       ((alter-slur-curve (list-ref offsets n)) grob)
                       (if (< n total-found)
                           (loop (1+ n))
                           ((alter-slur-curve '()) grob))))
         ((alter-slur-curve offsets) grob))))

% Changed definition to shape ties

#(define ((alter-tie-curve offsets) grob)
   (let ((coords (ly:tie::calc-control-points grob)))
     (define (add-offsets coords offsets)
       (if (null? coords)
       '()
       (cons
         (cons (+ (caar coords) (car offsets))
               (+ (cdar coords) (cadr offsets)))
         (add-offsets (cdr coords) (cddr offsets)))))

     (if (null? offsets)
         coords
         (add-offsets coords offsets))))

#(define ((shape-tie offsets) grob)
   (let* ((orig (ly:grob-original grob))
          (siblings (if (ly:grob? orig)
                        (ly:spanner-broken-into orig) '() ))
          (total-found (length siblings)))
     (if (>= total-found 2)
         (let loop ((n 0))
                   (if (eq? (list-ref siblings n) grob)
                       ((alter-tie-curve (list-ref offsets n)) grob)
                       (if (< n total-found)
                           (loop (1+ n))
                           ((alter-tie-curve '()) grob))))
         ((alter-tie-curve offsets) grob))))
     
shapePhrasingSlur =
#(define-music-function (parser location offsets)(list?)
  #{
    \once \override PhrasingSlur #'control-points = #(shape-slur $offsets)
  #})


shapeSlur =
#(define-music-function (parser location offsets)(list?)
  #{
    \once \override Slur #'control-points = #(shape-slur $offsets)
  #})

shapeTie =
#(define-music-function (parser location offsets)(list?)
  #{
    \once \override Tie #'control-points = #(shape-tie $offsets)
  #})

\header {
  tagline = ##f
}

\paper {
  indent = 0\mm
  ragged-right = ##f
}

\relative c'
{ c1 ~ c ~ c2 d }
\addlyrics { Do -- na }

\relative c' {
        c1 ~ 
        \shapePhrasingSlur #'(0.1 0.5  0 1  0 1  4 0.5)
c1*127/128 \( \hideNotes c128 \)
}

\addlyrics { Do -- \override Lyrics . LyricText #'transparent = ##t na }

HTH,
  Harm
« Letzte Änderung: Samstag, 5. November 2011, 21:36 von harm6 »

walt

  • Member
Re: Haltebögen bis Taktende
« Antwort #2 am: Samstag, 5. November 2011, 22:53 »
Hallo Harm,
da bin ich ja beruhigt, dass es nicht eine einfache Lösung gab, die ich übersehen habe  ;)
Vielen herzlichen Dank für die schnelle und ausführliche Antwort, die ich jetzt für mein noch komplexeres Beispiel umsetze.
Das ist mir eine enorme Hilfe!
Gruß, walt

PS: Das mit den Bögen ist mir jetzt gelungen, nur die Bindestriche für den Liedtext erscheinen noch nicht. Kannst Du vielleicht Deinen Quelltext für das Notenbeispiel einblenden?

« Letzte Änderung: Sonntag, 6. November 2011, 07:37 von walt »

harm6

  • Member
Re: Haltebögen bis Taktende
« Antwort #3 am: Mittwoch, 9. November 2011, 20:30 »
Hallo walt,

Zitat
PS: Das mit den Bögen ist mir jetzt gelungen, nur die Bindestriche für den Liedtext erscheinen noch nicht. Kannst Du vielleicht Deinen Quelltext für das Notenbeispiel einblenden?

wenn ich den oben geposteten Code kompiliere, entsteht exakt das Bild, welches ich als PNG angefügt hatte. Ist das bei Dir nicht so? Oder meinst Du ganz was anderes?

Gruß,
  Harm

walt

  • Member
Re: Haltebögen bis Taktende
« Antwort #4 am: Donnerstag, 10. November 2011, 00:13 »
Hallo Harm,
mein Fehler: Ich hatte es nicht ganz runtergescrollt.
Du hast Dir ja viel Mühe gemacht!
Besten Dank, walt
« Letzte Änderung: Donnerstag, 10. November 2011, 08:10 von walt »