Autor Thema: \voiceOne - \voiceTwo  (Gelesen 3784 mal)

himatt

  • Member
\voiceOne - \voiceTwo
« am: Sonntag, 18. April 2010, 13:36 »
Hallo liebe Lilyfreunde,
ich komme grad nicht weiter ... :(
Meine 2. Basstimme will die Klammern nicht schreiben ...
Die Stimme teilt sich dummerweise mitten im volta. Eine ganz neue Stimme ab dieser Stelle bekomme ich nicht hin. Lily will volta natürlich erst beendet wissen. Genauso unmittelbar vor \alternative. Irgendwo steckt da ein Denkfehler bei mir.
Hier mein Schnipsel dazu:
\version "2.12.2"
\include "deutsch.ly"

GlobalChorScriptBass = {
\repeat volta 5 { s1*2 }
\alternative { {s1 }
{s1 }
   }
s8 s8\(  s2.\)-\fermata \bar "|."
}

BassNoten = \relative c {
\clef "bass"
\key es \major
\compressFullBarRests
\repeat volta 4 {
es1 |
es4 r << {\voiceOne es2} \new Voice { \voiceTwo as,2} >> }
\alternative {
{ << { \voiceOne es'2 r } \new Voice { \voiceTwo es2 r } >> }
{ << { \voiceOne es1 ~  } \new Voice { \voiceTwo es1   } >> }
   }
<< { \voiceOne es8[ es]  b2  } \new Voice
   { \voiceTwo as8[ as] es2  }
>>
}

\new Staff = "Bass"
\new Voice = "B"
<< \GlobalChorScriptBass \BassNoten  >>
Die Klammer (bekomme sie nicht farbig gezeichnet hier im code --> 2.Zeile in \alternative \voicetwo es1( bzw. in letzter Zeile \voiceTwo as8) )
\alternative {
{ << { \voiceOne es'2 r } \new Voice { \voiceTwo es2 r } >> }
{ << { \voiceOne es1 ~  } \new Voice { \voiceTwo es1(   } >> }
   }
<< { \voiceOne es8[ es]  b2  } \new Voice
   { \voiceTwo as8)[ as] es2  }
>>
wird eben mit Fehler nicht ausgegeben?
Auch das \compressFullBarRests funktioniert natürlich nicht mehr ab dieser Stelle.

Wo ist der Fehler? Eben \voiceOne - \voiceTwo nicht bis zu Ende verstanden. Die Klammerkonstruktion << {}\\{} >> bringt natürlich das gleiche unzufriedenstellende Ergebnis.

Danke für eure Hilfe heute zum herrlichen SonnenSonntag ;)
Matthias

derHindemith

  • Member
Re:\voiceOne - \voiceTwo
« Antwort #1 am: Sonntag, 18. April 2010, 15:41 »
Toller Problem!

1) Immer gut \oneVoice nach dem <<{\voiceOne}\new Voice {\voiceTwo}>>, sonst sind Balken und Klammern öfters in der falschen Richtung.
2) \new Voice unterscheidet sich von \context Voice. In diesem Fall, du willst später den gleichen Voice kontext, deshalb brauchst du \context Voice = "name" anstatt \new Voice.
3) Respekt. So weit zu kommen war sicher nicht einfach.

%\version "2.12.2"

BassNoten = \relative c {
   \clef "bass"
   \key es \major
   \repeat volta 4 {
      es4 r << {\voiceOne es2} \context Voice = "zweit" { \voiceTwo as,2} >> \oneVoice
   }
   \alternative {
      { << { \voiceOne es'2 r } \context Voice = "zweit" { \voiceTwo es2 r } >>\oneVoice }
      { << { \voiceOne es1 ~  } \context Voice = "zweit" { \voiceTwo es1(   } >>\oneVoice }
   }
   << { \voiceOne es8[ es]  b2  } \context Voice = "zweit" { \voiceTwo as8[ as]) es2  } >>\oneVoice
}

\new Staff = "Bass"
   \new Voice = "B"
   << \BassNoten >>

himatt

  • Member
Re:\voiceOne - \voiceTwo
« Antwort #2 am: Sonntag, 18. April 2010, 20:27 »
grad zurück von "Der Rose Pilgerfahrt" mit dem Dresdner Kammerchor ... ein Traum!!!

Danke Hindemith!!
So gehts. D.h. ich komme zu einem guten Ergebnis.
Mein GlobalChorScriptBass wird zwar nur von der ersten Bassstimme gelesen (Warum?? - will das noch jemand erklären? Robert? ;) ) Aber mit Eintrag der Klammern direkt in die BassNoten \voiceTwo siehts nun wie gewünscht aus.
Zitat
2) \new Voice unterscheidet sich von \context Voice. In diesem Fall, du willst später den gleichen Voice kontext, deshalb brauchst du \context Voice = "name" anstatt \new Voice.
Ja, \new oder \context ... da bin ich noch sehr unsicher. Danke für die Hilfe!
Zitat
3) Respekt. So weit zu kommen war sicher nicht einfach.
Ja wirklich!! Nach dem Lesen hilft oft nur stundenlanges Probieren. Und oft kommt eine Lösung - leider nicht immer bis zum vollen Verständnis dafür. Aber die Zeit und hoffentlich meine Ausdauer wirds bringen - bestimmt!

