Deutsches Lilypond Forum (Archiv)

Allgemein => Hilfe beim Einstieg in Lilypond => Thema gestartet von: ingmar am Freitag, 10. Juli 2015, 11:31

Titel: Stichnoten, die zweite..
Beitrag von: ingmar am Freitag, 10. Juli 2015, 11:31
Ich hatte das Thema schonmal [https://liarchiv.joonet.de/index.php?topic=1916.msg10916#msg10916 hier] diskutiert.

Der Umgang mit Stichnoten ist leider nicht ganz so einfach und straightforward, wie man sich das so wünscht. Beispiel:

\version "2.18.2"
\language "english"

ERSTENS = \relative  c'' {
\repeat volta 2 {
c d e f g f e d
}
c b c d e d e f2
   e4 d c c b c2
\bar "|."
}

ZWEITENS = \relative c' {
\repeat volta 2 {
c2 g b c
}
R1 *2
c2 b g c
}
\score {
\new StaffGroup { <<
\new Staff { \ERSTENS }
\new Staff { \ZWEITENS }
>> }
}

\addQuote "1." { \ERSTENS }
\addQuote "2." { \ZWEITENS }

% ____________________________

NEU = <<
\ZWEITENS
{
s1 *2
\new CueVoice { \set instrumentCueName = "(erste Stimme)" }
\cueDuring #"1." #UP { R1 *2 }
}
>>

\score {
\new Staff \with { instrumentName= "A." } { \NEU }

}

NEU = {
\quoteDuring #"2." { s1 *2 }
  \new CueVoice { \set instrumentCueName = "(erste Stimme)" }
\cueDuring #"1." #UP { R1 *2 }
\quoteDuring #"2." { s1 *2 }
}

\score {
\new Staff \with { instrumentName = "B." } { \NEU }
}


NEU = {
\quoteDuring #"2." { s1 *2 }
  \new CueVoice { \set instrumentCueName = "(erste Stimme)" }
\cueDuring #"1." #UP { R1 *1 }
\quoteDuring #"2." { s1 *3 }
}

\score {
\new Staff \with { instrumentName = "C." } { \NEU }
}

NEU = {
  \new CueVoice { \set instrumentCueName = "(erste Stimme)" }
\cueDuring #"1." #UP { R1 *4 }
\quoteDuring #"2." { s1 *2 }
}

\score {
\new Staff \with { instrumentName = "D." } { \NEU }
}
Wir haben also eine Partitur für zwei Instrumente. Nun möchte ich für das untere Instrument eine Einzelstimme machen, mit Stichnoten der ersten!

Bei A. habe ich versucht, einfach per << >> zu der Hauptstimme das Zitat der anderen Stimme dazu zu montieren. Das wäre sicher der praktischste Weg. Aber so geht es nicht, wir haben dann doppelte Pausen, die die Stichnoten sogar verdecken.

Bei B. baue ich meine Stimme zusammen, wie in meinem oben zitierten Beitrag beschrieben - wir nehmen immer ein Stückchen aus dieser und ein Stückchen aus jener. Ist nicht so elegant, weil man bei längeren Stücken am Schluss immer noch die verbleibenden Takte auszählen muss, um nicht Leertakte zu erzeugen oder zu früh zu enden. Ergebnis: Keine Stimme fühlt sich zuständig für das Wiederholungszeichen. Natürlich kann man es von Hand wieder einfügen (\bar ":|.").

Unschön und für den Spieler verwirrend mag die überhängende Note aus den Stichnoten in den gespielten Part hinein sein. Man könnte also daran denken, die Stichnoten ein wenig zu kürzen, also nur einen Takt anzuzeigen statt zwei. Bei C. habe ich das versucht. Ergebnis: Die Pause der Hauptstimme wird nicht angezeigt, der Takt bleibt leer.

Ich muss betonen, man kann diese Pause auch von Hand wieder einfügen, so wie oben das Wiederholungszeichen. Man zitiert also einen Takt lang gar nichts, sondern setzt Pause. Es bleibt aber doch das Gefühl, hier um Bugs drumherum reparieren zu müssen. Keine schöne Sache, weil sie doch der Leserlichkeit des Codes schadet.

