lilypond-user
[Top][All Lists]
Advanced

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

Re: Tweaking in an engraver


From: Timothy Lanfear
Subject: Re: Tweaking in an engraver
Date: Sun, 19 Jul 2015 19:21:35 +0200


Sent from my iPod

> On 19 Jul 2015, at 19:12, Peter Gentry <address@hidden> 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
> address@hidden
> https://lists.gnu.org/mailman/listinfo/lilypond-user



reply via email to

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