Umschalten von ein- zu mehrzeiligen Notensystemen

Begonnen von floh, Samstag, 15. Juli 2017, 13:21

« vorheriges - nächstes »

floh

Hallo,

Hier mal ein Minimalbeispiel zum Grübeln, ich bin nach einer Woche des Probierens draußen:


\version "2.18.2"
<<
\relative c' {
  \key c\major
<<
{
  \new Voice = "gesang-1"
  {
c4 d e f | c d e f | c d e f | c d e f | \break

<<
  \new Voice = "gesang-1a"
  {
    c4 d e f | c d e f | c d e f | c d e f | \break
  }
  \new Lyrics {
    \lyricsto "gesang-1a" {
a b c d a b c d a b c d a b c d
    }
  }
\new Staff{
  <<
    \new Voice  = "gesang-2" {
      \voiceOne
      \key d\major
      c4 d e f | c d e f | c d e f | c d e f |
      }
    \new Voice {
      \voiceTwo
      a h c d | a h c d | a h c d | a h c d |
    }
  >>
}
>>
  c4 d e f | c4 d e f | c4 d e f | c4 d e f |
  }

>>
}
>>


Das hat jetzt mehr als vier Zeilen, aber dafür zeigt es auch zwei Probleme, an denen ich derzeit nage. Es soll ein Lied gesetzt werden, dass mal zwei Systeme pro Zeile hat und dann wieder nur ein System pro Zeile (die zweite Stimme setzt dann aus). Gezeigt ist eine Umschaltung, darunter kommen aber noch weitere.

  • Ich muss im neuen System die Tonart angeben. Wenn ich dies aber tue, führt er mir die Linien in der vorigen Zeile fort, da er dort ja im Normafall die neuen Tonart angibt. Kann man die Tonart "global" angeben, so dass man auf die explizite Angabe im Stück verzichten kann?
  • Noch seltsamer: Wenn ich die letzte Silbe des Textes in der zweisatzigen Zeile eingebe, schiebt er mir in der nächsten Zeile die Noten um einen Takt. Keine Ahnung, warum das so ist...
Im Anhang habe ich ein Bild vorbereitet, auf dem die Probleme gezeigt sind (der Quellcode sollte genau die dargestellten Noten anzeigen.)

Ich bin gespannt, ob mir jemand helfen kann.

Viele Grüße,
Florian

Malte

#1
Hallo floh,

willkommen im Forum!
Zitat von: floh am Samstag, 15. Juli 2017, 13:21
Hier mal ein Minimalbeispiel zum Grübeln, ich bin nach einer Woche des Probierens draußen:
Minimal ist das Beispiel nicht, aber schon relativ klein, ja. Es gibt aber das Problem, daß du eine Sache zu viel rausgekürzt hast, nämlich \language "deutsch" ;) Die andere Sache, die das Beispiel so groß macht: Du schreibst diverse Dinge, die eigentlich überflüssig wären, z. B. viele Vorkommnisse von << >>, { }, \new Voice, \voiceOne, \voiceTwo. Und hat es einen Grund, daß deine erste Stimme erst ab Takt 5 nen Text bekommen soll? Oder gehört der Text eigentlich zur zweiten? (Falls letzteres, würde ich meinen folgenden Code noch anpassen, sag bescheid.)
Zitat
Das hat jetzt mehr als vier Zeilen, aber dafür zeigt es auch zwei Probleme, an denen ich derzeit nage. Es soll ein Lied gesetzt werden, dass mal zwei Systeme pro Zeile hat und dann wieder
nur ein System pro Zeile (die zweite Stimme setzt dann aus). Gezeigt ist eine Umschaltung, darunter kommen aber noch weitere.
LilyPond hat die Möglichkeit, leere (nur mit sichtbaren oder unsichtbaren Pausen gefüllte) Notensysteme automatisch zu verstecken. Der gängige Ansatz wäre hier also, beide Systeme von Anfang an laufen zu lassen und leere mit \RemoveEmptyStaves & Co.* zu verstecken.
Zitat
Ich muss im neuen System die Tonart angeben. Wenn ich dies aber tue, führt er mir die Linien in der vorigen Zeile fort, da er dort ja im Normafall die neuen Tonart angibt. Kann man die Tonart "global" angeben, so dass man auf die explizite Angabe im Stück verzichten kann?
Hast du diese Tonart wirklich nur in der einen Stimme und in der anderen nicht? Falls ja: Wenn auch das zweite System von Anfang an läuft, erledigt sich dieses Problem damit von selbst (ansonsten gibts auch Möglichkeiten, die brauchst du dann aber ja nicht mehr).
ZitatNoch seltsamer: Wenn ich die letzte Silbe des Textes in der zweisatzigen Zeile eingebe, schiebt er mir in der nächsten Zeile die Noten um einen Takt. Keine Ahnung, warum das so ist...
Das ist tatsächlich ein Fehler, der erstens in neueren LilyPond-Versionen nicht mehr auftritt und der zweitens durch meine oben beschriebene Lösung verschwindet ;)

So, und hier jetzt der versprochene Code. Bitte melde dich, falls
1. der Liedtext eigentlich zum unteren System gehören soll und/oder
2. du erfahren möchtest, wie die Tonart (und andere Dinge) einfach in allen Systemen auf einmal geändert werden kann.