Zuletzt: In D. habe ich unterstellt, dass die ersten zwei Takte der Unterstimme wegfallen, sie also erst im vorletzten Takt einsetzen soll. - Was passiert? Sie übernimmt nun plötzlich die Schriftgröße der Stichnoten.

Ich bin sicher, dass man auch das irgendwie austricksen kann. Aber es macht nicht so richtig Spaß...

Ich hoffe, das sind alles Bedienungsfehler und Missverständnisse von mir, aber damit wären es auch solche der Doku. Oder sind es Bugs, die in 2.19 behoben werden?

Gruß,
--ingmar
Titel: Re: Stichnoten, die zweite..
Beitrag von: harm6 am Freitag, 10. Juli 2015, 15:34
Hallo ingmar,

ich beziehe mich in meiner Antwort in der Regel auf:
NR 1.6.3 Writing parts - Formatting cue notes
http://www.lilypond.org/doc/v2.18/Documentation/notation/writing-parts#formatting-cue-notes (http://www.lilypond.org/doc/v2.18/Documentation/notation/writing-parts#formatting-cue-notes)
(Ich benutze immer die englische Doku, da die deutsche nicht aktuell ist.)

Alle Beispiele beziehen sich auf "2.18.2"

Bitte teste sie einzeln um eventuelle bleed-over Effekte zu vermeiden


Zu Versuch A:

Zitat
Bei A. habe ich versucht, einfach per << >> zu der Hauptstimme das Zitat der anderen Stimme dazu zu montieren. Das wäre sicher der praktischste Weg. Aber so geht es nicht, wir haben dann doppelte Pausen, die die Stichnoten sogar verdecken.

Hier baust Du eine permanente Mehrstimmigkeit zweier Voices, wobei cueDuring auch noch zusätzlich Ganztaktpausen setzt, während die Hauptstimme diese schon hat. (Daher die Verdoppelung.)
Ich habe auch kein Beispiel in der NR für diese Vorgehensweise gefunden.
Aber auch wenn Du \cueDuring #"1." #UP { s1 *2 } schreibst ist zwar die Verdoppelung perdu aber Kollisionen entstehen.
Diese sind zwar mittels \voiceXxx behebbar, es entstehen jedoch wiederum andere wohl ungewollte Effekte. Siehe:

ERSTENS = \relative  c'' {
\repeat volta 2 {
c d e f g f e d
}
c b c d e d e f2
   e4 d c c b c2
\bar "|."
}

ZWEITENS = \relative c' {
\repeat volta 2 {
c2 g b c
}
R1*2
c2 b g c
}

\addQuote "1." \ERSTENS

\new Staff
<<
        { \voiceTwo \ZWEITENS }
{

s1 *2
\new CueVoice { \set instrumentCueName = "(erste Stimme)" }
\cueDuring #"1." #UP { s1 *2 }
}
>>

Das Beste was ich Dir anbieten kann ist eine Verschiebung der Ganztaktpausen:

ERSTENS = \relative  c'' {
\repeat volta 2 {
c d e f g f e d
}
c b c d e d e f2
   e4 d c c b c2
\bar "|."
}

ZWEITENS = \relative c' {
\repeat volta 2 {
c2 g b c
}
R1*2
c2 b g c
}

\addQuote "1." \ERSTENS

\new Staff
<<
        \ZWEITENS
{

s1 *2
\new CueVoice { \set instrumentCueName = "(erste Stimme)" }
\cueDuring #"1." #UP {
\override Staff.MultiMeasureRest.staff-position = #-4
s1 *2
\revert Staff.MultiMeasureRest.staff-position
}
}
>>

Zu Versuch B:

