Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: fugenkomponist am Montag, 17. März 2014, 12:50
-
Hallo,
eins der „Lieder“ unseres Orchesters ist folgendes: Vier (oder mehr) Stimmen setzen nacheinander ein, zum Schluss ergibt sich ein Akkord. Um das aufzuschreiben habe ich vier Stimmen verwendet, und einen Liedtext, der mehrmals die associatedVoice setzt ;) Nun habe ich ein Problem: warum kollidieren am Schluss die Ties mit den anderen Noten? Und wie kann ich LilyPond das abgewöhnen?
\version "2.18.0"
\language "deutsch"
melodie = \relative c' {
\cadenzaOn
<<
\context Voice = "eins" {
s2.*3
\stemUp
b'8[ b] b2~
b1\longfermata
}
\context Voice = "zwei" {
s2.*2
g8[ g] g2*5/2~\fermata
g1
}
\context Voice = "drei" {
s2.
e8[ e] e2*4~\fermata
e1
}
\context Voice = "vier" {
c8[ c] c2*11/2~\fermata
c1
}
>>
\bar "|."
}
text = \lyricmode {
Chee -- ri --
\set associatedVoice = #"drei"
o! Chee -- ri --
\set associatedVoice = #"zwei"
o! Chee -- ri --
\set associatedVoice = #"eins"
o! Chee -- ri --
o! __
}
\score {
<<
\new Staff \with {
\remove Time_signature_engraver
} {
\melodie
}
\new Lyrics \lyricsto "vier" {
\text
}
>>
}P.S.: Für die, die sich über den Text wundern: Ja, irgendwie ist nicht so ganz klar, was zuerst da war, „živio“ oder „cheerio“ ;) Und keiner von uns weiß auch so genau, was für eine Sprache „živio“ ist, kroatisch/serbisch/bosnisch/…? Einige Ehemalige kennen es aus Tschechien, aber es ist wohl kein Tschechisch …
-
Hi fugenkomponist,
offenbar setzt Lily die einzelnen Bögen so, als wären die anderen Stimmen nicht vorhanden. Wenn es sich nur um die eine Stelle handelt, würde ich daher die problematischen Bögen etwas kürzen und etwas nach links verschieben. In den Code habe ich geschrieben welcher \override was macht.
Sollte sich jetzt jemand beschweren, ich würde mit Kanonen auf arme Spatzen (Bögen) schießen, dann hat er vollkommen recht. :)
\version "2.18.0"
\language "deutsch"
melodie = \relative c' {
\cadenzaOn
<<
\context Voice = "eins" {
s2.*3
\stemUp
b'8[ b] b2~
b1 \longfermata
}
\\
\context Voice = "zwei" {
s2.*2
g8[ g]
\once \override Tie.stencil = #(lambda (grob)
(ly:stencil-translate (ly:tie::print grob) '(-.1 . .5))) %verschiebt Bogen (links/rechts . oben/unten)
\once \override Tie.details = #'((note-head-gap . 1)) %verkürzt Bogen
g2*5/2~\fermata
g1
}
\context Voice = "drei" {
s2.
e8[ e]
\once \override Tie.stencil = #(lambda (grob)
(ly:stencil-translate (ly:tie::print grob) '(-.1 . .2)))
\once \override Tie.details = #'((note-head-gap . 1))
e2*4~\fermata
e1
}
\context Voice = "vier" {
c8[ c]
\once \override Tie.stencil = #(lambda (grob)
(ly:stencil-translate (ly:tie::print grob) '(-.1 . .2)))
\once \override Tie.details = #'((note-head-gap . 1))
c2*11/2~\fermata
c1
}
>>
\bar "|."
}
text = \lyricmode {
Chee -- ri --
\set associatedVoice = #"drei"
o! Chee -- ri --
\set associatedVoice = #"zwei"
o! Chee -- ri --
\set associatedVoice = #"eins"
o! Chee -- ri --
o! __
}
Gruß
-
Vielen Dank schonmal für diese Lösung :) Aber ja, es ist mit Kanonen auf Spatzen geschossen, außerdem bringt diese manuelle Problembeseitigung neue Probleme: Ich habe probiert, die Anfangspunkte der Bögen möglichst wie LilyPond-Original zu setzen, durch das Verkürzen scheint aber der Bogen flacher zu werden, so dass er sehr nah an den Notenlinien liegt (sowas verhindert LilyPond doch normalerweise bei „unbehandelten“ Bögen, oder?) … Und es wäre ja schon schön, wenn LilyPond das selbst könnte, ohne dass ich da groß mit verschiedenen Werten rumprobieren muss.
Mit anderen Worten: So klappts zur Not schonmal, aber hat jemand eine Idee, wie ich LilyPond klar machen kann, dass da Noten sind?
So, und während ich diesen letzten Satz geschrieben habe, ist mir eine Idee gekommen, die funktioniert: Um den Bogen der zweiten Stimme zu kürzen, habe ich den Schlusston g2 zu einem Akkord <g \hide e>2 umgebaut – das versteckte e ist gerade der Schlusston der dritten Stimme ;)
\version "2.18.0"
\language "deutsch"
melodie = \relative c' {
\cadenzaOn
<<
\context Voice = "eins" {
s2.*3
\stemUp
b'8[ b] b2~
b1\longfermata
}
\context Voice = "zwei" {
s2.*2
g8[ g] g2*5/2~\fermata
<g \hide e>1
}
\context Voice = "drei" {
s2.
e8[ e] e2*4~\fermata
<e \hide c>1
}
\context Voice = "vier" {
c8[ c] c2*11/2~\fermata
c1
}
>>
\bar "|."
}
text = \lyricmode {
Chee -- ri --
\set associatedVoice = #"drei"
o! Chee -- ri --
\set associatedVoice = #"zwei"
o! Chee -- ri --
\set associatedVoice = #"eins"
o! Chee -- ri --
o! __
}
\score {
<<
\new Staff \with {
\remove Time_signature_engraver
} {
\melodie
}
\new Lyrics \lyricsto "vier" {
\text
}
>>
}
-
Hallo zusammen,
schaut doch mal hier: NR 1.2.1 Writing rhythms: Ties > Selected Snippets Using ties with arpeggios (http://lilypond.org/doc/v2.18/Documentation/notation/writing-rhythms#ties)
Stichwort tieWaitForNote
Wär das was für euch?
Gruß, Robert
-
Mit tieWaitForNote hab ich es auch schon ausprobiert (und halt die Halben nicht skaliert), aber da ergibt sich das gleiche Problem. Oder macht tieWaitForNote auch Stimmen-übergreifende Ties möglich? Scheint nicht so:
melodie = \relative c' {
\set tieWaitForNote = ##t
\cadenzaOn
<<
\context Voice = "eins" {
s2.*3
\stemUp
b'8[ b] b2~
<b g e c>1\longfermata
}
\context Voice = "zwei" {
s2.*2
g8[ g] g2*5/2~\fermata
}
\context Voice = "drei" {
s2.
e8[ e] e2*4~\fermata
}
\context Voice = "vier" {
c8[ c] c2*11/2~\fermata
}
>>
\bar "|."
}Das liefert mir nur einen einzigen Bogen, die anderen drei tauchen nicht auf (merkwürdigerweise ohne die übliche Fehlermeldung „unbegrenzter Haltebogen“ …)
Ich glaub, ich verwende trotzdem lieber tieWaitForNote als die skalierten Halben:
melodie = \relative c' {
\set Staff.tieWaitForNote = ##t
\cadenzaOn
<<
\context Voice = "eins" {
s2.*3
\stemUp
b'8[ b] b2~
b1\longfermata
}
\context Voice = "zwei" {
s2.*2
g8[ g] g2~\fermata
s2.
<g \hide e>1
}
\context Voice = "drei" {
s2.
e8[ e] e2~\fermata
s2.*2
<e \hide c>1
}
\context Voice = "vier" {
c8[ c] c2~\fermata
s2.*3
c1
}
>>
\bar "|."
}