Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: Manuela am Samstag, 26. März 2016, 19:43
-
Einen großen Teil meines Vorhabens habe ich schon gelöst, dank Harm :D
Die Ausgabe klappt auch ganz wunderbar
Ich kriege es wieder einmal nicht gebacken :(
Ich möchte eine Liste von Musikausdrücken transponieren, sodass ich eine Liste erhalte, die zunächst die untransponierte Musik, dann die mit dem 1. Pitch transponierte, dann die mit dem 2. Pitch transponierte usw erhalte
\version "2.19.38"
\language "deutsch"
Tonleitern=< des d es >
ChordI = \chordmode { c:1 }
ChordII = \chordmode { c:2 }
ChordIII = \chordmode { c:3 }
ChordIV = \chordmode { c:4 }
ChordV = \chordmode { c:5 }
ChordVI = \chordmode { c:6 }
ChordVII = \chordmode { c:7 }
ChordVIII = \chordmode { c:8 }
ChordIX = \chordmode { c:9 }
ChordX = \chordmode { c:10 }
ChordXI = \chordmode { c:11 }
ChordXII = \chordmode { c:12 }
ChordXIII = \chordmode { c:13 }
ChordXIV = \chordmode { c:13.11 }
ChordXV = \chordmode { c:14 }
ChordXVI = \chordmode { c:m }
ChordXVII = \chordmode { c:m6 }
ChordXVIII = \chordmode { c:m7 }
#(define MusLis (list
ChordI
ChordII
ChordIII
ChordIV
ChordV
ChordVI
ChordVII
ChordVIII
ChordIX
ChordX
ChordXI
ChordXII
ChordXIII
ChordXIV
ChordXV
ChordXVI
ChordXVII
ChordXVIII ))
#(define Transpo
(define-music-function (m music)(ly:music? ly:music?)
(music-clone m
'elements
(map (lambda (pitch)
(ly:music-property #{ \transpose c $pitch $music #} 'element))
(event-chord-pitches m)
)
)
)
)
#(define Anzahl (length MusLis))
#(define Mehr-Leitern (make-list Anzahl Tonleitern))
#(define Alles (map Transpo Mehr-Leitern MusLis))
#(display (length Alles))
Map ergibt natürlich eine Liste mit 18 Elementen, also nicht das, was ich will, nämlich eine Liste mit 3x18 Elementen. Ersetze ich map durch append-map, erhalte ich jedoch eine Fehlermeldung.
In der letzten Ausbaustufe möchte ich noch die Chordnamen darunter schreiben, habe dazu noch keine Idee.
Sry Harm dass ich dich so oft belästige :-[
-
Inzwischen kann ich transponieren, das Ergebnis aber dürfte noch irgendeinen Haken haben, weil meine bereits frühere funktionierende Funktion nicht mehr funktioniert.
\version "2.19.38"
\language "deutsch"
Tonleitern=< des d es >
#(define ( Akkorde-in-allen-Tonleitern Pitch Musik)
(append-map
(lambda (p)
(map
(lambda (music)
#{ { \transpose c $p $music } #})
Musik
)
)
(event-chord-pitches Pitch)
)
)
Update: es passt doch, ich muss einfach ein "c" bei der Variable Tonleitern hinzufügen ;D