# HG changeset patch # User Marcus Pearce # Date 1185199611 -3600 # Node ID 0b4c624910f1ab8a31aeed5fa25e72b0232b86fb # Parent 8ea75cc8bc2ca4e7dafa8e0cd8be9ef76918a33b base/: basic protocol for accessing monodies darcs-hash:20070723140651-c0ce4-2c828ea984eb92f0ccb73866a6a496131c8fa736.gz diff -r 8ea75cc8bc2c -r 0b4c624910f1 base/classes.lisp --- a/base/classes.lisp Fri Jul 20 17:12:42 2007 +0100 +++ b/base/classes.lisp Mon Jul 23 15:06:51 2007 +0100 @@ -8,7 +8,7 @@ ;; sequences. ()) (defclass composition (time-ordered-constituent) ()) -(defclass monody (time-ordered-constituent) ()) +(defclass monody (composition) ()) ;; types of information-specifiers diff -r 8ea75cc8bc2c -r 0b4c624910f1 base/generics.lisp --- a/base/generics.lisp Fri Jul 20 17:12:42 2007 +0100 +++ b/base/generics.lisp Mon Jul 23 15:06:51 2007 +0100 @@ -4,6 +4,11 @@ (defgeneric get-composition (identifier)) +(defgeneric monody (object) + (:documentation "Returns a monody.")) +(defgeneric ensure-monody (object) + (:documentation "Returns a generalised boolean.")) + ;;; Getting constituents from compositions ;; IS this the mechanism we want to use (defgeneric time-signatures (composition) diff -r 8ea75cc8bc2c -r 0b4c624910f1 base/methods.lisp --- a/base/methods.lisp Fri Jul 20 17:12:42 2007 +0100 +++ b/base/methods.lisp Mon Jul 23 15:06:51 2007 +0100 @@ -1,5 +1,17 @@ (cl:in-package #:amuse) +;;; monody + +(defmethod ensure-monody ((m monody)) + (let ((result t)) + (dotimes (i (1- (length m)) result) + ;; assumes the events are time ordered which (since monody is a + ;; subclass of time-ordered-constituent) they ought to be. + (let ((e1 (elt m i)) + (e2 (elt m (1+ i)))) + (unless (or (before e1 e2) (meets e1 e2)) + (setf result nil)))))) + ;;; diatonic pitch (defmethod octave ((dp diatonic-pitch)) diff -r 8ea75cc8bc2c -r 0b4c624910f1 base/package.lisp --- a/base/package.lisp Fri Jul 20 17:12:42 2007 +0100 +++ b/base/package.lisp Mon Jul 23 15:06:51 2007 +0100 @@ -120,4 +120,5 @@ #:make-mips-pitch #:octave #:diatonic-pitch-accidental + #:ensure-monody ))