Danke!!
Matthias
« Letzte Änderung: Sonntag, 18. April 2010, 20:30 von himatt »

RobUr

  • Member
Re:\voiceOne - \voiceTwo
« Antwort #3 am: Sonntag, 18. April 2010, 23:27 »
Hallo Mat,

Zitat
Mein GlobalChorScriptBass wird zwar nur von der ersten Bassstimme gelesen (Warum?? - will das noch jemand erklären? Robert?  ;) )
Here I am … ;) Warum genau weiß ich auch nicht, aber offensichtlich wird es auf temporär hinzugefügte Stimmen nicht angewandt. Man müsste schon eine durchlaufende Nebenstimme dafür anlegen.
\version "2.12.3"

\include "deutsch.ly"

GlobalChorScriptBass = {
\key es \major
\compressFullBarRests
s1*4 s8 s\( s2\)-\fermata
\bar "|."
}

BassNoten = \relative c {
\repeat volta 4 {
es1 | es4 r \voiceOne es2
}
\alternative {
{ \voiceOne es2 \oneVoice r }
{ \voiceOne es1 ~ }
}
es8[ es] b2 \oneVoice
}

BassIINoten = \relative c {
\repeat volta 4 {
s1 s2 as
}
\alternative {
{ es'2 s }
{ es1( }
}
as,8)[ as] es2
}

\new Staff = "Bass" {
\clef "bass"
<<
\new Voice = "Bass"
<< \GlobalChorScriptBass \BassNoten >>
\new Voice = "Bass II"
<< \dynamicDown \voiceTwo \GlobalChorScriptBass \BassIINoten >>
>>
}

Viele Grüße, Robert

himatt

  • Member
Re:\voiceOne - \voiceTwo
« Antwort #4 am: Sonntag, 18. April 2010, 23:41 »
Hallo Robert, Danke!! das beruhigt mich ja ungemein :):):)!!

Ja, die Idee hatte ich auch. Nur ist dieser Wiederholungsteil recht lang, die wenigen Stellen mit 2 Bässen bisher unproblematisch mit meinem Konstrukt. Erst mit diesen Klammern ab dem \alternative kurz vor dem "Werk":D -ende gabs Probleme. Drum dachte ich es geht irgendwie anders. Die Lösung/Aufklärung von Hindemith hat mich da zufrieden gestellt. Das nächste Mal weiß ich dann gleich zwischen 2 Varianten zu wählen.
Gute Nacht - bin demnächst mal in Leipzig ...
Matthias

ding-dong

  • Member
