\partcombine für mehr als zwei Stimmen

Begonnen von Hilflos-im-Code, Sonntag, 18. März 2018, 12:01

« vorheriges - nächstes »

Hilflos-im-Code

Ich habe mehrstimmiges Material, dass ich in einer Notenzeile zusammenfassen will. Das Material ist teilweise homorhythmisch und polyrhythmisch. Ziel ist, dass das homorhythmische Material als akkkordisch dargestellt wird, das polyrhythmische polyphon.

Zum besseren Verständnis. Das Ausgangsmaterial ist in dieser Art gestaltet:

\version "2.19.81"




\new Staff  <<
  {\stemUp  c'' c'' c'' c''  c''2}

    {  a'4 a' a' a' a' b'  }

   {  f'4 f' f' f' g' f' }

   { \stemDown f4 f f f  f f }
  >>


Aussehen soll es optisch aber, wie das Ergebnis dieses Codes.


\new Staff

<<{ <f' a' c''> <f' a' c''> <f' a' c''> <f' a' c''> << \voiceOne {c''2} \new Voice {\voiceTwo a'4 b'4} \new Voice {\voiceThree g'4 f'4}  >> }

\\    { \stemDown f4 f f f  f f }  >>




Bloß die Umschreibarbeit wäre ziemlich aufwendig.

Ich bin auf \partcombine gestoßen. Aber das geht nur mit zwei Stimmen.

Ich habe http://lilypond.org/doc/v2.19/Documentation/notation/multiple-voices.de.html#automatic-part-combining gefunden

Gibt es etwas ähnliches für mehr als zwei Stimmen oder kann man \partcombine mächtiger machen?

Ich habe mal versucht \partcombine zu verschachteln.


\new Staff   <<
\partcombine {\partcombine  {\stemUp  c'' c'' c'' c''  c''2}   {  a'4 a' a' a' a' b'  }}

   {  f'4 f' f' f' g' f' }

   { \stemDown f4 f f f  f f }
  >>

 
\new Staff

<<{ <f' a' c''> <f' a' c''> <f' a' c''> <f' a' c''> << \voiceOne {c''2} \new Voice {\voiceTwo a'4 b'4} \new Voice {\voiceThree g'4 f'4}  >> }

\\    { \stemDown f4 f f f  f f }  >>




Hilft aber nicht so richtig weiter.

Malte

Vielleicht hilft dir einer dieser drei Threads weiter? Hab leider grad nicht viel Zeit, mir selbst was zu überlegen.

Arnold

Hallo,

da es, je mehr Stimmen es werden, umso mehr Möglichkeiten der Kombination in einer Notenzeile gibt - und diese Möglichkeiten auch noch »schneller als linear« wachsen - , und zum Anderen die expliziten Formatierungsangaben des Partcombine auf zwei Stimmen angelegt sind, habe ich vor einigen Wochen den umgekehrten Ansatz verfolgt:

Ich schrieb alle drei Stimmen (überwiegend als Nachschlag-Harmonie gestaltet) in einer Notenzeile, also teilweise als Akkord mit drei Tönen, teilweise als zwei Stimmen (und in einer mit zwei-Ton-Akkord), drei parallele Stimmen habe ich nicht benötigt, aber Unisono kam auch vor.
Anstelle »partcombine« habe ich also quasi ein eigenes »partextract« angewandt, und dazu auch eine Scheme-Funktion geschrieben welche dieses Extrahieren (bei meinen relativ einfachen Strukturen) durchführt.
Diese Funktion habe ich gerade nicht parat um sie anzuhängen, aber ich möchte die Funktion kurz beschreiben:
Im Kern wurden »Sequentielle Musik-Abschnitte« anhand ganz bestimmter der Sequentiellen Musik vergebener Tags (z. Bsp: »\tag #'V=2,1 { ... }«) gefiltert (z. Bsp. »Hier ist in den Akkorden zuerst die Tonhöhe der 2. Stimme, danach diejenige der 1. Stimme aufgelistet«). Und natürlich wurde auch jedes »\voiceOne«, »\voiceTwo« u.s.w. herausgefiltert.

Also, ich hatte (anders als Du) nicht den Bedarf vorhandene Stimmen zu vereinigen, sondern ich habe gleich eine Kombinationsstimme erstellt und daraus die drei Einzelstimmen extrahiert.
Leider wäre es wohl mit viel Copy-and-Paste und weiteren Schreibaufwand verbunden, wenn Du nun aus den vorhandenen drei Einzelstimmen solch eine »vereinzelbare Kombinationsstimme« erstellen wolltest.

Arnold

Hilflos-im-Code

Danke. Ich bin jetzt auf die Befehle \shiftOn, \shiftOnn, \shiftOnnn gestoßen. Was bewirkt die verschiedene Anzahl der "n"? Bei Experimentieren habe ich keinen Unterschied feststellen können.

Malte

Zitat von: Hilflos-im-Code am Montag, 19. März 2018, 11:28
Danke. Ich bin jetzt auf die Befehle \shiftOn, \shiftOnn, \shiftOnnn gestoßen. Was bewirkt die verschiedene Anzahl der "n"? Bei Experimentieren habe ich keinen Unterschied feststellen können.
In property-init.ly sind diese Funktionen folgendermaßen definiert:
shiftOff  = \override NoteColumn.horizontal-shift = #0
shiftOn   = \override NoteColumn.horizontal-shift = #1
shiftOnn  = \override NoteColumn.horizontal-shift = #2
shiftOnnn = \override NoteColumn.horizontal-shift = #3

Hier findet sich dann folgende Erklärung zu horizontal-shift:
ZitatAn integer that identifies ranking of NoteColumns for horizontal shifting.  This is used by note-collision-interface.
Für mehr Details müßte man vermutlich in den C++-Code schauen.