• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

Drei Stimmen in einer Notenzeile

Begonnen von lomtas, Sonntag, 10. Juni 2012, 20:18

Vorheriges Thema - Nächstes Thema

lomtas

Ich versuche gerade, drei Stimmen in einer Notenzeile zu vereinen. Dabei bekomme ich zwar fast das was ich möchte, aber halt nur fast. Letztendlich möchte ich das gleiche resultat haben, wie wenn ich das so schreibe
<ais fis cis>4
Ich möchte jedoch die einzelnen Stimmen aufteilen, um einzelne Stimmen schnell fürs Midi ausblenden zu können. Daher habe ich nun folgenden Aufbau gewählt:
\score {
    \new Staff <<
      \new Voice = "1" {
        \voiceOne{
          \sopranVoice
        }
      }
      \new Voice = "2" {
        \voiceTwo{
          \altVoice
        }
      }
      \new Voice = "3" {
        \voiceThree{
          \tenorVoice
        }
      }
    >>
}

Die Ausgabe ist leider noch etwas unerwünscht: Die dritte Stimme ist etwas verschoben gegenüber den anderen beiden, also halt nicht genauso, wie wenn ich die erste Methode wähle. Kann man das noch korrigiere, sodass die drei Stimmen genau unterneinander stehen?

ding-dong

hallo

versuchs mal mit

\voiceFour
[\once] \override NoteColumn #'force-hshift = #.001


\voiceFour sorgt dafür dass der hals nach unten schaut.

lomtas

Das hat schon mal geholfen. Zwei weitere Fragen dazu.

1) Was macht die Anweisung
\override NoteColumn #'force-hshift = #.001

2) Soland die Notenhälse gerade sind und keine "Fähnchen" haben, geht das gut, aber ab der Achtelnote sieht das nicht mehr ganz so schön aus (siehe Bild, sind eigentlich Achtelnoten). Kann man da noch was machen?

ding-dong

klar:
\override Flag #'style = #'no-flag

force-hshift = ... bestimmt um wieviel nach rechts oder links verschoben werden soll, wenn kollisionen drohen; die richtung hängt von \voice... ab.

trulli

Zitat
Die dritte Stimme ist etwas verschoben gegenüber den anderen beiden

Hallo lomtas,

neben der Methode von ding-dong kannst du auch \shiftOff an den Anfang der dritten Stimme schreiben.

Gruß

ding-dong

hallo Trulli

geht auch , aber ... - du kriegst vermehrt warnungen wegen kollisionen (die dann z.t. gar keine sind)

ding-dong


lomtas


Arnold

