changeset 154:edf2322ea33f

Added copy key and time sigs and tempo. Need to do general version. Only midi-type currently darcs-hash:20071119173147-40ec0-779ffe4dc4bbc356cc6decf6d0f50cb42f943b83.gz
author d.lewis <d.lewis@gold.ac.uk>
date Mon, 19 Nov 2007 17:31:47 +0000
parents 74fc4c6cbf6c
children fc6848dda767
files implementations/geerdes/constructors.lisp implementations/midi/methods.lisp
diffstat 2 files changed, 32 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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)
--- 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))