lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: strip dynamics for Piano music


From: Valentin Villenave
Subject: Re: strip dynamics for Piano music
Date: Thu, 2 Jan 2014 11:39:16 +0100

On Fri, Dec 6, 2013 at 2:40 PM, Noeck <address@hidden> wrote:
> is it possible somehow, to split contents of a music expression into
> two? I am asking for a piano staff which I would enter as follows:
> upper = { a4\f g f e\p }
> lower = { a,1 }

Greetings,
sorry for answering so late but this message had been caught in my spam filter!

What you’re describing is actually exactly what I do in my own scores:
http://git.savannah.gnu.org/cgit/opus-libre.git/tree/lib/libdynamics.scm#n22

#(define (dynamic? x)
  (let ((name (ly:music-property x 'name)))
    (or
     (eq? name 'DynamicEvent)
     (eq? name 'AbsoluteDynamicEvent)
     (eq? name 'CrescendoEvent)
     (eq? name 'DecrescendoEvent)
     (eq? name 'SpanDynamicEvent))))

#(define removeDynamics
;; Remove untagged dynamics.
  (define-music-function (parser location music) (ly:music?)
    (if (ly:get-option 'no-auto-piano-dynamics)
        music
        (music-filter
         (lambda (x)
           (let ((tags (ly:music-property x 'tags))
                 (dir (ly:music-property x 'direction)))
             (not (and
                   (dynamic? x)
                   (not (memq 'staff-dynamics tags))
                   (null? dir)))))
         music))))

#(define filterDynamics
;; Like \removeWithTag, but will not affect other contexts
;; (i.e. no \change, no \bar or \time etc.)
  (define-music-function (parser location music) (ly:music?)
    (if (ly:get-option 'no-auto-piano-dynamics)
        (make-music 'Music 'void #t)
        (music-filter
          (lambda (x)
            (let ((name (ly:music-property x 'name))
                  (tags (ly:music-property x 'tags))
                  (dir (ly:music-property x 'direction)))
              (not (or
                    (eq? name 'ContextChange)
                    (eq? name 'VoiceSeparator)
                    ;(eq? name 'ContextSpeccedMusic)
                    (memq 'staff-dynamics tags)
                    (ly:dir? dir)))))
          music))))


The advantage of the code I use is that it takes the dynamics from
either the upper or the lower staff:
\new PianoStaff <<
  \new Staff \removeDynamics \upper
  \new Dynamics \filterDynamics << \upper \lower >>
  \new Staff \removeDynamics \lower
>>
However, all dynamics that have an explicit direction will be ignored
(c^\f, c-\f or c_\f), which allows you to keep the ability of
attaching some dynamics to one of the staves whenever you need to.

Hope this helps!

Cheers,
V. Villenave.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]