Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: infranator am Donnerstag, 22. Januar 2009, 17:14

Titel: Akkordtöne in Klavierstimme auf mehrere Stimmen verteilen
Beitrag von: infranator am Donnerstag, 22. Januar 2009, 17:14
Hallo,

ich habe eine Melodie fünfstimmig gesetzt und das wegen der Übersicht in einem Klaviersystem. Jeder Akkord steht in eckigen Klammern und manchmal die tiefen Akkordtöne im Bassschlüsseel. Jetzt soll aber das ganze von Fünf saxophonen gespielt werden. Gibt es da einen eleganteren Weg als alles per hand in die einzelnen Stimmen abzuschreiben?
Gruß,
Jakob
Titel: Re: Akkordtöne in Klavierstimme auf mehrere Stimmen verteilen
Beitrag von: derHindemith am Donnerstag, 22. Januar 2009, 17:26
Na, es gab neulich genau diese Frage in den Englsich Forum. Ich versteh es kaum, aber hier ist es:
http://lists.gnu.org/archive/html/lilypond-user/2009-01/msg00588.html

Aber, wie gesagt, es ist vielleicht einfacher und schneller wieder einzutippen in einzeln Stimmen.
Titel: Re: Akkordtöne in Klavierstimme auf mehrere Stimmen verteilen
Beitrag von: comper am Donnerstag, 22. Januar 2009, 18:05
Es ging noch weiter in
http://lists.gnu.org/archive/html/lilypond-user/2009-01/msg00628.html (http://lists.gnu.org/archive/html/lilypond-user/2009-01/msg00628.html)

Gruss
Titel: Re: Akkordtöne in Klavierstimme auf mehrere Stimmen verteilen
Beitrag von: infranator am Donnerstag, 22. Januar 2009, 22:33
Ach du liebe Zeit! Wer hätte gedacht, dass das so kompliziert ist? Ich habe aber in dem Threat was gefunden, was für meine Zwecke funktioniert. Ich habe das jetzt so geregelt:
\version "2.12.1"
#(define (has-duration? music)
(ly:duration? (ly:music-property music 'duration)))

#(define (not-has-duration? music)
(not (has-duration? music)))

keepsOnlyFirstNote = #(define-music-function (parser location music)
(ly:music?)
(music-map
  (lambda (evt)
   (if (eq? 'EventChord (ly:music-property evt 'name))
      (let ((elts (ly:music-property evt 'elements)))
       (if (has-duration? (car elts))
            (ly:music-set-property! evt 'elements (cons
                 (car elts)
                 (filter not-has-duration? (cdr elts)))))))
  evt)
music))

deleteFirstNote = #(define-music-function (parser location music)
(ly:music?)
(music-map
  (lambda (evt)
   (if (eq? 'EventChord (ly:music-property evt 'name))
      (let ((elts (ly:music-property evt 'elements)))
           (if (has-duration? (car elts))
                (ly:music-set-property! evt 'elements  (cdr elts)))))
  evt)
music))


musik =\relative c'' {
<bes f   d   ces bes>
<as  ges e   c   as >
<ges e   c   a   ges>
}


TempI = { \deleteFirstNote \musik }
TempII = { \deleteFirstNote \TempI }
TempIII = { \deleteFirstNote \TempII }
StimmeI = { \keepsOnlyFirstNote \musik }
StimmeII = { \keepsOnlyFirstNote \TempI }
StimmeIII = { \keepsOnlyFirstNote \TempII }
StimmeIV = { \keepsOnlyFirstNote \TempIII }
StimmeV = { \deleteFirstNote \TempIII }

\markup { Music with chords }
\new Staff \musik
\markup { Music splitted in 5 staffs }
<<

\new Staff \StimmeI
\new Staff \StimmeII
\new Staff \StimmeIII
\new Staff { \clef bass { \StimmeIV} }
\new Staff { \clef bass { \StimmeV} }

>>
Einer der am Anfang definierten Befehle löscht die oberste Stimme und der andere alle außer die oberste. Weil ich keine Ahnung habe was da in den ersten Zeilen steht, habe ich mich bis zur fünften Stimme über die Temp-Stimmen vorgemogelt.