[fomus-cvs] CVS update: fomus/TODO fomus/backend_mid.lisp fomus/misc.lisp fomus/test.lisp

David Psenicka dpsenicka at common-lisp.net
Sat Oct 1 17:28:31 UTC 2005


Update of /project/fomus/cvsroot/fomus
In directory common-lisp.net:/tmp/cvs-serv5066

Modified Files:
	TODO backend_mid.lisp misc.lisp test.lisp 
Log Message:
bug fixes
Date: Sat Oct  1 19:28:30 2005
Author: dpsenicka

Index: fomus/TODO
diff -u fomus/TODO:1.22 fomus/TODO:1.23
--- fomus/TODO:1.22	Sat Oct  1 02:49:45 2005
+++ fomus/TODO	Sat Oct  1 19:28:29 2005
@@ -4,6 +4,7 @@
 
     Bugs:
       Quantizing nested tuplets--occasional hangups
+      Hide accidental internal mark
     accidentals for trills and related figures (or just a note/step argument for MIDI playback)
     Doc: list-instr-syms
     Doc: CM MIDI backend


Index: fomus/backend_mid.lisp
diff -u fomus/backend_mid.lisp:1.1 fomus/backend_mid.lisp:1.2
--- fomus/backend_mid.lisp:1.1	Sat Oct  1 02:49:45 2005
+++ fomus/backend_mid.lisp	Sat Oct  1 19:28:29 2005
@@ -33,7 +33,7 @@
 				(< (midi-note x) (midi-note y))))
 			   ((midi-note x) t))
 		     (< (midi-dur x) (midi-dur y))))
-		((typep x *cm-midi*) t))
+		((typep y *cm-midi*) t))
 	  (< (midi-ch x) (midi-ch y)))
       (< (midi-off x) (midi-off y))))
 
@@ -216,7 +216,7 @@
 			    (gracedur *gracedur*) (minamp *minamp*) (trdursecs *trdursecs*) (tramp *tramp*)
 			    (fermatamults *fermatamults*) (breathdur *breathdur*) (tempo *tempo*)
 			    (staccatomult *staccatomult*) (staccatissimomult *staccatissimomult*) (tenutoadddur *tenutoadddur*)
-			    (trovlpadddur *trovlpadddur*) (mindursecs *mindursecs*) &allow-other-keys) options
+			    (trovlpadddur *trovlpadddur*) (mindursecs *mindursecs*) delay &allow-other-keys) options
     (when (typep play 'boolean) (setf nports 1))
     (let* ((*gracedur* gracedur)
 	   (*minamp* minamp)
@@ -327,12 +327,13 @@
 																	    (car i))
 																     :test #'equal))
 											    else collect
-											    (let ((i (make-instance *cm-midi* :channel ch :time of :duration du
-														    :keynum (if (and *transpose* (instr-tpose in))
-																(+ (instr-tpose in) n) n)
-														    :amplitude midi-vel)))
+											    (let ((i (cons (midi-marks ev bot top ex)
+													   (make-instance *cm-midi* :channel ch :time of :duration du
+															  :keynum (if (and *transpose* (instr-tpose in))
+																      (+ (instr-tpose in) n) n)
+															  :amplitude midi-vel))))
 											      (when tr (push i ts))
-											      (cons (midi-marks ev bot top ex) i)))
+											      i))
 										      (list (cons (midi-marks ev t t ex)
 												  (make-instance *cm-midi* :channel ch :time of :duration du
 														 :keynum nil
@@ -378,10 +379,10 @@
 			    (when (list>1p cs)
 			      (let ((ll (remove-if (lambda (e) (integerp (midi-note e))) es)))
 				(mapc (lambda (x) (setf (midi-note* x) (floor x) (midi-ch* x) (second cs))) ll)
-				(push (make-instance *cm-midipbend* :time 0 :channel (second cs) :bend (* pbendwidth 1024)) xta))))
+				(push (make-instance *cm-midipbend* :time 0 :channel (second cs) :bend (roundint (/ 2048 pbendwidth))) xta))))
 			  es)
 			finally (loop for e in (nreverse (delete-duplicates el :test #'string=)) do (format t e))))))
-      (let ((o (floor (loop for e in evs minimize (midi-off e))))) (when (minusp o) (push (cons o (- o)) adj)))
+      (let ((o (floor (loop for e in evs do (incf (midi-off* e) delay) minimize (midi-off e))))) (when (minusp o) (push (cons o (- o)) adj)))
       (loop for (o . a) in (merge-linear (sort adj #'> :key #'car) (lambda (x y) (when (= (car x) (car y)) (cons (car x) (max (cdr x) (cdr y))))))
 	    do (mapc (lambda (x) (when (if (typep x *cm-midi*) (> (midi-endoff x) o) (>= (midi-off x) o))
 				   (if (>= (midi-off x) o) (incf (midi-off* x) a) (incf (midi-dur* x) a))))
@@ -393,6 +394,7 @@
 		  (setf (midi-vel* x) (min (max (coerce (midi-vel x) 'single-float) 0.0) 1.0)
 			(midi-dur* x) (max (midi-dur x) md))))
 	      evs))
+      (setf xta (loop for e in (split-into-groups xta #'type-of) nconc (delete-duplicates e :key #'midi-ch)))
       (if (typep play 'boolean)
-	  (apply *cm-events* (nconc xta evs) filename :tempo tempo :play play cmargs)
+	  (apply *cm-events* (print (nconc xta evs)) filename :tempo tempo :play play cmargs)
 	  (apply *cm-rts* (nconc xta evs) play :tempo tempo cmargs)))))


Index: fomus/misc.lisp
diff -u fomus/misc.lisp:1.10 fomus/misc.lisp:1.11
--- fomus/misc.lisp:1.10	Sat Oct  1 02:49:45 2005
+++ fomus/misc.lisp	Sat Oct  1 19:28:29 2005
@@ -32,7 +32,7 @@
   (car (last list)))
 
 (set-dispatch-macro-character
- #\# #\I
+ #\# #\Z
  (lambda (s c n)
    (declare (type stream s) (ignore c n))
    (let ((r (read s t nil t)))
@@ -41,7 +41,7 @@
 (defmacro defprint (class &rest slots)
   `(defmethod print-object ((x ,class) s)
     (declare (type stream s))
-    (princ "#I" s)
+    (princ "#Z" s)
     (prin1 ,(nconc (list 'list (list 'quote class))
 		   (loop
 		      for i in slots


Index: fomus/test.lisp
diff -u fomus/test.lisp:1.16 fomus/test.lisp:1.17
--- fomus/test.lisp:1.16	Sat Oct  1 02:49:45 2005
+++ fomus/test.lisp	Sat Oct  1 19:28:29 2005
@@ -5,7 +5,7 @@
 ;; Example 1
 
 (fomus
- :backend '((:data) (:lilypond :view t))
+ :backend '((:data) (:lilypond :view t) (:midi :play t :tempo 120 :delay 10))
  :ensemble-type :orchestra
  :parts
  (list
@@ -24,7 +24,7 @@
 ;; Example 2
 
 (fomus
- :backend '((:data) (:lilypond :view t))
+ :backend '((:data) (:lilypond :view t) (:midi :play t :tempo 120 :delay 10))
  :ensemble-type :orchestra
  :default-beat 1/4
  :global (list (make-timesig :off 0 :time '(3 4))




More information about the Fomus-cvs mailing list