Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet 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
-
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.
-
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
-
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.