Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: bkleine am Mittwoch, 19. Oktober 2016, 15:19

Titel: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: bkleine am Mittwoch, 19. Oktober 2016, 15:19
Der Anhang zeigt die "normale" Version des Bindebogens. Nun möchte ich aber, dass der Bogen direkt auf der Höhe des vorigen Bogens weitergeht, als an dem Achtelbalken startet und nicht  am "g" selbst.

Danke für alle Hilfe.
Bernhard
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: Manuela am Mittwoch, 19. Oktober 2016, 16:57
Ich bin auch nicht immer glücklich mit den Bögen, die Lilypond erzeugt.
Leider ist hier viel Handarbeit angesagt, ich empfehle erst mal, diese Codes zu studieren:

Moving slur positions vertically (http://lsr.di.unimi.it/LSR/Item?id=684)
Modifying a slur by offsetting the positions property (http://lsr.di.unimi.it/LSR/Item?id=748)
Altering the shape of a default slur with a list of offsets [revised] (http://lsr.di.unimi.it/LSR/Item?id=777)
Altering the shape of a default slur with a list of offsets (http://lsr.di.unimi.it/LSR/Item?id=639)
Manipulating slurs via 'positions and 'extra-offset (http://lsr.di.unimi.it/LSR/Item?id=1039)


LSR zum Thema Bindebogen durchsuchen (http://lsr.di.unimi.it/LSR/Search?q=slur&s=0&m=10)
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: bkleine am Mittwoch, 19. Oktober 2016, 18:53
Danke!

die Zeile Modifying a slur by offsetting the positions property deutet wohl auf die notwendige Änderung, aber:

Der Server unter lsr.dsi.unimi.it konnte nicht gefunden werden.

da muss ich wohl etwas warten.

Herzlichen Dank!
Bernhard
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: harm6 am Mittwoch, 19. Oktober 2016, 19:28
Zitat
Der Server unter lsr.dsi.unimi.it konnte nicht gefunden werden.

??

Das LSR hatte tatsächlich früher eine andere Adresse
lsr.dsi.unimi.it
aber Manuela hat den korrekten link gepostet:
http://lsr.di.unimi.it/LSR/Item?id=748
Inssoweit hab ich keine Ahnung was bei Dir schief läuft.
Vielleicht irgendeine Autovervollständigung die noch den alten link glaubt verwenden zu müssen?


Gruß,
  Harm
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: bkleine am Donnerstag, 20. Oktober 2016, 03:18
Nachdem das Problem mit dem falschen Link geklärt ist, Fehler auf der Seite, bleibt noch das Problem, dass ich nicht weiß, wie man das
\offsetPositions #'(2 . 0) anwenden muss.
Mein Satz :

\version "2.19.33"
\language "deutsch"
global = {
  \key c \major
  \time 2/4
}
leftOne = \relative c' {
  \global
  % Die Noten folgen hier.
  \slurUp \stemUp g,8( [cis16  d] g4)| c,,8( [g' h g~]) ( | g [a16 h] c8)
}
pianoPart = \new PianoStaff \with {
  instrumentName = "Kl."
} <<
  \new Staff = "left" { \clef bass << \leftOne >> }
>>
\score {
  <<   
    \pianoPart
  >>
  \layout { }
}


Wohin und wie muss man das setzen, dass es den Bindebogen verändert?
Bernhard
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: harm6 am Donnerstag, 20. Oktober 2016, 11:35
Normalerweise muß jeder tweak oder override vor das Grob, welches angegangen werden soll. Das trifft auch hier zu, offsetPositions ist ein override in einer music-function und das Grob (der Slur) ist assoziiert mit der Note, an der der Slur beginnt.

Ich benutze häufig Farben um zu testen welche Objekte unter welchen Voraussetzungen angesprochen werden. Farben sind normalerweise* neutral und gut zu sehen. ;)

Z.B.:

clr = \once \override Slur.color = #red
leftOne = \relative c' {
  \slurUp \stemUp g,8( [cis16  d] g4)| c,,8( [g' h \clr g~])( | g [a16 h] c8)
}

Also:
\slurUp \stemUp g,8( [cis16  d] g4)| c,,8( [g' h \offsetPositions #'(3.5 . 1.5) g~])( | g [a16 h] c8)

Es kann sein, daß Veränderungen des positions-property nicht hinreichen, um das gewünschte Ergenis zu bekommen.
Sollte das passieren verwende \shape

HTH,
  Harm

* Es gibt meines Wissens nach nur ein Grob das bei veränderter Farbe anderen output erzeugt, BarLines, aber dort so subtil, daß es wahrscheinlich niemandem auffällt (bzw auffallen sollte).
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: bkleine am Donnerstag, 20. Oktober 2016, 14:53
Ich  habe folgenden Fehler: in Version 2.19.33 und 2.19.49. Irgend eine Ahnung, was die Ursache ist. ( Der Fehler ist auch im Snippet, das ich hier veröffentlicht habe):

F:/Meine Noten/EigeneNoten/Gerok Die Kinder sitzen im Zimmer/VorWeihnachten.ly:114:44: Fehler: Ungültige Fluchtsequenz: »\offsetPositions«
  \stemUp g,8( [cis16  d] g4)| c,,8( [g' h
                                           \offsetPositions #'(3.5 . 1.5) g~])( | g [a16 h] c8)

F:/Meine Noten/EigeneNoten/Gerok Die Kinder sitzen im Zimmer/VorWeihnachten.ly:114:44: Fehler: Zeichenkette nicht erkannt, weder Textbeschriftung noch \lyricmode
  \stemUp g,8( [cis16  d] g4)| c,,8( [g' h
                                           \offsetPositions #'(3.5 . 1.5) g~])( | g [a16 h] c8)

F:/Meine Noten/EigeneNoten/Gerok Die Kinder sitzen im Zimmer/VorWeihnachten.ly:114:61: Warnung: Nicht-musikalischer Ausdruck wird ignoriert
  \stemUp g,8( [cis16  d] g4)| c,,8( [g' h \offsetPositions
                                                            #'(3.5 . 1.5) g~])( | g [a16 h] c8)
[/tt]
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: harm6 am Donnerstag, 20. Oktober 2016, 16:10
Du mußt den Code des Snippets (genauer: die Definition von offsetPositions), entweder ins file kopieren oder in einem gesonderten file speichern und dann ins eigene file inkludieren. Wie sonst soll LilyPond den Code sonst finden?

Gruß,
  Harm
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: bkleine am Donnerstag, 20. Oktober 2016, 16:30
???, das ist mir gar nicht verständlich, Entschuldigung.
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: harm6 am Donnerstag, 20. Oktober 2016, 18:54
So kommen wir nicht weiter.
Kannst Du mal Dein komplettes .ly-file anhängen?
Falls es sich um das Lied von Karl Gerok (1815 - 1890) handelt, so sollte es ja jetzt gemeinfrei sein.

Gruß,
  Harm
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: bkleine am Donnerstag, 20. Oktober 2016, 20:54
Ich bin noch nicht ganz bis zur Wiederholung, dann bringe ich es hier.

Herzlichen Dank für Deine Mühe.

Bernhard
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: Manuela am Donnerstag, 20. Oktober 2016, 22:19
Ich hab die Situation nachgebaut und ein paar Möglichkeiten zum Ändern der Bogenform eingebaut:

\version "2.19.42"

shapeSlur =
#(define-music-function (parser location offsets) (list?)
   #{
     \once \override Slur.control-points = #(alter-curve offsets)
   #})

#(define ((alter-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)))))

     (add-offsets coords offsets)))

\relative c'
{
  c4^( c c
  e8
  %\override Slur.positions = #'(0 . 7)
  %\offsetPositions #'(4 . 1)
  %\override Slur.extra-offset = #'(-1 . 1)
  \shapeSlur #'(0 3 0 3.5 0 2 0 1)
  e~ )^(
  e f16 g a4 )

}

Du kannst jetzt wahlweise die einzelnen Kommandos entkommentieren, die Werte ändern und schaun, was passiert.
Bei ShapeSlur brauchst du immer 8 Zahlen, diejenigen an den ungeraden Positionen bedeuten die Abweichungen in x-Richtung, die sollten in deinem Fall vermutlich 0 sein.
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: harm6 am Donnerstag, 20. Oktober 2016, 23:04
Zitat von: Manuela
shapeSlur =
#(define-music-function (parser location offsets) (list?)
...

\shape ist doch im source-code. Warum eine eigene Definition? Macht die was besonderes?

Gruß,
  Harm
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: Manuela am Donnerstag, 20. Oktober 2016, 23:25

\shape ist doch im source-code. Warum eine eigene Definition? Macht die was besonderes?


Ich habe das aus dem LSR übernommen. Wenn der Code ohnehin schon automatisch vorhanden ist, braucht man ihn natürlich nicht mehr extra einfügen.

Update: ich habe probehalber die Definition von \shapeSlur aus dem Code entfernt, das kompiliert nicht mehr.
#(define offsetPositions... kann man weglassen, das habe ich jetzt entfernt.
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: bkleine am Donnerstag, 20. Oktober 2016, 23:32
Ich hab das jetzt mal zur Hälfte fertig.
Da kommen Fragen auf:
1. Warum kann die Voltaklammer nicht beendet werden?
2. In der zweiten Klammer sitze die linke Hand auf einmal im G-Schlüssel und nicht im Bassschlüssel. Ich dachte die Schlüsselveränderung soll sich auf die Wiederholung auswirken, nicht aber auf die zweite Klammer.
3. In Takt 15 und 19 sind nochmal solche Stellen mit deänderten Melismata.
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: Manuela am Freitag, 21. Oktober 2016, 11:46
Ich habe mal versucht, mich durch den Code zu kämpfen. Jetzt weiß ich, warum immer so viel Wert auf Minimalbeispiele gelegt wird  ;)

Grundsätzlich: geschwungene Klammern sollten von Leerzeichen umgeben sein, ansonsten können unerklärliche Fehlermeldungen auftauchen. Das stimmt tatsächlich, sowas hatte ich selber schon.

Bei komplizierteren Konstrukten wird im Lernmanual empfohlen, die Dinge wie Staff etc. explizit anzugeben, sonst kommt man leicht durcheinander.

Ich habe mal versucht, das ganze in eine Form zu bringen:

\score
{
  \new StaffGroup
  <<
    \new Staff
    \new Voice="melody" \sopranoVoice
    \new Lyrics \lyricsto "melody" \verseOne
    \new PianoStaff="piano"
    <<
      \new Staff="up"
      <<
        \new Voice \rightOne
        \new Voice \rightTwo
      >>
      \new Staff="down"
      <<
        \new Voice \leftOne
        \new Voice \leftTwo
      >>
    >>
  >>
}

Ich bin noch lange nicht so gut wie Harm, daher könnten da auch noch Fehler drin sein, etwa zu viele Klammern.
Außerdem habe ich bei den Stimmen eingefügt:

rightOne = \relative c'' {
  \global
  \voiceOne ...

und \voiceTwo bei den 2. Stimmen, sonst meckert Lily  ;)

Noch ein Tipp: das Konstrukt

  \repeat volta 2 { ... }
 \alternative {
    { ... }
    { ... }
  }

brauchst du in einer StaffGroup nur einmal anzugeben, alle anderen Noten werden einfach fortlaufend notiert, so wie sie erscheinen. In jeder Stimme \repeat ... anzugeben, vergrößert die Fehlerwahrscheinlichkeit.

PS: die Sache mit dem Notenschlüssel habe ich jetzt nicht angesehen, dazu fehlt mir jetzt leider die Zeit.
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: harm6 am Freitag, 21. Oktober 2016, 11:51
Hallo Bernhard,

vielen Dank für Deinen Code.

Zu Deinen Fragen

1.
Zitat
Warum kann die Voltaklammer nicht beendet werden?

Die Länge der Musik in den Klammern der einzelnen Stimmen ist nicht identisch.

Beispiel:
one = \repeat volta 2 { R1 } \alternative { { R1 } { R1 } }
two = \repeat volta 2 { s1 } \alternative { { s1 } { s2 } }
<< \one \\ \two >>
führt im Terminal zu:
warning: cannot end volta spanner

In diesem Beispiel ist das offensichtlich. Dein Code ist natürlich komplexer, da ist es nicht so leicht zu sehen ...

2.
Zitat
In der zweiten Klammer sitze die linke Hand auf einmal im G-Schlüssel und nicht im Bassschlüssel. Ich dachte die Schlüsselveränderung soll sich auf die Wiederholung auswirken, nicht aber auf die zweite Klammer.
So würde jeder Musiker denken. Aber LilyPond ist ein Computerprogram und liest strikt von links nach rechts.
So sehr ich LilyPond auch liebe: Computer sind blöd...
Tatsächlich mußt Du am Ende der ersten Klammer den Violinschlüssel setzen und am Anfang der zweiten Klammer den Bassschlüssel.
Aber erinnere Dich, Computer sind blöd, in diesem Fall so blöd, daß er dann meint der user hätte einen Fehler gemacht und zwei verschiedene Schlüssel zur selben Zeit gesetzt und um dem armen, kleinen user nicht weiter seine vermeintlichen Fehler vor Augen zu führen wird einfach ein Schlüssel unter den Teppich gekehrt und noch nicht mal eine Meldung dazu abgesetzt ...

Um hier weiter zu kommen muß der zweite Schlüssel zu einer anderen Zeit gesetzt werden.
Dazu kann man \grace s1 verwenden, jetzt kommen aber zwei neue Probleme ins Spiel einerseite issue 34 (ich brauch die Nummer gar nicht mehr nachzuschlagen) andererseits wird der Schlüssel tatsächlich gedruckt und zwar an einer Stelle wo man ihn sowieso nicht haben will.
Zumindest für das zweite Problem gibts die Möglichkeit den Druck zu unterbinden:

\repeat volta 2 { c''1 \clef bass cis }
\alternative {
{ d \clef treble }
{ \grace s1 \once \omit Staff.Clef \clef bass dis }
}

Damit ist issue 34 aber noch nicht gelöst (in diesem minimal kommt es allerdings nicht vor).
Wie man damit umgehen kann steht in der NR, such nach grace synchronization, iirc
Aber in Deiner Partitur kann man tatsächlich einfacher vorgehen:
in leftOne
  \alternative {
    {s4. \clef treble \stemDown <c'' as>8}
    { \once \omit Staff.Clef \clef bass s4 \clef treble <c b'>8 s}
funktioniert, imho.

3.
Zitat
In Takt 15 und 19 sind nochmal solche Stellen mit deänderten Melismata.
Dann verwende eine der Antworten aus diesem thread
https://liarchiv.joonet.de/index.php?topic=2398.0 (https://liarchiv.joonet.de/index.php?topic=2398.0)

4.
Zum eigentlichen Thema des threads
Um offsetPositions verwenden zu können muß diese Definition ins file. D.h.Dein file sollte so beginnen:

\version "2.19.49"

\language "deutsch"

offsetPositions =
  #(define-music-function (parser location offsets) (pair?)
    #{
       \once \override Slur.positions = #(lambda (grob)
`(,(+ (car offsets) (cdar (ly:slur::calc-control-points grob))) .
   ,(+ (cdr offsets) (cdr (cadddr (ly:slur::calc-control-points grob))))))
    #})
   

\paper {
  #(set-paper-size "a4")
}

\header {
...
Mir ist nicht klar warum Manuela glaubt diese Definition streichen.

Gruß,
  Harm
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: Manuela am Freitag, 21. Oktober 2016, 11:56

Mir ist nicht klar warum Manuela glaubt diese Definition streichen.


Weil ich bei meinem Test die Zeile \offsetPositions... auskommentiert hatte und daher der Code auch ohne die Definition kompiliert hat.
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: harm6 am Freitag, 21. Oktober 2016, 11:57
Zitat von: Manuela
Update: ich habe probehalber die Definition von \shapeSlur aus dem Code entfernt, das kompiliert nicht mehr.
#(define offsetPositions... kann man weglassen, das habe ich jetzt entfernt.

shapeSlur gibts nicht mehr, aber \shape, ist jetzt wesentlich flexibler.
Lies es in der NR nach.
Man könnte sagen \shapeSlur ist ein Spezialfall von \shape

Warum Du glaubst offsetPositions weglassen zu können versteh' ich nicht. offsetPositions ist nicht im source-code

Gruß,
  Harm
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: bkleine am Freitag, 21. Oktober 2016, 14:07
Danke, dass Ihr Euch so bemüht. Das mit dem Volta hatte ich auch mittlerweile fast gelöst. Jedenfalls gibt es im Moment keine Fehler. Ich habe auch bald das ganze Stück gesetzt. Dann mache ich mich wieder an die Probleme mit dem Bogen und den leicht verschiedenen Versionen in der Wiederholung.

Ganz herzlichen Dank nochmal

LG Bernhard
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: Manuela am Freitag, 21. Oktober 2016, 14:45

Warum Du glaubst offsetPositions weglassen zu können versteh' ich nicht. offsetPositions ist nicht im source-code

Dummheit  :-[

Wie gesagt, ich hatte das betreffende Kommando auskommentiert und daraus geschlossen, dass die Definition nicht gebraucht wird.

\shape jedenfalls werde ich notieren  :)
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: Manuela am Freitag, 21. Oktober 2016, 14:48
Ich habe auch bald das ganze Stück gesetzt. Dann mache ich mich wieder an die Probleme mit dem Bogen und den leicht verschiedenen Versionen in der Wiederholung.

Stellst du es hier ein, wenn du es fertig hast?  :D
Der Komponist ist ja schon mehr als 70 Jahre tot, daher urheberrechtlich unbedenklich...
Außerdem können nur angemeldete User einen Anhang sehen bzw. runterladen.
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: bkleine am Freitag, 21. Oktober 2016, 14:50
Habe ich vor.
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: bkleine am Freitag, 21. Oktober 2016, 14:57

Ich habe mal versucht, das ganze in eine Form zu bringen:

\score
{
  \new StaffGroup
  <<
    \new Staff
    \new Voice="melody" \sopranoVoice
    \new Lyrics \lyricsto "melody" \verseOne
    \new PianoStaff="piano"
    <<
      \new Staff="up"
      <<
        \new Voice \rightOne
        \new Voice \rightTwo
      >>
      \new Staff="down"
      <<
        \new Voice \leftOne
        \new Voice \leftTwo
      >>
    >>
  >>
}

Das was ich habe ist alles automatisch mit Frescobaldi erzeugt. Da habe ich nichts geändert.  ???  :-\
Titel: Re: Bindebogen nicht am Notenkopf sondern am Notenhals beginnen
Beitrag von: Manuela am Freitag, 21. Oktober 2016, 15:18

Das was ich habe ist alles automatisch mit Frescobaldi erzeugt. Da habe ich nichts geändert.  ???  :-\

Dann wird es schon passen.  :)

Ich verwende auch Frescobaldi, allerdings lasse ich keine Vorlagen automatisch erzeugen.