changeset 12:f6c08ad94c8a

Updated class structure darcs-hash:20061205123526-f76cc-2112d3e005b124983905d50fb07f5833b10d215c.gz
author David Lewis <d.lewis@gold.ac.uk>
date Tue, 05 Dec 2006 12:35:26 +0000
parents 9f05ce23e71e
children ccb65e2f7382
files classes.lisp generics.lisp
diffstat 2 files changed, 49 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/classes.lisp	Wed Nov 29 12:22:29 2006 +0000
+++ b/classes.lisp	Tue Dec 05 12:35:26 2006 +0000
@@ -1,38 +1,41 @@
 (cl:in-package #:amuse) 
 
-;; basic musical object classes
+;; collections of more than one event
 
-(defclass composition ()
-  ())
+(defclass constituent () ())
+(defclass composition (constituent) ())
+(defclass monody (constituent) ())
 
-(defclass event ()
-  ())
+;; types of information-specifiers
 
-(defclass pitched-event (event)
-  ())
+(defclass moment-designator () ())
+(defclass time-interval-designator () ())
+(defclass anchored-time-interval-designator (moment-designator time-interval-designator) ())
+(defclass pitch-designator () ())
+(defclass pitch-interval-designator () ())
+
+;; time-related classes
+
+(defclass moment (moment-designator) ())
+(defclass time-interval (time-interval-designator) ())
+(defclass floating-time-interval (time-interval) ())
+(defclass anchored-time-interval (time-interval anchored-time-interval-designator) ())
 
 ;; pitch-related classes
 
-(defclass pitch ()
+(defclass pitch (pitch-designator) ())
+(defclass chromatic-pitch (pitch) ())
+(defclass diatonic-pitch (pitch) ())
+(defclass frequency (pitch)
+ ;; I'm having serious doubts about this - frequency, `real'-time and
+ ;; other non- or partially symbolic elements will probably want to be
+ ;; expressed differently.
   ())
 
-(defclass chromatic-pitch (pitch)
-  ())
+(defclass pitch-interval (pitch-interval-designator) ())
 
-(defclass diatonic-pitch (pitch)
-  ())
+;; events
 
-(defclass frequency (pitch)
-  ())
-
-(defclass interval ()
-  ())
-
-;; time-related classes
-
-(defclass moment ()
-  ())
-
-(defclass duration ()
-  ())
-
+(defclass event (anchored-time-interval-designator) ())
+(defclass pitched-event (event pitch-designator) ())
+(defclass percussive-event (event) ())
\ No newline at end of file
--- a/generics.lisp	Wed Nov 29 12:22:29 2006 +0000
+++ b/generics.lisp	Tue Dec 05 12:35:26 2006 +0000
@@ -6,15 +6,15 @@
 
 ;;; Accessors (do we need the get- prefix?) 
 
-(defgeneric get-pitch (object &key kind)) ; ? 
-(defgeneric get-chromatic-pitch (object))
-(defgeneric get-diatonic-pitch (object))
-(defgeneric get-frequency (object))
+(defgeneric get-pitch (object &key kind)) ; ?
+(defgeneric get-chromatic-pitch (pitch-designator))
+(defgeneric get-diatonic-pitch (pitch-designator))
+(defgeneric get-frequency (object)) ;?
 
-(defgeneric get-duration (object))
-
-(defgeneric get-onset (object)) ; get-time? 
-
+(defgeneric get-duration (time-interval-designator))
+(defgeneric get-time (moment-designator))
+(defgeneric get-onset (moment-designator)
+  (:method (m-d) (get-time m-d)))
 
 ;;; Time Protocol (or moments?)
 
@@ -44,7 +44,6 @@
 (defgeneric time/= (object1 object2)
   (:method (o1 o2) (not (time= o1 o2))))
 
-
 ;;; Duration protocol 
 
 (defgeneric duration> (object1 object2))
@@ -58,6 +57,9 @@
 (defgeneric duration/= (object1 object2) 
   (:method (o1 o2) (not (duration= o1 o2))))
 
+;; for linear scaling:
+(defgeneric duration* (object1 object2))
+(defgeneric duration/ (object1 number))
 
 ;;; Pitch protocol 
 
@@ -119,6 +121,14 @@
   (:method (o1 o2) 
     (or (before o1 o2) (meets o1 o2) (meets o2 o1) (before o2 o1))))
 
+;; Another time-based function, returning the anchored-time-interval
+;; representing the intersection of two
+;; anchored-time-interval-specifiers.
+(defgeneric intersection (anchored-time-interval-specifier1
+			  anchored-time-interval-specifier2))
+
+
+
 
 ;;; Time Signature 
 ;;; Tempo 
@@ -126,3 +136,4 @@
 ;;; Dynamics 
 ;;; Voice 
 ;;; Boundary Strength (phrasing) 
+