Autor Thema: Anfangsnote der 2. Stimme hängt von letzter Note der 1. Stimme ab - wieso? (GELÖ  (Gelesen 2642 mal)

Manuela

  • Member
Das c der 2. Stimme liegt eine Oktave höher.

\version "2.19.38"
\language "deutsch"
\relative c' {
  <<
    {
      c e g
    } \\ {
      c c c
    }
  >>
}

Ist dieses Verhalten beabsichtigt?
Kann ich das irgendwie verhindern? Es ist nämlich wirklich lästig, wenn sich während des Editierens die Oktavierung der 2. Stimme in Abhängigkeit von der letzten Note der 1. Stimme ändert.
« Letzte Änderung: Samstag, 21. Mai 2016, 20:02 von Manuela »

fugenkomponist

  • Member
Das ist beabsichtigt/bekannt. Wenn ich recht erinnere, wird auch in diesem Thread auf der englischen Mailingliste irgendwo gesagt, warum das so ist. Ich glaub, dass diese Lösung die einfachste/am besten nachvollziehbare ist.

Was ich beim Komponieren mache: Ich nutze octave checks/Oktavüberprüfungen. Dabei gibt man nach dem Ton (inkl. Oktavlage) ein = und dahinter die gewünschte Oktavlage ein. Damit wird diese Oktavlage erzwungen; falls in „normalem“ \relative-input eine andere Oktave herauskäme, gibts eine Warnung. Ich ignoriere diese Warnungen bzw. passe dann am Ende die Oktavlagen an, wenn alle Noten feststehen.

So könnte eine warnungsfreie Eingabe aussehen:
\version "2.19.38"
\language "deutsch"

\relative {
  <<
    {
      c'=' e g
    } \\ {
      c,=' c c
    }
  >>
}
Die gleiche Ausgabe ergibt sich, wenn man sich auf die Oktavüberprüfungen verlässt, es gibt aber zwei Warnungen:
\version "2.19.38"
\language "deutsch"

\relative {
  <<
    {
      c=' e g
    } \\ {
      c=' c c
    }
  >>
}

Edit: Man kann LilyPond anweisen, eine Warnung zu erwarten und zu ignorieren. Allerdings nur einzelne Vorkommen; mit einer Schleife kann ich aber folgendermaßen für die nächsten 1000 Vorkommen dieser Warnung vorsorgen:
\version "2.19.38"
\language "deutsch"

#(let loop ((c 1000))
   (if (> c 0)
       (begin
        (ly:expect-warning "octave check failed")
        (loop (1- c)))))

\relative {
  <<
    {
      c=' e g
    } \\ {
      c=' c=, c=''
    }
  >>
}
Dann gibts am Ende eine Warnung, dass die Warnung nur 4 Mal aufgetaucht wäre und nicht 1000 Mal bzw. dass 996 Mal fehlen, aber eben nicht über die komplette Ausgabe verstreut und ohne den genauen Code auszugeben, wo die Warnung auftritt ;)
« Letzte Änderung: Samstag, 21. Mai 2016, 18:56 von fugenkomponist »

Manuela

  • Member
ok danke!  :)

Franz

  • Member
Wie wäre es damit?

\version "2.18.01"
% \language "deutsch"
 {
  <<
    {
      \relative c'{
      c e g
      }
    }
    \\
    { \relative c'{
      c c c
      }
    }
  >>
}


LG
Franz

fugenkomponist

  • Member
Kann man natürlich auch machen, ist halt je nach Stück mehr Tipparbeit ;) Aber man spart sich eben die (evtl. unterdrückten) Warnungen.

Zwei kleine Anmerkungen: Es gibt keine LilyPond-Version 2.18.01, die Versionsangabe ist also mäßig sinnvoll. Und in deinem Code sind einige überflüssige geschweifte Klammern, die das meiner Meinung nach unübersichtlich machen (und tatsächlich keinen Mehrwert bringen, was Code oder Ausgabe angeht); hier bräuchte man nur zwei Klammerpaare insgesamt statt fünf.
« Letzte Änderung: Samstag, 21. Mai 2016, 21:29 von fugenkomponist »

Franz

  • Member
Du hast natürlich recht. Hier die saubere Version:

\version "2.18.2"
% \language "deutsch"

<<
  \relative c'{
    c e g
  }
  \\\relative c'{
    c c c
  }
>>
 
 

Manuela

  • Member
Auf diese einfache Lösung bin ich nicht gekommen bzw. habe ich es unbewusst in früheren Scores eh angewendet. Erst als ich den Code "vereinfacht" habe, ist dieses Problem aufgetreten.

Nochmals danke!  :)