Variante 1:
ParallelMusic innerhalb eines Voice-Contexts
Alle Noten müssen im parallelen Rhythmus verlaufen
Vorsicht mit Bindebögen, Dynamik u.s.w. - es prasselt Warnungen
I   = { c''4 c'' b' c'' }
II  = { g'4  a'  g' g'  }
III = { e'4  f'  f' e'  }
Dyn = { s4\p\< s s\ff s\fp }

{
  \new Voice {
    <<
      { \I   }
      { \II  }
      { \III }
      { \Dyn }
    >>
  }
}


Variante 2:
MusicMap-Scheme-Prozedur zum Extrahieren einer Stimme
Die Nummer entspricht der Auflistungsreihenfolge im Akkord, somit Stimmkreuzungen möglich
#(define (extract-nth-noteevent-from-chord count mus)
  (let ((eventtype (ly:music-property mus 'name)))
   (if (eq? eventtype 'EventChord)
    (let
     ((es (ly:music-property mus 'elements))
      (new-es '())
      (counter 0))
     (for-each (lambda (e)
       (let ((e-type (ly:music-property e 'name)))
        (if (eq? e-type 'NoteEvent)
         (begin
          (set! counter (+ 1 counter))
          (if (equal? counter count)
           (set! new-es (append new-es (cons e '())))))
         (set! new-es (append new-es (cons e '()))))))
      es)
     (if (>= counter count)
      (ly:music-set-property! mus 'elements new-es)
      (ly:warning "Zu wenig Töne im Akkord!"))))
   mus))

extractNthVoiceFromChords =
#(define-music-function (parser location n m) (integer? ly:music?)
  (music-map (lambda (x) (extract-nth-noteevent-from-chord n x)) (ly:music-deep-copy m)))

Trio = { <c'' g' e'>4\p\<   <c'' a' f'>   <b' g' f'>\ff   <c'' g' e'>\fp }

\score {
  <<
    \new Staff { \Trio }
    \new StaffGroup <<
      \new Staff { \extractNthVoiceFromChords #1 \Trio }
      \new Staff { \extractNthVoiceFromChords #2 \Trio }
      \new Staff { \extractNthVoiceFromChords #3 \Trio }
    >>
  >>
}


Ich habe bei drei Stimmen in einer Notenzeile meistens mit »drei gleichen Singstimmen« zu kämpfen, und die laufen in der Regel nie vollständig parallel. Da es meistens ein Abschreiben (und transponieren) ist, hatte ich noch nie die Notwendigkeit, mich um das Zusammenfassen oder Verzeinzeln zu kümmern.

Arnold

lomtas

Das hatte ich mir irgendwie anders vorgestellt...

ding-dong

wie denn?

es hilft immer wenn ein eigenes beispiel - auch wenn (noch) nicht vollkommen - beigefügt wird, dann kann man über das wesentliche sprechen!

martinst

Wenn das Notenbild ansprechend sein soll, gibt's die Möglichkeit, die beiden oberen Stimmen als voiceOne per \partcombine zu verbinden und die dritte Stimme als voiceTwo.
Das funktioniert sogar bei unterschiedlichen Rhythmen in den Stimmen einigermaßen gut ohne manuelle Eingriffe.

Arnold

Hallo,

\voiceOne, \voiceTwo und \voiceThree sind eigentlich Notenformatierungsstile.
Wenn nicht gerade (viele) Achtel und kürzer vorkommen, sieht es am besten aus, wenn die untere Stimme mit \voiceTwo und die mittlere Stimme mit \voiceThree formatiert werden. Andernfalls hat man solch unschöne Darstellungen, als wäre bei Zweistimmigkeit die hohe Stimme mit Hals nach unten und die tiefe mit Hals noch oben geschreiben.
Da wir leider nur zwei Halsrichtungen zur Verfügung haben (nach oben oder nach unten) ist eine dritte (eigenständige) Stimme immer ein bischen sperrig.
Vielleicht muß ein genialer Kopf erst noch ein [i]threeVoicesPartCombine[/i] kreieren.

Arnold

trulli

Zitat von: ding-dong am Montag, 11. Juni 2012, 09:56
geht auch , aber ... - du kriegst vermehrt warnungen wegen kollisionen (die dann z.t. gar keine sind)

Schon recht ding-dong, aber mit \override Staff.NoteColumn #'ignore-collision = ##t nicht.  :)

Also in die 3. Stimme:
\override Staff.NoteColumn #'ignore-collision = ##t
\shiftOff


Falls jetzt jemand meckert und das als dreckige Lösung bezeichnet, dann hat er völlig recht.

ding-dong

immerhin:

ZitatUsing \override NoteColumn #'ignore-collision = ##t will cause differently headed notes in different voices to merge incorrectly.

aber da es eh nur aufgelöste akkordnoten sind, macht's ja nichts!

stefanhuglfing

ich möchte noch mal auf den Vorschlag von martinst zurückkommen. Mit \partcombine kann ich die zwei oberen Stimmen zusammenfassen. Aber ich dachte, wenn ich \voiceOne davor schreibe, zeigen die Notenhälse nach oben. Hier dagegen:


\version "2.14.2-2"
         
SopranNoten = 
\relative c'
  { c2  g'2 a2 c2 } 
 
MezzoNoten = 
\relative c'
  { g2  e'2 f2 a2 }   
       
AltNoten = 
\relative c 
  { e2  c'2  c2 f2 }

       
\score
{
  <<   
   
   \new Staff 
    <<
     
     \new Voice = "first"
      {
       \voiceOne
       \partcombine  \SopranNoten  \MezzoNoten
      }
     
     \new Voice = "second"
      {
       \voiceTwo 
       \AltNoten
      }
     
    >>
 
  >>

  \layout { \context { \Staff } }

}


zeigen die Notenhälse am Ende nach unten (weil sie sonst zu weit rauf gehen(?))

auch wenn ich den Abstand nach oben vergrößere:


\version "2.14.2-2"

\paper {
  system-system-spacing #'basic-distance = #32
  score-system-spacing =
    #'((basic-distance . 12)
       (minimum-distance . 6)
       (padding . 1)
       (stretchability . 12))
}

SopranNoten =
\relative c'
{ c2  g'2 \break a2 c2 }

MezzoNoten =
\relative c'
{ g2  e'2 f2 a2 }

AltNoten =
\relative c
{ e2  c'2  c2 f2 }

\score
{
  <<   
   
   \new Staff 
    <<
     
     \new Voice = "first"
      {
       \voiceOne
       \partcombine  \SopranNoten  \MezzoNoten
      }
     
     \new Voice = "second"
      {
       \voiceTwo 
       \AltNoten
      }
     
    >>
 
  >>

  \layout { \context { \Staff } }

}


bleibt es so. Weiß jemand Abhilfe?