\version "2.18.2"
\language "deutsch"

<<
  \new Staff \relative {
    \key c \major
    \repeat unfold 4 { c'4 d e f }
    \break
    \repeat unfold 4 { c d e f }
    \break
    \repeat unfold 4 { c' d e f }
  }
  \addlyrics {
    \repeat unfold 16 _
    \repeat unfold 4 { a b c d }
  }
  \new Staff \relative {
    \key d \major
    R1*4
    <<
      {
        \repeat unfold 4 { c'4 d e f }
      } \\ {
        \repeat unfold 4 { a h c d }
      }
    >>
    R1*4
  }
>>

\layout {
  \context {
    \Staff
    % Ab 2.19.xx können die beiden folgenden Zeilen
    % durch \RemoveAllEmptyStaves ersetzt werden.
    \RemoveEmptyStaves
    \override VerticalAxisGroup.remove-first = ##t
  }
}


Edit: Ach ja, fast hätt ich es vergessen: \voiceOne und \voiceTwo braucht man nur dann nicht mehr, wenn man die Abkürzung << \\ >> verwendet:

<<
  \new Voice {
    \voiceOne
    c
  }
  \new Voice {
    \voiceTwo
    e
  }
>>

läßt sich zu dem gleichbedeutenden

<<
  {
    c
  } \\ {
    e
  }
>>
vereinfachen.

2. Edit: Oben bei ,,\RemoveEmptyStaves & Co." hab ich ja noch ein Fußnotensternchen gesetzt. Eine genauere Erklärung:
\RemoveEmptyStaves entfernt alle leeren Systeme bis auf in der ersten Zeile (damit am Anfang einer Partitur gezeigt wird, was alles noch kommen wird). Falls man auch in der ersten Zeile leere Systeme verstecken will, braucht man dafür \override VerticalAxisGroup.remove-first = ##t. Seit LilyPond 2.19.xx gibt es für diese häufig verwendete Kombination der beiden Befehle die Abkürzung \RemoveAllEmptyStaves.

trulli

Zitat von: floh
(...), ich bin nach einer Woche des Probierens draußen:
Nur;)
Herzlich Willkommen hier!

floh

Ja Hallo

Erstmal vielen Dank für die prompte und umfangreiche Hilfe! Ich bin wirklich überwältigt!
Ich arbeite gerade an mehreren hundert Liedern, habe mich zu einer Kombination aus Lilypond und LaTeX entschieden und habe mir seit knapp einem Jahr bisher alles selbst beibringen können bzw. durch Probieren herausgefunden, das ist jetzt das erste Mal, dass ich Hilfe brauche... 8)

Ich hatte auch schon daran gedacht, die zweite Stimme von Anfang an durchlaufen zu lassen, bin dann aber daran gescheitert, dass ich sie in der ersten Zeile nicht ausschalten konnte. Insofern: perfekte Lösung, tausend Dank!

Also für eine Möglichkeit, wie man die Tonart global einstellt, wäre ich dankbar, bislang schreibe ich das nämlich in jede neue Stimme...

Ich bin jetzt erstmal zwei Wochen im Urlaub und komme nicht zum Ausprobieren, aber ich melde mich dann auf jeden Fall nochmal mit einer Rückmeldung!

Grüße,
Florian

Malte

Zitat von: floh am Samstag, 15. Juli 2017, 18:12
Also für eine Möglichkeit, wie man die Tonart global einstellt, wäre ich dankbar, bislang schreibe ich das nämlich in jede neue Stimme...
Ich habe mir angewöhnt, grundsätzlich alle Noten- und Textdefinitionen in Variablen zu packen und die erst unten in einer Datei (oder sogar in einer weiteren Datei) zu einer Partitur zusammenzubauen. Dabei habe ich immer eine Variable namens ,,global", die Takt-, Tonart-, Tempowechsel, Taktstriche u. ä. enthält. Diese lasse ich in jedem System per << >> mitlaufen.\version "2.19.63"
\language "deutsch"

global = {
  \key g \major
  \time 3/4
  s2.*4
  \bar "||"
  \tempo "Schneller"
  \time 2/2
  s1*3
  \key d \minor
  s1*3
  \bar "|."
}

eins = \relative {
  \repeat unfold 36 c'4
}

zwei = \relative {
  R1*9
}

drei = \relative {
  \repeat unfold 72 d'8
}

texteins = \lyricmode {
  \repeat unfold 18 { a o }
}

% Erst hier wird die eigentliche Partitur zusammengebaut:
\new ChoirStaff <<
  \new Staff <<
    \global
    \eins
  >>
  \addlyrics \texteins
  \new Staff <<
    \global
    \zwei
  >>
  \new Staff \transpose a c' <<
    \global
    \drei
  >>
>>

floh

Hallo

Also, ich habe die Anleitung eins zu eins so umgesetzt:

Alle Systeme beginnen gleichzeitig, leere Stellen werden erst gar nicht gezeigt.

Das hat 100% funktioniert! Vielen Dank nochmal für die Hilfe! Anbei das (fast - Griffe fehlen noch) fertige Lied...

Herzliche Grüße,
Florian