Splitting chords: Difference between revisions
Rudi Guggt (talk | contribs) mNo edit summary |
No edit summary |
||
| (4 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
This snippet is a 2009 contribution by Gilles Thibault in [https://lists.gnu.org/archive/html/lilypond-user/2009-01/msg00685.html lilypond-user]. It | This snippet is a 2009 contribution by Gilles Thibault in [https://lists.gnu.org/archive/html/lilypond-user/2009-01/msg00685.html lilypond-user]. It provides two functions to split a chord sequence into two separate voices, also preserving articulations and slurs: <code>\keepOnlyFirstNote</code> extracts the first note (as given in the input; this is usually the lowest one) of every chord, and <code>\deleteFirstNote</code> collects the remaining notes. | ||
Note that these functions don't support <code>q</code> to repeat the last chord. | |||
<lilypond version="2.24"> | <lilypond version="2.24"> | ||
#(define (has-duration? music) | |||
(ly:duration? (ly:music-property music 'duration))) | |||
#(define (not-has-duration? music) | |||
(not (has-duration? music))) | |||
keepOnlyFirstNote = | |||
#(define-music-function (music) (ly:music?) | |||
(music-map | |||
(lambda (evt) | |||
(when (eq? 'EventChord (ly:music-property evt 'name)) | |||
(let ((elts (ly:music-property evt 'elements))) | |||
(when (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 (music) (ly:music?) | |||
(music-map | |||
(lambda (evt) | |||
(when (eq? 'EventChord (ly:music-property evt 'name)) | |||
(let ((elts (ly:music-property evt 'elements))) | |||
(when (has-duration? (car elts)) | |||
(ly:music-set-property! evt 'elements (cdr elts))))) | |||
evt) | |||
music)) | |||
music = \relative c' { | |||
<c e>4-> <d f>( <b g'>) <c e>-. g2 c2 | |||
} | |||
\markup { Music with chords } | |||
\new Staff \music | |||
\markup { Music split into two staves } | |||
<< | |||
\new Staff \deleteFirstNote \music | |||
\new Staff \keepOnlyFirstNote \music | |||
>> | |||
</lilypond> | </lilypond> | ||
[[category:Chords]] | [[category:Chords]] | ||
[[category:Scheme]] | [[category:Scheme]] | ||
[[category:Really cool]] | [[category:Really cool]] | ||