Bindebogen und unsichtbare Noten gelöst

Begonnen von messingsound, Freitag, 30. März 2018, 11:37

« vorheriges - nächstes »

messingsound

Hallo Gemeinde,

bei beiliegendem Beispiel ist ab dem 2. Viertel des vorletzten Taktes ein ritardando .
Das wollte ich auch der ersten Stimme mitteilen.
Natürlich wird der Ton in der ersten Stimme ausgehalten.
Wie bekomme ich die Bindebögen in das Notenbild?
Vielen Dank im Voraus für die Hilfe. :)


\version "2.19.64"
{<<
\relative c'
{\time 2/4
d2\p\> | << d \\ {s4 s^\markup { \bold { Rit. } } } >> | d2\pp \fermata \bar "|." }
\\
\new Staff \relative c'
{\time 2/4
\tuplet 3/2 { r8\p\> d' d } \tuplet 3/2 { d8 d d } \tuplet 3/2 { d8 d d }
\tuplet 3/2 { d8^\markup { \bold { Rit. } } d d } | a2\pp \fermata \bar "|."  }
>> }

Malte

Hallo messingsound,

bitte poste immer ein Minimalbeispiel. In deinem Codebeispiel ist eigentlich die zweite Stimme überhaupt nicht nötig, Dynamik, Taktstriche, Fermaten etc. können auch weggelassen werden; dafür sind keine Bögen enthalten, ich mußte also raten, was du genau meinst.

Zitat von: messingsound am Freitag, 30. März 2018, 11:37
Natürlich wird der Ton in der ersten Stimme ausgehalten.
Wie bekomme ich die Bindebögen in das Notenbild?
,,Natürlich"? Mir ist nicht ganz klar, was du meinst, aber vielleicht meintest du Haltebögen zwischen den drei Noten der oberen Stimme?

Dein Code hat eine etwas seltsame Struktur:{
  <<
    \relative c' {
      [Musik]
    }
    \\
    \new Staff \relative c' {
      [Musik]
    }
  >>
}

Das Polyphonie-Konstrukt mit \\ legt zwei Stimmen (normalerweise in einem System) an, in der einen davon erstellst du dann ein neues System. Stattdessen sollte es eher so aussehen:<<
  \new Staff \relative c' {
    [Musik]
  }
  \new Staff \relative c' {
    [Musik]
  }
>>

Ich habe hier auch die äußeren {} entfernt, die sind nicht nötig.

Zurück zu deinem eigentlichen Problem. Für die Übersicht hier ein Minimalbeispiel:\relative {
  \time 2/4
  d'2~
  << d~ \\ { s4 s^"rit." } >>
  d2
}


Die Lösung sieht jetzt einfach so aus, daß du das \\ wegläßt, damit nicht zwei neue Stimmen angelegt werden. Ein Haltebogen kann nämlich nur innerhalb einer und derselben Stimme stehen:\relative {
  \time 2/4
  d'2~
  << d~ { s4 s^"rit." } >>
  d2
}

harm6

Hallo,

ich stimme Malte in fast jedem Punkt zu.

Nur hier nicht:
ZitatDein Code hat eine etwas seltsame Struktur

Denn ich bemerkte, daß das simple Einfügen von ~-Zeichen funktioniert.

\version "2.19.64"
{<<
\relative c'
{\time 2/4
d2\p\>~ | << d~ \\ {s4 s^\markup { \bold { Rit. } } } >> | d2\pp \fermata \bar "|." }
\\
\new Staff \relative c'
{\time 2/4
\tuplet 3/2 { r8\p\> d' d } \tuplet 3/2 { d8 d d } \tuplet 3/2 { d8 d d }
\tuplet 3/2 { d8^\markup { \bold { Rit. } } d d } | a2\pp \fermata \bar "|."  }
>> }


Hmm, wie kann das sein?
Also habe ich mir Deine Struktur etwas genauer angeschaut. Wenn ich den Inhalt der einzelnen Stimmen, der Einfachheit halber, durch einzelne Noten ersetze und die Contexte benenne so sieht LilyPond folgendes:

\new Staff = "staff1"
  <<
  \context Voice = "1"
    {
      \voiceOne
      c''1~
      <<
        \context Voice = "1"
          { c'' }
        \context Voice = "2"
          { \voiceTwo g' }
      >>
    }
  \context Voice = "2"
    {
      \new Staff = "staff2"
        \context Voice = "voice"
          { c' c' }
    }
  >>


Die Contexte kann man sich auch anzeigen lassen mit:

#(define ctxTst
  (lambda (ctx)
    (let* ((ctxs '()))
     (make-engraver
       (listeners
        ((AnnounceNewContext engraver event)
          (let ((context (ly:event-property event 'context)))
            (set! ctxs (cons context ctxs))
            ;(format #t "\nnew context found: ~a" context)
            )))
       ((finalize translator)
         (format #t "\ncontexts:\n~y" ctxs))))))


\layout {
  \context {
    \Score
    \consists #ctxTst
  }
}


->
Zitat von: terminal
contexts:
(#<Context Voice=voice () >
#<Context Staff=staff2 () >
#<Context Voice=2 () >
#<Context Voice=1 () >
#<Context Staff=staff1 () >)

Bei Deinem Originalcode kommt prinzipiell dasselbe raus:
Zitat von: terminal
contexts:
(#<Context Voice () >
#<Context Staff () >
#<Context Voice=2 () >
#<Context Voice=1 () >
#<Context Staff () >)

Insoweit wird auch klar warum in Deinem Code die Haltebögen mittels ~ direkt funktionieren: alle gehaltenen Noten befinden sich in
\context Voice = "1"

Diese Verschachtelung von Contexten ist jedoch kaum vernünftig pflegbar.
Auch bin ich absolut sicher, daß Deine Struktur früher oder später krachen geht.


Deshalb empfinde ich Malte's "seltsam" als Euphemismus... ;)

Ändere es so wie er vorschlug.

Gruß,
  Harm


messingsound

Vielen Dank für die schnelle und großzügige Hilfe. Und mea Culpa,  :-[ ich sehe alles ein, was ich falsch gemacht habe. Irgendwann werde ich das mit den Voices und Kontexten kapieren.

Schönes Osterwochenende

Gruß Thomas