# HG changeset patch # User Marcus Pearce # Date 1183714348 -3600 # Node ID 8b31d54c95beac9a53367cb8ad1d62d0fc13f2fc # Parent 6c8fd815603e05d1f7174d60ab8fe4b781ad33e0 base/: {TIME-SIGNATURE,KEY-SIGNATURE,TEMPO}-EQUAL moved here from implementations/mtp/ darcs-hash:20070706093228-c0ce4-9ca0951f98303474fb5da95fc20ebdb2c3fa4db0.gz diff -r 6c8fd815603e -r 8b31d54c95be base/generics.lisp --- a/base/generics.lisp Wed Jul 04 12:00:15 2007 +0100 +++ b/base/generics.lisp Fri Jul 06 10:32:28 2007 +0100 @@ -221,15 +221,21 @@ (defgeneric get-applicable-time-signatures (anchored-period composition) (:method (ap c) (find-overlapping ap (time-signatures c)))) +(defgeneric time-signature-equal (ts1 ts2)) + ;;; Tempo (defgeneric get-applicable-tempi (anchored-period composition) (:method (ap c) (find-overlapping ap (tempi c)))) +(defgeneric tempo-equal (t1 t2)) + ;;; Tonality (Key Signature / Mode) (defgeneric get-applicable-key-signatures (object1 object2)) +(defgeneric key-signature-equal (ks1 ks2)) + ;;; Dynamics ;;; Voice ;;; Boundary Strength (phrasing) diff -r 6c8fd815603e -r 8b31d54c95be base/methods.lisp --- a/base/methods.lisp Wed Jul 04 12:00:15 2007 +0100 +++ b/base/methods.lisp Fri Jul 06 10:32:28 2007 +0100 @@ -30,15 +30,43 @@ (defmethod beat-units ((time-signature basic-time-signature)) (%basic-time-signature-denominator time-signature)) +(defmethod time-signature-equal ((ts1 basic-time-signature) + (ts2 basic-time-signature)) + (let ((n1 (time-signature-numerator ts1)) + (n2 (time-signature-numerator ts2)) + (d1 (time-signature-denominator ts1)) + (d2 (time-signature-denominator ts2))) + (and n1 n2 (= n1 n2) + d1 d2 (= d1 d2)))) + (defmethod key-signature-sharps ((key-signature basic-key-signature)) (%basic-key-signature-sharp-count key-signature)) (defmethod key-signature-mode ((ks midi-key-signature)) (%midi-key-signature-mode ks)) +(defmethod key-signature-equal ((ks1 basic-key-signature) + (ks2 basic-key-signature)) + (let ((s1 (key-signature-sharps ks1)) + (s2 (key-signature-sharps ks2))) + (and s1 s2 (= s1 s2)))) + +(defmethod key-signature-equal ((ks1 midi-key-signature) + (ks2 midi-key-signature)) + (let ((s1 (key-signature-sharps ks1)) + (s2 (key-signature-sharps ks2)) + (m1 (key-signature-mode ks1)) + (m2 (key-signature-mode ks2))) + (and s1 s2 (= s1 s2) + m1 m2 (= m1 m2)))) + (defmethod bpm ((tempo tempo)) (%tempo-bpm tempo)) +(defmethod tempo-equal ((t1 tempo) (t2 tempo)) + (and (bpm t1) (bpm t2) (= t1 t2))) + + ;; Time protocol (defmethod time+ ((object1 moment) (object2 period)) diff -r 6c8fd815603e -r 8b31d54c95be base/package.lisp --- a/base/package.lisp Wed Jul 04 12:00:15 2007 +0100 +++ b/base/package.lisp Fri Jul 06 10:32:28 2007 +0100 @@ -109,4 +109,7 @@ #:make-basic-key-signature #:make-midi-key-signature #:make-tempo + #:time-signature-equal + #:key-signature-equal + #:tempo-equal )) diff -r 6c8fd815603e -r 8b31d54c95be implementations/mtp/methods.lisp --- a/implementations/mtp/methods.lisp Wed Jul 04 12:00:15 2007 +0100 +++ b/implementations/mtp/methods.lisp Fri Jul 06 10:32:28 2007 +0100 @@ -90,16 +90,6 @@ ;;; Constituents from compositions: time-signatures -(defgeneric time-signature-equal (ts1 ts2)) -(defmethod time-signature-equal ((ts1 basic-time-signature) - (ts2 basic-time-signature)) - (let ((n1 (time-signature-numerator ts1)) - (n2 (time-signature-numerator ts2)) - (d1 (time-signature-denominator ts1)) - (d2 (time-signature-denominator ts2))) - (and n1 n2 (= n1 n2) - d1 d2 (= d1 d2)))) - (defgeneric time-signature (event)) (defmethod time-signature ((e mtp-event)) (let ((pulses (%mtp-pulses e)) @@ -141,16 +131,6 @@ ;;; Constituents from compositions: key-signatures -(defgeneric key-signature-equal (ks1 ks2)) -(defmethod key-signature-equal ((ks1 midi-key-signature) - (ks2 midi-key-signature)) - (let ((s1 (key-signature-sharps ks1)) - (s2 (key-signature-sharps ks2)) - (m1 (key-signature-mode ks1)) - (m2 (key-signature-mode ks2))) - (and s1 s2 (= s1 s2) - m1 m2 (= m1 m2)))) - (defgeneric key-signature (event)) (defmethod key-signature ((e mtp-event)) (let ((keysig (%mtp-keysig e))