Mercurial > hg > amuse
view generics.lisp @ 10:356ee92313be
Move default methods from default-methods.lisp to generics.lisp and remove default-methods.lisp.
darcs-hash:20061113192940-aa3d6-c5c255e9aa6486b360e1ac1393910ba3c783f4b8.gz
author | m.pearce <m.pearce@gold.ac.uk> |
---|---|
date | Mon, 13 Nov 2006 19:29:40 +0000 |
parents | 22d090e96582 |
children | 9f05ce23e71e |
line wrap: on
line source
(cl:in-package #:amuse) ;;; Pulling compositions from the database (defgeneric get-composition (identifier)) ;;; 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-duration (object)) (defgeneric get-onset (object)) ; get-time? ;;; Time Protocol (or moments?) ;; negative times/durations -> ERROR? ;; time+: <time> <duration> -> <time> ;; <duration> <time> -> <time> (same as previous?) ;; <duration> <duration> -> <duration> (or a distinct duration+?) ;; <time> <time> -> ERROR? ;; ;; time-: <time> <time> -> <duration> ;; <time> <duration> -> <time> ;; <duration> <duration> -> <duration> (or a distinct duration-?) ;; <duration> <time> -> ERROR? (defgeneric time+ (object1 object2)) (defgeneric time- (object1 object2)) (defgeneric time> (object1 object2)) (defgeneric time< (object1 object2)) (defgeneric time= (object1 object2)) (defgeneric time>= (object1 object2) (:method (o1 o2) (or (time> o1 o2) (time= o1 o2)))) (defgeneric time<= (object1 object2) (:method (o1 o2) (or (time< o1 o2) (time= o1 o2)))) (defgeneric time/= (object1 object2) (:method (o1 o2) (not (time= o1 o2)))) ;;; Duration protocol (defgeneric duration> (object1 object2)) (defgeneric duration< (object1 object2)) (defgeneric duration= (object1 object2)) (defgeneric duration>= (object1 object2) (:method (o1 o2) (or (duration> o1 o2) (duration= o1 o2)))) (defgeneric duration<= (object1 object2) (:method (o1 o2) (or (duration< o1 o2) (duration= o1 o2)))) (defgeneric duration/= (object1 object2) (:method (o1 o2) (not (duration= o1 o2)))) ;;; Pitch protocol ;; pitch+: <pitch> <pitch> -> <pitch> ;; <pitch> <interval> -> <pitch> ;; <interval> <pitch> -> <pitch> (same as previous?) ;; <interval> <interval> -> <interval> (or a distinct interval+?) ;; ;; pitch-: <pitch> <pitch> -> <interval> ;; <pitch> <interval> -> <pitch> ;; <interval> <interval> -> <interval> (or a distinct interval-? ;; <interval> <pitch> -> ERROR? (defgeneric pitch+ (object1 object2)) (defgeneric pitch- (object1 object2)) (defgeneric pitch> (object1 object2)) (defgeneric pitch< (object1 object2)) (defgeneric pitch= (object1 object2)) (defgeneric pitch>= (object1 object2) (:method (o1 o2) (or (pitch> o1 o2) (pitch= o1 o2)))) (defgeneric pitch<= (object1 object2) (:method (o1 o2) (or (pitch< o1 o2) (pitch= o1 o2)))) (defgeneric pitch/= (object1 object2) (:method (o1 o2) (not (pitch= o1 o2)))) ;;; Interval protocol (emphasise _pitch_ not _time_ interval?) (defgeneric interval> (object1 object2)) (defgeneric interval< (object1 object2)) (defgeneric interval= (object1 object2)) (defgeneric interval>= (object1 object2) (:method (o1 o2) (or (interval> o1 o2) (interval= o1 o2)))) (defgeneric interval<= (object1 object2) (:method (o1 o2) (or (interval< o1 o2) (interval= o1 o2)))) (defgeneric interval/= (object1 object2) (:method (o1 o2) (not (interval= o1 o2)))) ;;; Allen's (1984) interval relations ;;; . equals already defined as INTERVAL= above ;;; . inverses ommitted for now (just use CL:NOT) ;;; . can all be defined in terms of MEETS (apparently) (defgeneric meets (object1 object2)) (defgeneric before (object1 object2)) (defgeneric overlaps (object1 object2)) (defgeneric during (object1 object2)) (defgeneric starts (object1 object2)) (defgeneric ends (object1 object2)) ;;; and extensions thereof ... (defgeneric subinterval (object1 object2) (:method (o1 o2) (or (starts o1 o2) (during o1 o2) (ends o1 o2)))) (defgeneric disjoint (object1 object2) (:method (o1 o2) (or (before o1 o2) (meets o1 o2) (meets o2 o1) (before o2 o1)))) ;;; Time Signature ;;; Tempo ;;; Tonality (Key Signature / Mode) ;;; Dynamics ;;; Voice ;;; Boundary Strength (phrasing)