Zitat
Bei B. baue ich meine Stimme zusammen, wie in meinem oben zitierten Beitrag beschrieben - wir nehmen immer ein Stückchen aus dieser und ein Stückchen aus jener. Ist nicht so elegant, weil man bei längeren Stücken am Schluss immer noch die verbleibenden Takte auszählen muss, um nicht Leertakte zu erzeugen oder zu früh zu enden. Ergebnis: Keine Stimme fühlt sich zuständig für das Wiederholungszeichen. Natürlich kann man es von Hand wieder einfügen (\bar ":|.").

Ein Taktstrich ist kein event und daher in keinem Fall zitierfähig.

Siehe:

test-a = { d''1 e'' \bar "S" f'' g'' }
\addQuote "test-a" \test-a

\new Staff { c''1 \cueDuring #"test-a" #UP { s1*2 } c''1 }

Wenn Du aus einzelnen Teilen eine Stimme neu zusammensetzt, mußt Du daher selbst für die Struktur Sorge tragen.

ERSTENS = \relative  c'' {
\repeat volta 2 {
c4 d e f g f e d
}
c b c d e d e f2
   e4 d c c b c2
\bar "|."
}

ZWEITENS = \relative c' {
\repeat volta 2 {
c2 g b c
}
R1 *2
c2 b g c
}


\addQuote "1." { \ERSTENS }
\addQuote "2." { \ZWEITENS }

NEU-B = {
\repeat volta 2 {
\quoteDuring #"2." { s1 *2 }
}
  \new CueVoice { \set instrumentCueName = "(erste Stimme)" }
\cueDuring #"1." #UP { R1 *2 }
\quoteDuring #"2." { s1 *2 }
\bar "|."
}

\score {
\new Staff \with { instrumentName = "B." } { \NEU-B }
}

Zu Versuch C:

Zitat
Unschön und für den Spieler verwirrend mag die überhängende Note aus den Stichnoten in den gespielten Part hinein sein. Man könnte also daran denken, die Stichnoten ein wenig zu kürzen, also nur einen Takt anzuzeigen statt zwei. Bei C. habe ich das versucht. Ergebnis: Die Pause der Hauptstimme wird nicht angezeigt, der Takt bleibt leer.

Die Ganztaktpausen sind als R1*2 eingegeben. Also als ein multi-measure-rest-event.
Siehe auch den output von:

\displayMusic
{ R1*2 }

Das nachher zwei Pausen erscheinen ist ein feature, aber nicht Deine Eingabe!

Das zitieren eines andauernden Ereignis erst nachdem es begonnen hat muß aber scheitern.

Hier der Versuch die Hälfte eine Brevis zu zitieren. Klappt nicht.

test-b = { d''\breve }
\addQuote "test-b" \test-b

\new Staff { e''1 \cueDuring #"test-b" #UP { R1 } }

Um hier d''1 erscheinen zu lassen, müsste d''\breve intern in zwei Ganze gesplittet werden.
Man kann natürlich via Completion_heads_engraver und Completion_rest_engraver gehen (siehe NR).
Ich bezweifel jedoch das es funktioniert (non testat). Bin mir aber sicher das es nicht das ist was Du willst.

Du könntest natürlich die Pausen als { R1 R1 } eingeben.
Jedoch sind Ganztaktpausen per default erst mal nicht zitierfähig.

Siehe:

test-c = { d''1 R1 }
\addQuote "test-c" \test-c

\new Staff { e''1 \cueDuring #"test-c" #UP { s1 } }

Das kann man aber ändern, indem man multi-measure-rest-event zu den zitierfähigen Events hinzufügt (siehe NR):

test-d = { d''1 R1 }
\addQuote "test-d" \test-d

\score {
  \new Staff { e''1 \cueDuring #"test-d" #UP { s1 } }
  \layout {
    %% für quoteDuring
    %\set Score.quotedEventTypes = #'(note-event articulation-event
    %                         crescendo-event rest-event 
    %                         multi-measure-rest-event
    %                         slur-event dynamic-event)
    %% für \cueDuring
    \set Score.quotedCueEventTypes = #'(note-event rest-event tie-event
                                        beam-event tuplet-span-event
                                        multi-measure-rest-event
                                        dynamic-event slur-event)
  }
}

Zu Versuch D:

Zitat
Zuletzt: In D. habe ich unterstellt, dass die ersten zwei Takte der Unterstimme wegfallen, sie also erst im vorletzten Takt einsetzen soll. - Was passiert? Sie übernimmt nun plötzlich die Schriftgröße der Stichnoten.

Siehe NR:
Zitat
Note: When a Voice starts with cueDuring, as in the following example, the Voice context must be explicitly declared, or else the entire music expression would belong to the CueVoice context.

Also:

ERSTENS = \relative  c'' {
\repeat volta 2 {
c4 d e f g f e d
}
c b c d e d e f2
   e4 d c c b c2
\bar "|."
}

ZWEITENS = \relative c' {
\repeat volta 2 {
c2 g b c
}
R1 *2
c2 b g c
}

