Sent from my iPod
> On 19 Jul 2015, at 19:12, Peter Gentry <peter.gen...@sunscales.co.uk> wrote: > > The OP described wanting to tweak a note property depending on its pitch. Now > I may be missing something but do you need to create > an engraver for this. > > My instrumentranges.ly examines note pitch an based on a suplied criterion > changes notehead colour and style - is this the sort of > thing you had in mind. > > \version "2.19.15" > % > ------------------------------------------------------------------------------------------------- > % include function file instrument_ranges.ly > % usuage include --> \include "./ranges/instrument_ranges.ly" > % usuage call --> \naturalizeInstrumentRange "instrument" music > % this function will confine all pitches to the individual instruments range > % Note the ranges refer to music transposed for each instrument not the true > pitches. > % use % for comment outside scheme function - use ; inside scheme functions > % > ------------------------------------------------------------------------------------------------- > > #(define (naturalize-instrument-range p instrument ) > (let ((o (ly:pitch-octave p)) > (a (* 4 (ly:pitch-alteration p))) > ;; alteration, a, in quarter tone steps, for historical reasons > (n (ly:pitch-notename p))) > (define np 0) > (define op (+ (+ (+ (* 14 o) ) (* n 2) ) (/ a 2))) > > > ;; clarinet range e to f' -1 2 0 to 1 3 0 (-11 to 20) > (cond > ((equal? instrument "clarinet" ) > (if (< op -38) (begin (set! o (+ o 1))) ) > (if (< op -24) (begin (set! o (+ o 1))) ) > (if (< op -10) (begin (set! o (+ o 1))) ) > (if ( > op 62) (begin (set! o (- o 1))) ) > (if ( > op 48) (begin (set! o (- o 1))) ) > (if ( > op 34) (begin (set! o (- o 1))) ) > ) > ; bass clarinet range eb to f' -1 1 2 (-1 2 -2) to 1 3 0 (-11 to 34) > > ((equal? instrument "bass clarinet eb" ) > (if (< op -39) (begin (set! o (+ o 1))) ) > (if (< op -25) (begin (set! o (+ o 1))) ) > (if (< op -11) (begin (set! o (+ o 1))) ) > (if ( > op 62) (begin (set! o (- o 1))) ) > (if ( > op 48) (begin (set! o (- o 1))) ) > (if ( > op 34) (begin (set! o (- o 1))) ) > ) > ; bass clarinet range c to f' -1 1 2 (-1 2 -2) to 1 3 0 (-14 to 34) > > ((equal? instrument "bass clarinet c" ) > (if (< op -42) (begin (set! o (+ o 1))) ) > (if (< op -28) (begin (set! o (+ o 1))) ) > (if (< op -14) (begin (set! o (+ o 1))) ) > (if ( > op 62) (begin (set! o (- o 1))) ) > (if ( > op 48) (begin (set! o (- o 1))) ) > (if ( > op 34) (begin (set! o (- o 1))) ) > ) > ;; flute range c to f' 0 0 0 to 1 3 0 (0 to 34) > > ((equal? instrument "flute") > (if (< op -28) (begin (set! o (+ o 1))) ) > (if (< op -14) (begin (set! o (+ o 1))) ) > (if (< op 0) (begin (set! o (+ o 1))) ) > (if ( > op 62) (begin (set! o (- o 1))) ) > (if ( > op 48) (begin (set! o (- o 1))) ) > (if ( > op 34) (begin (set! o (- o 1))) ) > ) > ;; alto range d to f' 0 1 0 to 1 3 0 > > ((equal? instrument "alto") > (if (< op -28) (begin (set! o (+ o 1))) ) > (if (< op -14) (begin (set! o (+ o 1))) ) > (if (< op 0) (begin (set! o (+ o 1))) ) > (if ( > op 62) (begin (set! o (- o 1))) ) > (if ( > op 48) (begin (set! o (- o 1))) ) > (if ( > op 34) (begin (set! o (- o 1))) ) > ) ) > > (ly:make-pitch o n (/ a 4)) > > )) > > % > ------------------------------------------------------------------------------------------------- > % a variable for the notehaed color on pitch change > % > ------------------------------------------------------------------------------------------------- > > my-color = #(x11-color 'red) > > % > ------------------------------------------------------------------------------------------------- > % this function rebuilds the music object optionally changing pitch and > notehead color > % > ------------------------------------------------------------------------------------------------- > #(define (instrumentrange music instrument ) > ( ly:music? string? ) > ; extract the various portions of the music object > (let ((es (ly:music-property music 'elements)) > (e (ly:music-property music 'element)) > (p (ly:music-property music 'pitch))) > > ; rebuild any 'elements unchanged > (if (pair? es) > (ly:music-set-property! music 'elements > (map (lambda (x) (instrumentrange x instrument)) es))) > > ; rebuild any 'element unchanged > (if (ly:music? e) (ly:music-set-property! music 'element > (instrumentrange e instrument ))) > > ;rebuild the pitch and if a changed pitch add the color tweak > (if (ly:pitch? p) > (let ((new-pitch (naturalize-instrument-range p instrument))) > (ly:music-set-property! music 'pitch new-pitch) > (if (and (not (equal? p new-pitch)) (color? my-color)) > (ly:music-set-property! music 'tweaks > (acons > 'color my-color > (acons 'style 'harmonic > (ly:music-property music 'tweaks))))))) > > music)) > > naturalizeInstrumentRange = > #(define-music-function (parser location instrument m ) > ( string? ly:music? ) > (instrumentrange m instrument )) > > % > ------------------------------------------------------------------------------------------------- > % the Lily test file calling function \naturalizeInstrumentRange "flute" > followed by sequential music > % > ------------------------------------------------------------------------------------------------- > > > \score { > \naturalizeInstrumentRange "flute" > \new Staff \relative c' { > c,,8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > c8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > c8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > c8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > c8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > c8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > > } > } > \score { > \new Staff \relative c' { > c,,8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > c8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > c8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > c8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > c8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > c8 cis des d dis ees e eis fes f fis ges g gis aes a ais bes b bis ces > > } > } > > > _______________________________________________ > lilypond-user mailing list > lilypond-user@gnu.org > https://lists.gnu.org/mailman/listinfo/lilypond-user _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user