[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