Re:\voiceOne - \voiceTwo
« Antwort #5 am: Montag, 19. April 2010, 08:55 »
Mein GlobalChorScriptBass wird zwar nur von der ersten Bassstimme gelesen (Warum?? - will das noch jemand erklären?

warum erhält man denn 2 fermaten (1 oben, 1 unten)? die 2. wird eben im context mit \voiceTwo nach unten gesetzt!

himatt

  • Member
Re:\voiceOne - \voiceTwo
« Antwort #6 am: Montag, 19. April 2010, 18:31 »
hallo ding-ding
jaklar ... nur habe ich diese Fermate und die Bögen für \voiceTwo separat schreiben müssen, da sie nicht von GlobalChorScriptBass interpretiert wird. --> mein Startbeitrag bzw. Roberts letzter.
matthias

ding-dong

  • Member
Re:\voiceOne - \voiceTwo
« Antwort #7 am: Montag, 19. April 2010, 23:01 »
hi matt!

1. \new Voice und \context Voice unterscheiden sich v.a. dadurch, dass \new immer einen neuen kontext erstellt, während \context nur einen neuen kontext erstellt wenn dieser nicht schon existiert (dazu muss er auch mit einer identifikation versehen werden).
2. wenn eine anweisung (ein ausdruck=musical expression) erscheint (wie \voiceOne, \override oder irgendsowas) wird automatisch ein kontext erstellt (wenn er nicht explizit zugewiesen wird oder schon in einem kontext eingebettet ist)!

wenn also
Zitat von: himatt
<< { \voiceOne es8[ es]  b2  } \new Voice
      { \voiceTwo as8[ as] es2  }
   >>
steht, wird für den ausdruck { \voiceOne es8[ es]  b2  } ein Voice kontext erstellt. dein \new Voice {…} erstellt wiederum einen neuen Voice kontext, der sicher nicht identisch mit dem ersten ist!

um die sache sauber darzustellen und die einzelnen parts (noten, dynamik, struktur usw.) auseinanderzuhalten, würde ich folgendes vorschlagen:
\version "2.13.18"
\include "deutsch.ly"
GlobalChorScriptBass = { \key es \major \compressFullBarRests s1*4 s8 s\( s2\)-\fermata \bar "|." }
BassNoten = \relative c { \repeat volta 4 { es1 | es4 r es2 } \alternative { { es2 r } { es1 ~ }} es8[ es] b2 }
BassIINoten = \relative c { \repeat volta 4 { s1 s2 as } \alternative {{ es'2 s } { es1( }} as,8)[ as] es2 }
\new Staff = "Bass" {
  \clef "bass"
  <<
    \context Voice = "Bass" { \BassNoten }
    \context Voice = "Bass" { \voiceOne \GlobalChorScriptBass }
    \context Voice = "Bass II" { \BassIINoten }
    \context Voice = "Bass II" { \voiceTwo \GlobalChorScriptBass }
  >>
}
dabei wird die fermate sowohl im \voiceOne als auch im \voiceTwo (in beiden bassstimmen) interpretiert.

um die pausen die in beiden stimmen vorkommen zusammmenzulegen gibt es ein schnipsel im lsr: http://lsr.dsi.unimi.it/LSR/Item?id=336

zusätzlich würde ich die anweisungen, die den staff kontext betreffen, dorthin legen:
  \key es \major
  \compressFullBarRests

betreffen beide das system und nicht die einzelnen noten!

ich hoffe, diese kurzen hinweise führen dich weiter, sonst frag ruhig nach!

gruss
ding-dong












himatt

  • Member
Re:\voiceOne - \voiceTwo
« Antwort #8 am: Dienstag, 20. April 2010, 19:25 »
Hallo ding-dong,
Danke für deine Erklärungen nochmal. \new und \context wird mir klarer :)
Dein Vorschlag (Code) entspricht ja dem von Robert. Auch der Unterschied da von \new und \context ist mir verständlich. Nur - da der \volta - Text sehr lang war wollte ich auf die
Zitat von: Robert
durchlaufende Nebenstimme
verzichten.
Die Frage bleibt doch: Warum wird GlobalChorScriptBass nur von \voiceOne interpretiert? (legato + Fermate)
Hier nochmal ein ganz knapper, doch eigentlich fehlerloser (??) Code mit Bildchen:
\version "2.12.2"

GlobalChorScriptBass = {
s4( s2)-\fermata }

BassNoten = \relative c'' {
<< { \voiceOne e4  b2  } \context Voice = "BII" { \voiceTwo a4 e2 } >>\oneVoice
}

\new Staff = "Bass"
   \new Voice = "B"  << \BassNoten \GlobalChorScriptBass >>

Matthias



derHindemith

  • Member
Re:\voiceOne - \voiceTwo
« Antwort #9 am: Dienstag, 20. April 2010, 23:37 »
Es ist nur zu "B" zugefügt. Du erzeugst ein neuer Voice, und muß die \GlobalChorScriptBass auch zufügen. Aber vorsicht, du brauchst in diesem Fall << {\voiceOne…}\context Voice = "BII" <<\GlobalChorScriptBass {\voiceTwo…}>> >>

ding-dong

  • Member
Re:\voiceOne - \voiceTwo
« Antwort #10 am: Dienstag, 20. April 2010, 23:39 »
zunächst mal:
\voiceOne ist nur ein kürzel und bewirkt, dass in einem bestimmten context die hälse nach oben zeigen…(und weiteres)
\context (oder \new) Voice kreiert eine Voice, in welcher verschiedene musikalische ausdrücke stehen.

jetzt schreiben wir also mal die noten des 1. bass in eine stimme:

\context Voice = "1" \relative c'' { e4 b2 }
wir können noch den bindebogen einfügen und diesen musikalischen ausdruck benennen:

bassI = \context Voice = "1" \relative c'' { e4( b2) }
dasselbe mit dem bass 2:

bassII = \context Voice = "2" \relative c'' { a4( e2) }
nun verknüpfen wir beides im selben system (Staff) als simultane ereignisse <<…>>:

\context Staff = "bässe" {
  <<
    \bassI
    \bassII
  >>
}

fehlt noch die fermate (ich zähle das zu dynamischen anweisungen):

dyn = { s4 s2 - \femata }
diese verknüpfen wir nun im obigen Staff mit beiden bässen und bestimmen hier, dass die hälse des 1. basses nach oben + die des 2. nach unten zeigen:

\context Staff = "bässe" {
  <<
    \bassI
    \context Voice = "1" { \voiceOne \dyn }
    \bassII
    \context Voice = "2" { \voiceTwo \dyn }
  >>
}

selbstverständlich bleibt die ausgestaltung dir überlassen - du könntest in bassI  nur mal die relativen noten schreiben und dann im staff verknüpfen (s. mein beispiel von gestern) - wichtig ist dort die zuordnung über den namen der Voice!

himatt

  • Member
Re:\voiceOne - \voiceTwo
« Antwort #11 am: Dienstag, 20. April 2010, 23:56 »
@ ding-dong
nochmal Danke! Ja - das ist verständlich ... :)

@derHindemith
das wird die Lösung bringen in dieser Klammerkonstruktion - was nur alles geht - scheint mir logisch :)!!  ich probiere das morgen noch aus. Danke!!
GutNacht

... ich habs noch probiert! In dem Schnipsel wunderbar!! Für meine Partitur wären zahlreiche Änderungen notwendig (bin ja nun fertig damit und zufrieden:)). Natürlich müsste \GlobalChorScriptBass gleich von Anbeginn "mitlaufen". Also gleich diese "BII" initiieren und mit \GlobalChorScriptBass verknüpfen. Aber das hebe ich mir für das nächste Mal auf.

Danke euch!!!
« Letzte Änderung: Mittwoch, 21. April 2010, 00:16 von himatt »