]> git.donarmstrong.com Git - lilypond.git/commitdiff
*** empty log message ***
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 25 Oct 2006 13:14:28 +0000 (13:14 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 25 Oct 2006 13:14:28 +0000 (13:14 +0000)
ChangeLog
scm/define-context-properties.scm
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/fret-diagrams.scm
scm/output-lib.scm
scm/translation-functions.scm

index 7f0a443adfbaffbf2a7cb79cb649c8a65b2e9257..5924fa2698335e0ddbdb43f2c6abf540e75c09ef 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,27 @@
+2006-10-25  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * scm/define-grobs.scm (all-grob-descriptions): FretBoard: use
+       fret-diagram-interface (WAS: fret-board-interface).  Fixes build.
+
+2006-10-23  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * flower/file-name.cc (dos_to_posix): Help std::string.copy with
+       trailing zero.
+
+       * GNUmakefile.in ($(tree-share-prefix)/mf-link-tree link-mf-tree):
+       Remove bashism in delete.
+
 2006-10-25  Han-Wen Nienhuys  <hanwen@lilypond.org>
 
+       * scm/define-grobs.scm (all-grob-descriptions): set finger-code.
+
+       * scm/translation-functions.scm (determine-frets-mf): flatten let*
+
+       * scm/define-context-properties.scm
+       (all-user-translation-properties): add maximumFretStretch property.
+
+       * scm/translation-functions.scm (tunings): read and use maximumFretStretch.
+
        * lily/source-file.cc (get_counts): use multibyte variable.
 
        * scm/translation-functions.scm (determine-frets-mf): new
index b0c85c24aec9da6e24657b636e7f99ccd6ee3d62..51f3c95b6f0b141e76c2edac76842f3d9a2bf887 100644 (file)
@@ -312,6 +312,7 @@ markup.  Called with 2 arguments, event and context.")
      (midiMaximumVolume ,number? "Analogous to @code{midiMinimumVolume}.")
      (minimumFret ,number? "The tablature auto string-selecting mechanism
 selects the highest string with a fret at least @code{minimumFret}")
+     (maximumFretStretch ,number? "Don't allocate frets further than this from specified frets.")
      (minimumPageTurnLength ,ly:moment? "Minimum length of a rest for a page turn to be allowed")
      (minimumRepeatLengthForPageTurn ,ly:moment? "Minimum length of a repeated section for a page
 turn to be allowed within that section")
index c084ea855d670cf773197d3213773e8bcb397ee6..a9f3c994d231a460a288f706b0ed2a0cb67f79f2 100644 (file)
@@ -390,6 +390,7 @@ object.")
      (size ,number? "Size of object, relative to standard size.")
      (slope ,number? "The slope of this object.")
      (slur-padding ,number? "Extra distance between slur and script.")
+     (string-fret-finger-combinations ,list? "List consisting of (string-number fret-number finger-number) entries." )
      (space-alist ,list? "A table that specifies distances between
 prefatory items, like clef and time-signature. The format is an alist
 of spacing tuples: @code{(@var{break-align-symbol} @var{type}
index 1b640cbde024a1972c45c21f445cb7ec8b9a29e5..ea47bee0f00df6626f0a27dfa1f3abd0dc113ba2 100644 (file)
                                item-interface))))))
     (FretBoard
      . ((stencil . ,fret-board::calc-stencil)
+       (finger-code . below-string)
        (meta . ((class . Item)
-                (interfaces . (fret-board-interface
+                (interfaces . (fret-diagram-interface
                                font-interface
                                ))))
              ))
index 1558e3433d42641047cdbc450bd7285ba62271bc..2792ef7956197d0d3dcb5bf2518fe5f81944ad47 100644 (file)
@@ -21,7 +21,8 @@
                      ((eq? my-code 'place-fret)
                         (set! dot-list (cons* (cdr my-item) dot-list))))
                  (parse-item (cdr mylist)))))
-               ; calculate fret-range
+      
+      ;; calculate fret-range
                (let ((maxfret 0) (minfret 99))
                     (let updatemax ((fret-list dot-list))
                         (if (null?  fret-list)
@@ -40,7 +41,9 @@
                (acons 'barre-list barre-list
                (acons 'dot-list dot-list
                (acons 'xo-list xo-list '()))))))
