d@88
|
1 (cl:in-package #:amuse-geerdes)
|
d@88
|
2
|
d@88
|
3 (defclass property-list-mixin ()
|
d@132
|
4 ((properties :initarg :properties
|
d@132
|
5 :accessor properties
|
d@132
|
6 :initform 'nil)))
|
d@88
|
7
|
d@130
|
8 (defclass geerdes-object (property-list-mixin) ())
|
d@130
|
9
|
j@288
|
10 (defclass geerdes-identifier (geerdes-object) ())
|
j@288
|
11
|
j@288
|
12 (defclass geerdes-composition-identifier (composition-identifier
|
j@288
|
13 geerdes-object) ())
|
j@288
|
14
|
j@288
|
15 (defclass geerdes-identifier-cat-id (geerdes-composition-identifier)
|
d@88
|
16 ((cat-id :initarg :cat-id
|
d@88
|
17 :initform 'nil)))
|
j@288
|
18
|
j@288
|
19 (defclass geerdes-identifier-file-id (geerdes-composition-identifier)
|
d@88
|
20 ((file-id :initarg :file-id
|
j@288
|
21 :initform 'nil))
|
j@288
|
22 (:documentation "Define geerdes-file-id as composition-id."))
|
j@288
|
23
|
j@288
|
24 (defclass geerdes-event-identifier (event-identifier
|
j@288
|
25 geerdes-identifier)
|
j@288
|
26 ((event-id :initarg :event-id
|
j@288
|
27 :reader event-id)))
|
d@88
|
28
|
d@130
|
29 (defclass geerdes-composition (midi-composition geerdes-object)
|
d@88
|
30 ((db-entry :initarg :db-entry
|
d@88
|
31 :initform nil
|
d@88
|
32 :accessor %db-entry)
|
d@88
|
33 (bar-numbers :initform nil
|
d@88
|
34 :accessor %bar-numbers)
|
d@88
|
35 (monody :initform nil
|
d@88
|
36 :accessor %monody)
|
d@88
|
37 (caches :initform nil
|
d@88
|
38 :accessor %caches)
|
d@88
|
39 (midi-constituents :initarg :constituents
|
d@88
|
40 :accessor %midi-constituents)
|
d@88
|
41 (midi-events :initarg :midi-events
|
d@88
|
42 :accessor %midi-events)
|
d@88
|
43 (db-cat-id :initarg :cat-id
|
d@88
|
44 :accessor %db-cat-id)
|
d@88
|
45 (db-file-id :initarg :file-id
|
d@134
|
46 :accessor %db-file-id))
|
d@134
|
47 (:documentation "MIDI composition with extra slots for Geerdes
|
d@134
|
48 database entries and ids. Because this implementation is for a
|
d@134
|
49 particular need, caching of information is also handled within
|
d@134
|
50 the object, so Geerdes compositions are faster for bar lookups,
|
d@134
|
51 monody-finding and so on. They also make use of interval trees
|
d@134
|
52 for time calculations, which make them faster for window-based
|
d@134
|
53 queries (but slower to import as a result)."))
|
d@88
|
54
|
d@88
|
55 (defclass geerdes-monody (monody geerdes-composition)
|
d@88
|
56 ;; FIXME: necessary slots? Do we even use them?
|
d@88
|
57 ((inter-onset-intervals :initarg :i-o-i
|
d@88
|
58 :initform nil
|
d@88
|
59 :accessor %i-o-i)
|
d@88
|
60 (inter-onset-interval-mode :initarg :ioi-mode
|
d@88
|
61 :initform 0
|
d@88
|
62 :accessor %ioi-mode)))
|
d@88
|
63
|
j@288
|
64 (defclass geerdes-event (geerdes-object) ()
|
j@288
|
65 (:documentation "Base class for geerdes events."))
|
d@88
|
66
|
j@298
|
67 (defclass geerdes-pitched-event (midi-pitched-event geerdes-event
|
j@298
|
68 linked-event)
|
j@288
|
69 ((identifier :initarg :identifier
|
j@288
|
70 :reader identifier))
|
j@288
|
71 (:documentation "Only adds a database identifier to
|
j@288
|
72 midi-pitched-event"))
|
j@288
|
73
|
j@288
|
74 (defclass geerdes-percussive-event (midi-percussive-event
|
j@298
|
75 geerdes-event linked-event)
|
j@288
|
76 ((identifier :initarg :identifier
|
j@288
|
77 :reader identifier))
|
j@288
|
78 (:documentation "Only adds a database identifier to
|
j@288
|
79 midi-percussive-event"))
|