# HG changeset patch # User d.lewis # Date 1195493507 0 # Node ID edf2322ea33f38ec8c49cb1790d43245ee8d5a0e # Parent 74fc4c6cbf6cfa8d5dc50e451bdf8afabafc85fe Added copy key and time sigs and tempo. Need to do general version. Only midi-type currently darcs-hash:20071119173147-40ec0-779ffe4dc4bbc356cc6decf6d0f50cb42f943b83.gz diff -r 74fc4c6cbf6c -r edf2322ea33f implementations/geerdes/constructors.lisp --- a/implementations/geerdes/constructors.lisp Wed Nov 14 15:36:11 2007 +0000 +++ b/implementations/geerdes/constructors.lisp Mon Nov 19 17:31:47 2007 +0000 @@ -172,6 +172,7 @@ ;; We want any function that generates a sequence from a geerdes ;; composition to preserve all slot values: +#+nil (defmethod sequence:make-sequence-like :around ((o geerdes-composition) length &key (initial-element nil iep) diff -r 74fc4c6cbf6c -r edf2322ea33f implementations/midi/methods.lisp --- a/implementations/midi/methods.lisp Wed Nov 14 15:36:11 2007 +0000 +++ b/implementations/midi/methods.lisp Mon Nov 19 17:31:47 2007 +0000 @@ -68,10 +68,41 @@ :velocity velocity :patch patch :sound sound))) +(defgeneric copy-time-signature (time-signature)) +(defmethod copy-time-signature ((time-signature standard-time-signature)) + (make-instance (class-of time-signature) + :numerator (time-signature-numerator time-signature) + :denominator (time-signature-denominator time-signature))) +(defmethod copy-time-signature ((time-signature-period standard-time-signature-period)) + (let ((sig (call-next-method))) + (setf (timepoint sig) (timepoint time-signature-period) + (duration sig) (duration time-signature-period)) + sig)) +(defgeneric copy-tempo (tempo)) +(defmethod copy-tempo ((tempo standard-tempo)) + (make-instance (class-of tempo) + :bpm (bpm tempo))) +(defmethod copy-tempo ((tempo-period standard-tempo-period)) + (let ((tp (call-next-method))) + (setf (timepoint tp) (timepoint tempo-period) + (duration tp) (duration tempo-period)) + tp)) +(defgeneric copy-key-signature (key-signature)) +(defmethod copy-key-signature ((key-signature standard-key-signature)) + (make-instance (class-of key-signature) + :sharp-count (key-signature-sharps key-signature) + :mode (key-signature-mode key-signature))) +(defmethod copy-key-signature ((key-signature-period standard-key-signature-period)) + (let ((sig (call-next-method))) + (setf (timepoint sig) (timepoint key-signature-period) + (duration sig) (duration key-signature-period)) + sig)) + ;; Allow derived sequences from remove-if, etc. to preserve other slot ;; info (timesigs, etc) +#+nil (defmethod sequence:make-sequence-like :around ((o midi-composition) length &key (initial-element nil iep) (initial-contents nil icp))