-   
+
+
+
 (define (subtract-base-fret base-fret dot-list)
 "Subtract @var{base-fret} from every fret in @var{dot-list}"  
   (if (null? dot-list)
@@ -133,6 +136,7 @@ Line thickness is given by @var{th}, fret & string spacing by
 (define (draw-dots layout props string-count fret-range size finger-code 
                     dot-position dot-radius dot-thickness dot-list)
   "Make dots for fret diagram."
+
   (let* ((scale-dot-radius (* size dot-radius))
          (scale-dot-thick (* size dot-thickness))
          (dot-color (chain-assoc-get 'dot-color props 'black))
@@ -326,6 +330,9 @@ changed by setting the value of the variable @var{dot-color}.  If the
 variable @var{finger-code}.  There is no limit to the number of fret
 indications per string.
 
+
+
+
 @end table
 "
    (make-fret-diagram layout props marking-list))
index 07784a687a776fc46ba4382b4e5d50b26a9f5977..3528dcb989be8423c42e4e9004f3e05731a271f6 100644 (file)
@@ -473,15 +473,22 @@ centered, X==1 is at the right, X == -1 is at the left."
        (for-each (lambda (sf)
                   (let*
                       ((string (car sf))
-                       (fret (cdr sf)))
+                       (fret (cadr sf))
+                       (finger (caddr sf)))
 
 
                     (vector-set! desc (1- string)
                                  (if (= 0 fret)
                                      (list 'open string)
-                                     (list 'place-fret string fret)))
+                                     (if finger
+                                         (list 'place-fret string fret finger) 
+                                         (list 'place-fret string fret))
+                                         
+
+                                     ))
                     ))
                 string-frets)
+
        (vector->list desc)))
 
 (define-public (fret-board::calc-stencil grob)
index ff01c075824c009a66a5d157620f5ce01317a96f..0eab4fe5dea74b27df27eadd649e5b1a42551a80 100644 (file)
       ((tunings (ly:context-property context 'stringTunings))
        (minimum-fret (ensure-number
                      (ly:context-property context 'minimumFret) 0))
+       (max-stretch (ensure-number
+                     (ly:context-property context 'maximumFretStretch) 4))
        (string-frets (determine-frets-mf notes string-numbers
-                                        minimum-fret
+                                        minimum-fret max-stretch
                                         tunings)))
 
                      
   (set! (ly:grob-property grob 'string-count) (length tunings))
-  (set! (ly:grob-property grob 'string-frets) string-frets)
+  (set! (ly:grob-property grob 'string-fret-finger-combinations) string-frets)
 
   ))
 
 (define-public (determine-frets-mf notes string-numbers
-                                  minimum-fret
+                                  minimum-fret max-stretch
                                   tunings)
 
   (define (calc-fret pitch string tuning)
   (define (note-pitch<? a b)
     (ly:pitch<? (note-pitch a)
                (note-pitch b)))
+
+  (define (note-finger ev)
+    (let* ((articulations (ly:event-property ev 'articulations))
+          (finger-found #f))
+
+      (map (lambda (art)
+            (let*
+                ((num (ly:event-property art 'digit)))
+
+              (if (and (eq? 'fingering-event (ly:event-property art 'class))
+                       (number? num))
+                  (set! finger-found num))))
+          articulations)
+
+      finger-found))
   
-  (define (note-ev-string ev)
+  (define (note-string ev)
     (let* ((articulations (ly:event-property ev 'articulations))
           (string-found #f))
 
               (if (number? num)
                   (set! string-found num))))
           articulations)
+
       string-found))
 
-  (let*
-      ((free-strings (map 1+ (iota (length tunings))))
-       (del-string (lambda (string)
-                    (if (number? string)
-                        (set! free-strings
-                              (delete string free-strings)))))
-       (string-qualifies (lambda (string pitch)
-                          (and (>= (calc-fret pitch string tunings)
-                                   minimum-fret))))
-       (string-frets '())
-       (set-fret (lambda (note string)
-                  (set! string-frets
-                       (acons string
-                              (calc-fret (ly:event-property note 'pitch)
-                                         string tunings)
-                              string-frets))
-                  (del-string string)
-                  ))
+  (define (del-string string)
+                     (if (number? string)
+                         (set! free-strings
+                               (delete string free-strings))))
+  (define specified-frets '())
+  (define free-strings '())
+  
+  (define (close-enough fret)
+                      (reduce
+                       (lambda (x y)
+                         (and x y))
+                       #t
+                       (map (lambda (specced-fret)
+                              (> max-stretch (abs (- fret specced-fret))))
+                            specified-frets)
+                       ))
+  
+  (define (string-qualifies string pitch)
+    (let*
+       ((fret (calc-fret pitch string tunings)))
+        
+        (and (>= fret minimum-fret)
+             (close-enough fret))
+        
+        ))
+                          
+  (define string-fret-fingering-tuples '())
+  (define (set-fret note string)
+                   (set! string-fret-fingering-tuples
+                         (cons (list string
+                                     (calc-fret (ly:event-property note 'pitch)
+                                                string tunings)
+                                     (note-finger note))
+                               string-fret-fingering-tuples))
+                   (del-string string))
        
 
-       )
-    
-    (for-each (lambda (note)
-               (del-string (note-ev-string note)))
-             notes)
-
-
-    (for-each
-     (lambda (note)
-       (if (note-ev-string note)
-          (set-fret note (note-ev-string note))
-          (let*
-              ((string (find (lambda (string) (string-qualifies string
-                                                                (note-pitch note)))
-                             (reverse free-strings))))
+  ;;; body.
 
-               (set-fret note string))))
-     (sort notes note-pitch<?))
+  (set! specified-frets
+       (filter identity (map
+                     (lambda (note)
+                       (if (note-string note)
+                           (calc-fret (note-pitch note)
+                                      (note-string note) tunings)
+                           #f))
+                     notes)))
+  (set! free-strings (map 1+ (iota (length tunings))))
 
+  
     
-    (display string-frets)
-
+  (for-each (lambda (note)
+             (del-string (note-string note)))
+           notes)
+  
+  
+  (for-each
+   (lambda (note)
+     (if (note-string note)
+        (set-fret note (note-string note))
+        (let*
+            ((string (find (lambda (string) (string-qualifies string
+                                                              (note-pitch note)))
+                             (reverse free-strings))))
+          (if string
+              (set-fret note string)
+              (ly:warning "No string for pitch ~a (given frets ~a)" (note-pitch note)
+                          specified-frets))
+                          
+              )))
+   (sort notes note-pitch<?))
+  
+  
 
-    string-frets))
-                         
+    string-fret-fingering-tuples)