hi there-
sorry for cross posting to all the lists, i'd rather not subscribe and
this post seems to apply to all three.

attached is a recorder diagram patch, would love for feedback and for
it to be incorporated.  hopefully it's ok it's not actually in patch
format, it just drops into display-woodwind-diagrams.scm (of course a
corresponding entry needs to be added to
woodwind-data-assembly-instructions in that file as well).

my biggest problems:

- 1h (half-covered) works for eg 'flute two', but on my recorder thumb
(T) it doesn't work -- it just shows fully covered.

- why are partial covers shown as shaded, then there is no distinction
w/trills (ie 1h and 1hT are identical)?

i don't know scheme, so i was mainly pattern-matching from existing
diagrams.  some issues i had while trying to figure this out:

- what is the purpose of the baked-in cc/lh/rh grouping?

- i can't find doc for draw-instructions rules -- seems to determine
whether keys are hidden unless specified -- i didn't want that
behavior, but was stuck unexpectedly getting it for a while.

- difference between identity and return-1 -- they sound identical to
me (when xy-scaling), but gave different results.

- the style used encourages a lot of duplicated code -- it needs to be
refactored so that keys are defined as simple declarative structures
(with properties like name, group, position, complexity, stencil,
textual-representation) and graphical/textual-commands derived
therefrom.

- similarly, key positions should be described in relative terms --
most stuff is absolute w/brittle hardcoding.

- explicit support for when there is no text-override (key name
instead of graphical stencil) available.  i tripped across a
previously reported bug that doesn't seem to have made it to the issue
list even though it's a crash:
(http://lists.gnu.org/archive/html/lilypond-user/2014-09/msg00405.html):

  c^
  \markup \override #'(graphical . #f) {
      \woodwind-diagram
        #'tin-whistle
        #'()
  }

C:/Program Files (x86)/LilyPond/usr/share/lilypond/current/scm/display-woodwind-
diagrams.scm:1977:20: In procedure = in expression (= 0 (assoc-get node draw-ins
tructions)):
C:/Program Files (x86)/LilyPond/usr/share/lilypond/current/scm/display-woodwind-
diagrams.scm:1977:20: Wrong type: #f

also broken for saxophone (a different error tho), but works for piccolo.
for tin-whistle, seems to be from use of CENTRAL-COLUMN-HOLE-H-LIST
instead of CENTRAL-COLUMN-HOLE-LIST.

- when using \override #'(graphical . #f) (is there a way to call this
"textual"?) with an empty keylist, should show all possible text
stencils (as it currently does for graphical).  also, how are partial
coverings/trills handled in this case?

- would be nice if i didn't have to edit display-woodwind-diagrams.scm
and instead could just \include my raw .scm file from a .ly file.

thanks!
-erik
;;; Recorder assembly instructions

