d@88: (cl:in-package #:amuse-geerdes) d@88: d@88: (defclass property-list-mixin () d@132: ((properties :initarg :properties d@132: :accessor properties d@132: :initform 'nil))) d@88: d@130: (defclass geerdes-object (property-list-mixin) ()) d@130: j@288: (defclass geerdes-identifier (geerdes-object) ()) j@288: j@288: (defclass geerdes-composition-identifier (composition-identifier j@288: geerdes-object) ()) j@288: j@288: (defclass geerdes-identifier-cat-id (geerdes-composition-identifier) d@88: ((cat-id :initarg :cat-id d@88: :initform 'nil))) j@288: j@288: (defclass geerdes-identifier-file-id (geerdes-composition-identifier) d@88: ((file-id :initarg :file-id j@288: :initform 'nil)) j@288: (:documentation "Define geerdes-file-id as composition-id.")) j@288: j@288: (defclass geerdes-event-identifier (event-identifier j@288: geerdes-identifier) j@288: ((event-id :initarg :event-id j@288: :reader event-id))) d@88: d@130: (defclass geerdes-composition (midi-composition geerdes-object) d@88: ((db-entry :initarg :db-entry d@88: :initform nil d@88: :accessor %db-entry) d@88: (bar-numbers :initform nil d@88: :accessor %bar-numbers) d@88: (monody :initform nil d@88: :accessor %monody) d@88: (caches :initform nil d@88: :accessor %caches) d@88: (midi-constituents :initarg :constituents d@88: :accessor %midi-constituents) d@88: (midi-events :initarg :midi-events d@88: :accessor %midi-events) d@88: (db-cat-id :initarg :cat-id d@88: :accessor %db-cat-id) d@88: (db-file-id :initarg :file-id d@134: :accessor %db-file-id)) d@134: (:documentation "MIDI composition with extra slots for Geerdes d@134: database entries and ids. Because this implementation is for a d@134: particular need, caching of information is also handled within d@134: the object, so Geerdes compositions are faster for bar lookups, d@134: monody-finding and so on. They also make use of interval trees d@134: for time calculations, which make them faster for window-based d@134: queries (but slower to import as a result).")) d@88: d@88: (defclass geerdes-monody (monody geerdes-composition) d@88: ;; FIXME: necessary slots? Do we even use them? d@88: ((inter-onset-intervals :initarg :i-o-i d@88: :initform nil d@88: :accessor %i-o-i) d@88: (inter-onset-interval-mode :initarg :ioi-mode d@88: :initform 0 d@88: :accessor %ioi-mode))) d@88: j@288: (defclass geerdes-event (geerdes-object) () j@288: (:documentation "Base class for geerdes events.")) d@88: j@298: (defclass geerdes-pitched-event (midi-pitched-event geerdes-event j@298: linked-event) j@288: ((identifier :initarg :identifier j@288: :reader identifier)) j@288: (:documentation "Only adds a database identifier to j@288: midi-pitched-event")) j@288: j@288: (defclass geerdes-percussive-event (midi-percussive-event j@298: geerdes-event linked-event) j@288: ((identifier :initarg :identifier j@288: :reader identifier)) j@288: (:documentation "Only adds a database identifier to j@288: midi-percussive-event"))