From: David Kastrup Date: Fri, 4 Dec 2015 15:09:00 +0000 (+0100) Subject: Issue 4702/1: Implement `music-pitches' function X-Git-Tag: release/2.19.35-1~9^2~12 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=0365d088246f222afe9f9a91818ab949d2f13336;p=lilypond.git Issue 4702/1: Implement `music-pitches' function --- diff --git a/scm/music-functions.scm b/scm/music-functions.scm index d5a4b2478a..325da29dd5 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -2073,6 +2073,21 @@ are expanded using the default settings of the parser." (map (lambda (x) (ly:music-property x 'pitch)) (event-chord-notes event-chord))) +(define-public (music-pitches music) + "Return a list of all pitches from @var{music}." + ;; Opencoded for efficiency. + (reverse! + (let loop ((music music) (pitches '())) + (let ((p (ly:music-property music 'pitch))) + (if (ly:pitch? p) + (cons p pitches) + (let ((elt (ly:music-property music 'element))) + (fold loop + (if (ly:music? elt) + (loop elt pitches) + pitches) + (ly:music-property music 'elements)))))))) + (define-public (event-chord-reduce music) "Reduces event chords in @var{music} to their first note event, retaining only the chord articulations. Returns the modified music."