annotate base/classes.lisp @ 330:2fbff655ba47 tip

Removed cpitch-adj and cents SQL columns
author Jeremy Gow <jeremy.gow@gmail.com>
date Mon, 21 Jan 2013 11:08:11 +0000
parents 4b4fb8859e82
children
rev   line source
j@190 1 (cl:in-package #:amuse)
j@190 2
j@190 3 ;; top-level amuse object
j@190 4
j@190 5 (defclass amuse-object () ())
j@190 6
j@190 7 ;; types of information-specifiers
j@190 8
j@190 9 (defclass identifier (amuse-object) ()
j@190 10 (:documentation "DEPRECATED: Base class to allow specification of
j@288 11 composition to get. Must be subclassed.")) ; FIXME: Why deprecated?
j@190 12
j@190 13 (defclass constituent-identifier (identifier) ()
j@288 14 (:documentation "Base class to allow specification of
j@288 15 constituents"))
j@288 16
j@190 17 (defclass composition-identifier (constituent-identifier) ()
j@288 18 (:documentation "Base class to allow specification of
j@288 19 compositions constituents"))
j@288 20
j@288 21 (defclass event-identifier (identifier) ()
j@288 22 (:documentation "Base class to allow specification of events."))
j@190 23
j@190 24 (defclass moment (amuse-object) ()
j@190 25 (:documentation "Object indicating a point in time"))
j@190 26 (defclass period (amuse-object) ()
j@190 27 (:documentation "Object indicating a region of time"))
j@190 28 (defclass anchored-period (moment period) ()
j@190 29 (:documentation "Object indicating a region of time starting at
j@190 30 a specific point in time"))
j@190 31 (defclass pitch (amuse-object) ()
j@190 32 (:documentation "Object indicating some sort of pitch"))
j@190 33 (defclass pitch-interval (amuse-object) ()
j@190 34 (:documentation "Object indicating a distance in pitch space"))
j@190 35
j@190 36 ;; time-related classes
j@190 37
j@190 38 (defclass standard-moment (moment)
j@190 39 ((time :accessor %moment-time :initarg :time))
j@190 40 (:documentation "A moment that has time represented on a
j@190 41 continuous, progressive number line"))
j@190 42
j@190 43 (defclass standard-period (period)
j@190 44 ((interval :accessor %period-interval :initarg :interval))
j@190 45 (:documentation "A period that places time intervals
j@190 46 on a progressive number-line"))
j@190 47
j@190 48 (defclass standard-anchored-period (standard-period standard-moment anchored-period) ()
j@190 49 (:documentation "Number-line-based anchored period"))
j@190 50
j@190 51 ;; pitch-related classes
j@190 52
j@190 53 (defclass frequency-pitch (pitch) ())
j@190 54
j@190 55 (defclass chromatic-pitch (pitch)
j@296 56 ((number :accessor %chromatic-pitch-number
j@296 57 :reader chromatic-pitch-number :initarg :number))
j@296 58 (:documentation "A pitch represented as a number, with chromatic
j@296 59 pitches having distinct values. FIXME: We should not be using the cl
j@296 60 symbol NUMBER."))
j@296 61
j@190 62 (defclass diatonic-pitch (pitch)
j@190 63 ((cp :initarg :cp :accessor %p-pc :reader diatonic-pitch-cp)
j@190 64 (mp :initarg :mp :accessor %p-pm :reader diatonic-pitch-mp))
j@190 65 (:documentation "A diatonic pitch, represented using MIPS: cp is an
j@190 66 integer representing chromatic pitch (An0 = 0, middle C = 39); mp is
j@190 67 an integer representing the morphetic pitch (An0 = 0, middle C =
j@190 68 23)."))
j@190 69
j@190 70 (defclass chromatic-pitch-interval (pitch-interval)
j@190 71 ((span :accessor %chromatic-pitch-interval-span :initarg :span))
j@190 72 (:documentation "An interval represented as a number, recording
j@190 73 the number of ascending chromatic pitches between two pitches."))
j@190 74
j@190 75 (defclass diatonic-pitch-interval (pitch-interval)
j@190 76 ((span :accessor %diatonic-pitch-interval-span :initarg :span :reader span))
j@190 77 (:documentation "How is this inplemented?"))
j@190 78
j@190 79 ;; events
j@190 80
j@190 81 (defclass event (anchored-period) ()
j@190 82 (:documentation "Notelike object"))
j@311 83
j@297 84 (defclass linked-event (amuse-object)
j@297 85 ((composition :reader composition
j@297 86 :writer %set-composition
j@297 87 :initarg :composition))
j@306 88 (:documentation "This provides a composition slot for events. The
j@306 89 generic function initialize-instance can be specialized on an
j@306 90 implementation composition to assign the event slots when a
j@306 91 composition instance is created. Or the slot can be assigned within
j@306 92 the composition constructor function. FIXME: Not sure about this -
j@306 93 was there a good reason why events should not know the composition
j@306 94 they belong to? MTP-events have a slot for composition-id (an
j@306 95 integer number), but here the slot is intended to be assigned the
j@306 96 composition object itself. Doing this means that potentially some
j@306 97 generic functions could loose the extra composition parameter. I
j@306 98 made this change because of SIA projection related stuff, the only
j@306 99 function that relies on it in amuse is find-next-event. JF"))
j@306 100
j@190 101 (defclass pitched-event (event pitch) ()
j@190 102 (:documentation "Event with pitch information"))
j@311 103
j@190 104 (defclass standard-pitched-event (pitched-event
j@190 105 standard-anchored-period) ()
j@190 106 (:documentation "Event with pitch information"))
j@311 107
j@190 108 (defclass chromatic-pitched-event (pitched-event chromatic-pitch) ()
j@190 109 (:documentation "Event with chromatic pitch information"))
j@311 110
j@190 111 (defclass standard-chromatic-pitched-event (chromatic-pitched-event
j@190 112 standard-anchored-period) ()
j@190 113 (:documentation "Event with chromatic pitch information and
j@190 114 standard-period"))
j@311 115
j@283 116 (defclass diatonic-pitched-event (pitched-event diatonic-pitch) ()
j@283 117 (:documentation "Event with diatonic pitch information"))
j@311 118
j@283 119 (defclass standard-diatonic-pitched-event (diatonic-pitched-event
j@283 120 standard-anchored-period) ()
j@283 121 (:documentation "Event with diatonic pitch information and
j@283 122 standard-period"))
j@311 123
j@190 124 (defclass percussive-event (event) ()
j@190 125 (:documentation "Unpitched percussion Event. There's an issue
j@190 126 with this name - is there a reason why this is unpitched
j@190 127 necessarily, or why I'm not counting piano, etc in this? Perhaps
j@190 128 what I mean is that it should be renamed unpitched-event?
j@190 129 Actually, is this necessary? Isn't this just an event?"))
j@311 130
j@190 131 (defclass standard-percussive-event (event standard-anchored-period) ()
j@190 132 (:documentation "Unpitched percussion Event. There's an issue
j@190 133 with this name - is there a reason why this is unpitched
j@190 134 necessarily, or why I'm not counting piano, etc in this? Perhaps
j@190 135 what I mean is that it should be renamed unpitched-event?
j@190 136 Actually, is this necessary? Isn't this just an event?
j@190 137 Timbral/instrumental information will be generalised later but is
j@190 138 less agreed-on than pitch."))
j@190 139
j@190 140 ;;; Range-based `constituents'
j@190 141 ;; Whilst these are all constituents in the CHARM sense, their
j@190 142 ;; properties apply to a timed range rather than to a set of
j@190 143 ;; events. As such, they can be regarded as anchored-periods with
j@190 144 ;; properties.
j@190 145
j@190 146 (defclass time-signature (amuse-object) ()
j@190 147 (:documentation "Abstract class for time signature"))
j@190 148
j@190 149 (defclass time-signature-period (time-signature anchored-period) ()
j@190 150 (:documentation "Abstract class for time signatures in time"))
j@190 151
j@190 152 (defclass standard-time-signature (time-signature)
j@190 153 ((numerator :accessor %basic-time-signature-numerator
j@190 154 :initarg :numerator)
j@190 155 (denominator :accessor %basic-time-signature-denominator
j@190 156 :initarg :denominator))
j@190 157 (:documentation "Class with slots for numerator and
j@190 158 denominator. Can only deal with numeric signatures."))
j@190 159
j@190 160 (defclass standard-time-signature-period (standard-time-signature
j@190 161 time-signature-period
j@190 162 standard-anchored-period)
j@190 163 ()
j@190 164 (:documentation "STANDARD-TIME-SIGNATURE on a time number line"))
j@190 165
j@190 166 (defclass key-signature (amuse-object) ()
j@190 167 (:documentation "Base class for key signature"))
j@190 168
j@190 169 (defclass key-signature-period (key-signature anchored-period) ()
j@190 170 (:documentation "Abstract class for time signatures in time"))
j@190 171
j@190 172 (defclass standard-key-signature (key-signature)
j@190 173 ((sharp-count :accessor %basic-key-signature-sharp-count
j@190 174 :initarg :sharp-count))
j@190 175 (:documentation "Simple class - Only has line-of-fifths
j@190 176 distance from c, so custom signatures won't work"))
j@190 177
j@190 178 (defclass standard-key-signature-period (standard-key-signature
j@190 179 key-signature-period
j@190 180 standard-anchored-period)
j@190 181 ()
j@190 182 (:documentation "STANDARD-KEY-SIGNATURE on a time number line"))
j@190 183
j@190 184 (defclass midi-key-signature (standard-key-signature)
j@190 185 ((mode :accessor %midi-key-signature-mode
j@190 186 :initarg :mode))
j@190 187 (:documentation "MIDI-based flavour of basic key signature,
j@190 188 adding a slot for mode: 0 = major key; 1 = minor key"))
j@190 189
j@190 190 (defclass midi-key-signature-period (standard-key-signature-period
j@190 191 midi-key-signature)
j@190 192 ()
j@190 193 (:documentation "MIDI-KEY-SIGNATURE on a time number line"))
j@190 194
j@190 195 (defclass tempo (amuse-object) ()
j@190 196 (:documentation "Abstract class for tempo"))
j@190 197 (defclass tempo-period (tempo anchored-period) ()
j@190 198 (:documentation "Abstract class for tempo associated with a
j@190 199 time period"))
j@190 200 (defclass standard-tempo (tempo)
j@190 201 ((bpm :accessor %tempo-bpm
j@190 202 :initarg :bpm))
j@190 203 (:documentation "Rather literal reading of absolute tempo.
j@190 204 accel and rit in symbolic encoding will need other structures,
j@190 205 as will textual tempo markings."))
j@190 206 (defclass standard-tempo-period (standard-tempo
j@190 207 tempo-period
j@190 208 standard-anchored-period)
j@190 209 ()
j@190 210 (:documentation "Tempo associated with a standard-anchored-period"))
j@319 211
j@319 212
j@319 213 ;;;=====================================================================
j@319 214 ;;; Constituents: collections of more than one event
j@319 215 ;;;=====================================================================
j@190 216
j@190 217 (defclass constituent (anchored-period) ()
j@190 218 (:documentation "Base class for constituents"))
j@311 219
j@190 220 (defclass standard-constituent (constituent standard-anchored-period) ()
j@190 221 (:documentation "Base class for constituents using standard
j@190 222 time representation"))
j@190 223
j@190 224 (defclass time-ordered-constituent (constituent list-slot-sequence)
j@190 225 ;; this won't work if lisp implementation doesn't support extensible
j@190 226 ;; sequences.
j@190 227 ())
j@311 228
j@190 229 (defclass standard-time-ordered-constituent (time-ordered-constituent
j@311 230 standard-constituent)
j@190 231 ;; this won't work if lisp implementation doesn't support extensible
j@190 232 ;; sequences.
j@190 233 ())
j@190 234
j@190 235 (defclass composition (time-ordered-constituent) ()
j@190 236 (:documentation "Base class for compositions"))
j@190 237
j@190 238 (defclass standard-composition (composition
j@190 239 standard-time-ordered-constituent) ()
j@190 240 (:documentation "Base class for compositions using standard
j@190 241 time representation"))
j@311 242
j@190 243 (defclass monody (composition) ()
j@190 244 (:documentation "Class for indicating suitability for analysis
j@190 245 requiring a monody"))
j@311 246
j@190 247 (defclass standard-monody (monody standard-composition) ())
j@190 248
j@319 249 ;; Floating Constituents
j@319 250
j@319 251 (defclass floating-constituent (period) ()
j@319 252 (:documentation "Base class for non-anchored constituents"))
j@319 253
j@319 254 (defclass standard-floating-constituent (floating-constituent
j@319 255 standard-period) ()
j@319 256 (:documentation "Base class for floating constituents using standard
j@319 257 time representation"))
j@319 258
j@319 259 (defclass time-ordered-floating-constituent (floating-constituent
j@319 260 list-slot-sequence)
j@319 261 ;; this won't work if lisp implementation doesn't support extensible
j@319 262 ;; sequences.
j@319 263 ())
j@319 264
j@319 265 (defclass standard-time-ordered-floating-constituent
j@319 266 (time-ordered-floating-constituent standard-floating-constituent)
j@319 267 ;; this won't work if lisp implementation doesn't support extensible
j@319 268 ;; sequences.
j@319 269 ())
j@319 270
io901tp@323 271 ;;; Simultaneities are constituents whose particles have an overlapping time period.
io901tp@323 272 (defclass simultaneity (constituent)
io901tp@323 273 ((particles :initarg :particles :accessor %particles
io901tp@323 274 :documentation "particles"))
io901tp@323 275 (:documentation "Class for simultaneity constituent. A simultaneity is a constituent which is formed of particles that have an intersecting time period."))
io901tp@323 276
j@190 277 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
j@190 278 ;;
j@190 279 ;; Experimental:
j@190 280 ;;
j@190 281
j@190 282 (defclass clef (amuse-object) ()
j@190 283 (:documentation "Abstract class for clef implementations"))
j@190 284
j@190 285 (defclass clef-period (clef anchored-period) ()
j@190 286 (:documentation "Abstract class for clef implementations in time"))
j@190 287
j@190 288 (defclass standard-clef (clef)
j@190 289 ((type :accessor %standard-clef-type
j@190 290 :initarg :type)
j@190 291 (line :accessor %standard-clef-line
j@190 292 :initarg :line)
j@190 293 (octave-shift :accessor %standard-clef-octave-shift
j@190 294 :initarg :octave-shift
j@190 295 :initform nil))
j@190 296 (:documentation "Class of clef with slots for type (a keyword
j@190 297 from :F, :G and :C, probably), line (counting from the lowest line =
j@190 298 1) and octave shift (nil or a positive or negative integer
j@190 299 representing transposition up or down"))
j@190 300
j@190 301 (defclass standard-clef-period (standard-clef clef-period standard-anchored-period)
j@190 302 ()
j@190 303 (:documentation "Standard clef on a timeline"))