• 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ü

Akkordtöne in Klavierstimme auf mehrere Stimmen verteilen

Begonnen von infranator, Donnerstag, 22. Januar 2009, 17:14

Vorheriges Thema - Nächstes Thema

infranator

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

derHindemith

#1
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.


infranator

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.