(define make-hidden-key-addresses (make-key-symbols 'hidden))

(define recorder-change-points
  ((make-named-spreadsheet '(recorder)) '()))

(define (remove-last x) (reverse (cdr (reverse x))))

(define recorder-rh-B-key-stencil (variable-column-circle-stencil 0.55))
(define recorder-rh-L-key-stencil (variable-column-circle-stencil 0.35))

(define (generate-recorder-family-entry recorder-name)
  (let*
      ((change-points
        (get-named-spreadsheet-column recorder-name recorder-change-points)))
    `(,recorder-name
      . ((keys
          . ((hidden
              . ((midline
                  . ((offset . (0.0 . 0.0))
                     (stencil . ,midline-stencil)
                     (text? . #f)
                     (complexity . basic)))
                 (r3
                  . ((offset . (0.0 . 1.0))
                     (stencil . ,column-circle-stencil)
                     (text? . #f)
                     (complexity . basic)))
                 (r4
                  . ((offset . (0.0 . 0.0))
                     (stencil . ,column-circle-stencil)
                     (text? . #f)
                     (complexity . basic)))))
             (central-column
              . ((one
                  . ((offset . ,(assoc-get 'one CENTRAL-COLUMN-HOLE-PLACEMENTS))
                     (stencil . ,column-circle-stencil)
                     (text? . #f)
                     (complexity . trill)))
                 (two
                  . ((offset . ,(assoc-get 'two CENTRAL-COLUMN-HOLE-PLACEMENTS))
                     (stencil . ,column-circle-stencil)
                     (text? . #f)
                     (complexity . trill)))
                 (three
                  . ((offset . ,(assoc-get 'three CENTRAL-COLUMN-HOLE-PLACEMENTS))
                     (stencil . ,column-circle-stencil)
                     (text? . #f)
                     (complexity . trill)))
                 (four
                  . ((offset . ,(assoc-get 'four CENTRAL-COLUMN-HOLE-PLACEMENTS))
                     (stencil . ,column-circle-stencil)
                     (text? . #f)
                     (complexity . trill)))
                 (five
                  . ((offset . ,(assoc-get 'five CENTRAL-COLUMN-HOLE-PLACEMENTS))
                     (stencil . ,column-circle-stencil)
                     (text? . #f)
                     (complexity . trill)))))
             (left-hand 
              . ((T
                  . ((offset . (0.0 . 0.0))
                     (stencil . ,saxophone-lh-T-key-stencil)
                     (text? . ("T" . #f))
                     (complexity . covered)))))
             (right-hand 
              . ((r3B
                  . ((offset . (-0.3 . 1.15))
                     (stencil . ,recorder-rh-B-key-stencil)
                     (text? . ("6-" . #f))
                     (complexity . trill)))
                 (r3L
                  . ((offset . (0.5 . 0.8))
                     (stencil . ,recorder-rh-L-key-stencil)
                     (text? . ("6" . #f))
                     (complexity . trill)))
                 (r4B
                  . ((offset . (-0.3 . 0.15))
                     (stencil . ,recorder-rh-B-key-stencil)
                     (text? . ("7-" . #f))
                     (complexity . trill)))
                 (r4L
                  . ((offset . (0.5 . -0.2))
                     (stencil . ,recorder-rh-L-key-stencil)
                     (text? . ("7" . #f))
                     (complexity . trill)))))))
         (graphical-commands
          . ((stencil-alist
              . ((stencils
                  . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
                     ((stencils
                       . ,(make-hidden-key-addresses '(r3 r4)))
                          (xy-scale-function . (,identity . ,identity))
                          (textual? . #f)
                          (offset . (0.0 . 0.0)))
                     ((stencils
                       . ,(make-central-column-hole-addresses
                            (remove-last CENTRAL-COLUMN-HOLE-LIST)))
                          (xy-scale-function . (,identity . ,identity))
                          (textual? . #f)
                          (offset . (0.0 . 0.0)))
                     ,(simple-stencil-alist '(left-hand . T) '(-2.2 . 7))
                     ((stencils
                       . ,(make-right-hand-key-addresses '(r3B r3L r4B r4L)))
                          (xy-scale-function . (,identity . ,identity))
                          (textual? . #f)
                          (offset . (0.0 . 0.0)))))
                 (xy-scale-function . (,identity . ,identity))
                 (textual? . #f)
                 (offset . (0.0 . 0.0))))
             (draw-instructions
              . ((,group-automate-rule ((left-hand . T)))
                 (,group-automate-rule
                  ,(make-right-hand-key-addresses '(r3B r3L r4B r4L)))
                 (,group-automate-rule
                  ,(make-central-column-hole-addresses (remove-last CENTRAL-COLUMN-HOLE-LIST)))
                 (,group-automate-rule ((hidden . midline)))
                 (,group-automate-rule
                  ,(make-hidden-key-addresses '(r3 r4)))))             
             (extra-offset-instructions
              . (;; consider adding something in here for T, analagous to sax
                 ;;(,rich-group-extra-offset-rule
                 ;; (left-hand . T)
                 ;; ,(central-column . one) ;; this line has error...
                 ;; (0.0 . 1.0))
                 (,uniform-extra-offset-rule (0.0 . 0.0))))))
         (text-commands
          . ((stencil-alist
              . ((stencils
                  . (,(simple-stencil-alist '(hidden . midline) '(0.0 . 3.75))
                     ((stencils
                       . ,(make-hidden-key-addresses '(r3 r4)))
                          (xy-scale-function . (,identity . ,identity))
                          (textual? . #f)
                          (offset . (0.0 . 0.0)))
                     ((stencils
                       . ,(make-central-column-hole-addresses
                            (remove-last CENTRAL-COLUMN-HOLE-LIST)))
                          (xy-scale-function . (,identity . ,identity))
                          (textual? . #f)
                          (offset . (0.0 . 0.0)))
                     ,(simple-stencil-alist '(left-hand . T) '(-2.2 . 7)) ;; consider lh-woodwind-text-stencil
                     ((stencils
                       . ,(make-right-hand-key-addresses '(r3B r3L r4B r4L))) ;; consider rh-woodwind-text-stencil
                          (xy-scale-function . (,identity . ,identity))
                          (textual? . #f)
                          (offset . (0.0 . 0.0)))))              
                 (xy-scale-function . (,identity . ,identity))
                 (textual? . #f)
                 (offset . (0.0 . 0.0))))
             (draw-instructions
              . ((,group-automate-rule ((left-hand . T)))
                 (,group-automate-rule
                  ,(make-right-hand-key-addresses '(r3B r3L r4B r4L)))
                 (,group-automate-rule
                  ,(make-central-column-hole-addresses (remove-last CENTRAL-COLUMN-HOLE-LIST)))
                 (,group-automate-rule ((hidden . midline)))
                 (,group-automate-rule
                  ,(make-hidden-key-addresses '(r3 r4)))))
             (extra-offset-instructions
              . ((,uniform-extra-offset-rule (0.0 . 0.0))))))))))
\version "2.16.2"

% \include "recorder.scm"

#(print-keys-verbose 'recorder)
% #(print-keys-verbose 'tin-whistle)

\relative c' {
  c1^
  \markup {
    \woodwind-diagram #'recorder #'((lh . (T1h))
                                    (cc . (one three))
                                    (rh . (r3B r3L r4B)))
  }

  c1^
  \markup {
    \woodwind-diagram #'recorder #'((lh . ())
                                    (cc . ())
                                    (rh . ()))
  }

  c1^
  \markup {
    \woodwind-diagram #'recorder #'()
  }

%  c^
%  \markup \override #'(graphical . #f) {
%      \woodwind-diagram
%        #'piccolo
%        #'()
%  }

  c1^
  \markup {
    \woodwind-diagram #'flute #'((cc . (two1h))
                                 (lh . ())
                                 (rh . ()))
  }

  c1^
  \markup {
    \woodwind-diagram #'flute #'((cc . (two1hT))
                                 (lh . ())
                                 (rh . ()))
  }

  c1^
  \markup \override #'(graphical . #f) {
    \woodwind-diagram #'recorder #'((lh . (T))
                                    (cc . (one three))
                                    (rh . (r3B r3L r4B)))
  }

  c1^
  \markup \override #'(graphical . #f) {
    \woodwind-diagram #'recorder #'((lh . ())
                                    (cc . ())
                                    (rh . ()))
  }

  c1^
  \markup \override #'(graphical . #f) {
    \woodwind-diagram #'recorder #'()
  }

}
_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to