annotate base/classes.lisp @ 171:98443d36ac6a

Fixed sequence:make-sequence-like :around method The :around method clobbered the %data slot, as Christophe put it. darcs-hash:20080123180914-990ec-629ecf5d60363512e6831800bb1e61dbcb8f94f5.gz
author Jamie Forth <j.forth@gold.ac.uk>
date Wed, 23 Jan 2008 18:09:14 +0000
parents 4a0e15e2829a
children 9b152d515275
rev   line source
m@24 1 (cl:in-package #:amuse)
m@24 2
m@124 3 ;; top-level amuse object
m@24 4
m@125 5 (defclass amuse-object () ())
m@24 6
m@24 7 ;; types of information-specifiers
m@24 8
d@147 9 (defclass identifier (amuse-object) ()
d@169 10 (:documentation "DEPRECATED: Base class to allow specification of
d@147 11 composition to get. Must be subclassed."))
d@169 12
d@169 13 (defclass constituent-identifier (identifier) ()
d@169 14 (:documentation "Base class to allow specifiction of constituents"))
d@169 15
d@169 16 (defclass composition-identifier (constituent-identifier) ()
d@169 17 (:documentation "Base class to allow-specification of constituents"))
d@169 18
d@136 19 (defclass moment (amuse-object) ()
d@100 20 (:documentation "Object indicating a point in time"))
d@136 21 (defclass period (amuse-object) ()
d@100 22 (:documentation "Object indicating a region of time"))
d@136 23 (defclass anchored-period (moment period) ()
d@100 24 (:documentation "Object indicating a region of time starting at
d@100 25 a specific point in time"))
d@136 26 (defclass pitch (amuse-object) ()
d@100 27 (:documentation "Object indicating some sort of pitch"))
d@136 28 (defclass pitch-interval (amuse-object) ()
d@100 29 (:documentation "Object indicating a distance in pitch space"))
m@24 30
m@24 31 ;; time-related classes
m@24 32
d@136 33 (defclass standard-moment (moment)
d@100 34 ((time :accessor %moment-time :initarg :time))
d@136 35 (:documentation "A moment that has time represented on a
d@136 36 continuous, progressive number line"))
m@24 37
d@136 38 (defclass standard-period (period)
d@100 39 ((interval :accessor %period-interval :initarg :interval))
d@136 40 (:documentation "A period that places time intervals
d@136 41 on a progressive number-line"))
m@24 42
d@136 43 (defclass standard-anchored-period (standard-period standard-moment anchored-period) ()
d@100 44 (:documentation "Number-line-based anchored period"))
m@24 45
m@24 46 ;; pitch-related classes
m@24 47
d@136 48 (defclass frequency-pitch (pitch) ())
m@24 49
m@24 50 (defclass chromatic-pitch (pitch)
d@100 51 ((number :accessor %chromatic-pitch-number :initarg :number))
d@123 52 (:documentation "A pitch represented as a number, with
d@123 53 chromatic pitches having distinct values."))
c@109 54 (defclass diatonic-pitch (pitch)
c@108 55 ((cp :initarg :cp :accessor %p-pc :reader diatonic-pitch-cp)
c@108 56 (mp :initarg :mp :accessor %p-pm :reader diatonic-pitch-mp))
c@109 57 (:documentation "A diatonic pitch, represented using MIPS: cp is an
c@109 58 integer representing chromatic pitch (An0 = 0, middle C = 39); mp is
c@109 59 an integer representing the morphetic pitch (An0 = 0, middle C =
c@109 60 23)."))
m@81 61
d@136 62 (defclass chromatic-pitch-interval (pitch-interval)
d@138 63 ((span :accessor %chromatic-pitch-interval-span :initarg :span))
d@138 64 (:documentation "An interval represented as a number, recording
d@138 65 the number of ascending chromatic pitches between two pitches."))
c@111 66
d@136 67 (defclass diatonic-pitch-interval (pitch-interval)
d@138 68 ((span :accessor %diatonic-pitch-interval-span :initarg :span :reader span))
d@138 69 (:documentation "How is this inplemented?"))
m@24 70
m@24 71 ;; events
m@24 72
d@122 73 (defclass event (anchored-period) ()
d@122 74 (:documentation "Notelike object"))
d@136 75 (defclass pitched-event (event pitch) ()
d@136 76 (:documentation "Event with pitch information"))
d@136 77 (defclass standard-pitched-event (pitched-event
d@136 78 standard-anchored-period) ()
d@122 79 (:documentation "Event with pitch information"))
d@122 80 (defclass chromatic-pitched-event (pitched-event chromatic-pitch) ()
d@122 81 (:documentation "Event with chromatic pitch information"))
d@136 82 (defclass standard-chromatic-pitched-event (chromatic-pitched-event
d@136 83 standard-anchored-period) ()
d@136 84 (:documentation "Event with chromatic pitch information and
d@136 85 standard-period"))
d@122 86 (defclass percussive-event (event) ()
d@134 87 (:documentation "Unpitched percussion Event. There's an issue
d@134 88 with this name - is there a reason why this is unpitched
d@134 89 necessarily, or why I'm not counting piano, etc in this? Perhaps
d@136 90 what I mean is that it should be renamed unpitched-event?
d@136 91 Actually, is this necessary? Isn't this just an event?"))
d@136 92 (defclass standard-percussive-event (event standard-anchored-period) ()
d@136 93 (:documentation "Unpitched percussion Event. There's an issue
d@136 94 with this name - is there a reason why this is unpitched
d@136 95 necessarily, or why I'm not counting piano, etc in this? Perhaps
d@136 96 what I mean is that it should be renamed unpitched-event?
d@138 97 Actually, is this necessary? Isn't this just an event?
d@138 98 Timbral/instrumental information will be generalised later but is
d@138 99 less agreed-on than pitch."))
m@24 100
m@24 101 ;;; Range-based `constituents'
m@24 102 ;; Whilst these are all constituents in the CHARM sense, their
m@24 103 ;; properties apply to a timed range rather than to a set of
m@24 104 ;; events. As such, they can be regarded as anchored-periods with
m@24 105 ;; properties.
m@24 106
d@136 107 (defclass time-signature (amuse-object) ()
d@136 108 (:documentation "Abstract class for time signature"))
m@24 109
d@136 110 (defclass time-signature-period (time-signature anchored-period) ()
d@136 111 (:documentation "Abstract class for time signatures in time"))
d@136 112
d@136 113 (defclass standard-time-signature (time-signature)
m@24 114 ((numerator :accessor %basic-time-signature-numerator
m@24 115 :initarg :numerator)
m@24 116 (denominator :accessor %basic-time-signature-denominator
d@123 117 :initarg :denominator))
d@123 118 (:documentation "Class with slots for numerator and
d@123 119 denominator. Can only deal with numeric signatures."))
m@24 120
d@136 121 (defclass standard-time-signature-period (standard-time-signature
d@136 122 time-signature-period
d@136 123 standard-anchored-period)
d@136 124 ()
d@136 125 (:documentation "STANDARD-TIME-SIGNATURE on a time number line"))
d@136 126
d@136 127 (defclass key-signature (amuse-object) ()
d@123 128 (:documentation "Base class for key signature"))
m@24 129
d@136 130 (defclass key-signature-period (key-signature anchored-period) ()
d@136 131 (:documentation "Abstract class for time signatures in time"))
d@136 132
d@136 133 (defclass standard-key-signature (key-signature)
m@24 134 ((sharp-count :accessor %basic-key-signature-sharp-count
d@123 135 :initarg :sharp-count))
d@123 136 (:documentation "Simple class - Only has line-of-fifths
d@123 137 distance from c, so custom signatures won't work"))
m@24 138
d@136 139 (defclass standard-key-signature-period (standard-key-signature
d@136 140 key-signature-period
d@136 141 standard-anchored-period)
d@136 142 ()
d@136 143 (:documentation "STANDARD-KEY-SIGNATURE on a time number line"))
d@136 144
d@136 145 (defclass midi-key-signature (standard-key-signature)
m@40 146 ((mode :accessor %midi-key-signature-mode
d@123 147 :initarg :mode))
d@123 148 (:documentation "MIDI-based flavour of basic key signature,
d@123 149 adding a slot for mode: 0 = major key; 1 = minor key"))
m@40 150
d@136 151 (defclass midi-key-signature-period (standard-key-signature-period
d@136 152 midi-key-signature)
d@136 153 ()
d@136 154 (:documentation "MIDI-KEY-SIGNATURE on a time number line"))
d@136 155
d@136 156 (defclass tempo (amuse-object) ()
d@136 157 (:documentation "Abstract class for tempo"))
d@136 158 (defclass tempo-period (tempo anchored-period) ()
d@136 159 (:documentation "Abstract class for tempo associated with a
d@136 160 time period"))
d@136 161 (defclass standard-tempo (tempo)
m@24 162 ((bpm :accessor %tempo-bpm
d@123 163 :initarg :bpm))
d@123 164 (:documentation "Rather literal reading of absolute tempo.
d@123 165 accel and rit in symbolic encoding will need other structures,
d@123 166 as will textual tempo markings."))
d@136 167 (defclass standard-tempo-period (standard-tempo
d@136 168 tempo-period
d@136 169 standard-anchored-period)
d@136 170 ()
d@136 171 (:documentation "Tempo associated with a standard-anchored-period"))
m@40 172
m@124 173 ;; collections of more than one event
m@124 174
d@147 175 (defclass constituent (anchored-period) ()
d@147 176 (:documentation "Base class for constituents"))
d@147 177 (defclass standard-constituent (constituent standard-anchored-period) ()
d@147 178 (:documentation "Base class for constituents using standard
d@147 179 time representation"))
m@124 180 (defclass time-ordered-constituent (constituent list-slot-sequence)
m@124 181 ;; this won't work if lisp implementation doesn't support extensible
m@124 182 ;; sequences.
m@124 183 ())
d@136 184 (defclass standard-time-ordered-constituent (time-ordered-constituent
d@136 185 standard-constituent
d@136 186 list-slot-sequence)
d@136 187 ;; this won't work if lisp implementation doesn't support extensible
d@136 188 ;; sequences.
d@136 189 ())
d@147 190 (defclass composition (time-ordered-constituent) ()
d@147 191 (:documentation "Base class for compositions"))
d@136 192 (defclass standard-composition (composition
d@147 193 standard-time-ordered-constituent) ()
d@147 194 (:documentation "Base class for compositions using standard
d@147 195 time representation"))
d@147 196 (defclass monody (composition) ()
d@147 197 (:documentation "Class for indicating suitability for analysis
d@147 198 requiring a monody"))
m@143 199 (defclass standard-monody (monody standard-composition) ())