\addQuote "1." { \ERSTENS }
\addQuote "2." { \ZWEITENS }

NEU-D = {
  \new CueVoice { \set instrumentCueName = "(erste Stimme)" }
\cueDuring #"1." #UP { R1 *4 }
\quoteDuring #"2." { s1 *2 }
}

\score {
\new Staff \with { instrumentName = "D." } \new Voice { \NEU-D }
}


Nachdem nun (hoffentlich) klar ist was wie funktioniert (oder eben nicht) nun zur
Lösung:

ERSTENS = \relative  c'' {
\repeat volta 2 {
c d e f g f e d
}
c b c d e d e f2
   e4 d c c b c2
\bar "|."
}

ZWEITENS = \relative c' {
\repeat volta 2 {
c2 g b c
}
\tag #'cue-voice {
\new CueVoice { \set instrumentCueName = "(erste Stimme)" }
}
\cueDuring #"1." #UP { R1*2 }
c2 b g c
}

\addQuote "1." { \ERSTENS }
\addQuote "2." { \ZWEITENS }


\score {
\new StaffGroup { <<
\new Staff { \ERSTENS }
%% mit Zitaten
\new Staff { \ZWEITENS }
%% ohne Zitate
                %% siehe NR zu killCues
\new Staff { \removeWithTag #'cue-voice \killCues \ZWEITENS }
>> }
}

So schlägt es die NR auch vor ;)

Siehe folgendes Beispiel aus der NR:

fluteNotes = \relative {
  r2. c''4 | d8 c d e fis2 | g2 d |
}

oboeNotes = \relative c'' {
  R1
  \new CueVoice { \set instrumentCueName = "flute" }
  \cueDuring #"flute" #UP { R1 }
  g2 c,
}

\addQuote "flute" { \fluteNotes }

\new Staff {
  \oboeNotes
}


Im wesentlichen sind es also tatsächlich
Zitat
Bedienungsfehler und Missverständnisse
;)

Auf der anderen Seite ist die NR sicherlich verbesserungsfähig.
Was hat gefehlt bzw wie könnte man das Verständnis erleichtern?

Vorschläge werden gerne entgegengenommen (patches natürlich noch lieber). Dazu schreibe an die bug-list, die sind nicht nur für ausgesprochene bugs sondern auch für Verbesserungsvorschläge zuständig.

Info hier:

http://lilypond.org/bug-reports.html
 (http://lilypond.org/bug-reports.html)


Gruß,
  Harm
Titel: re: Stichnoten, die zweite..
Beitrag von: ingmar am Sonntag, 2. August 2015, 18:32
Zunächst vielen Dank für die umfangreiche Antwort! Es sind mehrere für mich sehr wertvolle Hinweise dabei herumgekommen. Ich hab mehrfach angesetzt zu antworten, es ist aber alles sehr umfangreich und vieles reichlich überraschend, und angesichts der (natürlich von mir selbst zu verantwortenden) Länge des ganzen Themas hab ich bisher einfach keine Zeit gefunden, mein Posting abzuschließen. Ich muss mir dazu mal richtig Zeit nehmen.

--ingmar