j@236: (cl:in-package #:amuse-midi-db) j@236: j@236: (defclass midi-db-object (amuse-object) ()) j@236: j@236: (defclass midi-db-identifier (identifier midi-db-object) ()) j@236: j@236: (defclass midi-db-collection-identifier (midi-db-identifier) j@236: ((collection-id :initarg :collection-id j@236: :accessor collection-id j@236: :initform nil)) j@236: (:documentation "Class to represent midi-db collection identifiers.")) j@236: j@236: (defun make-midi-db-collection-identifier (collection-id) j@236: (make-instance 'midi-db-collection-identifier j@236: :collection-id collection-id)) j@236: j@236: (defclass midi-db-composition-identifier (composition-identifier j@236: midi-db-identifier) j@236: ((composition-id :reader composition-id j@236: :initarg :composition-id)) j@236: (:documentation "Class to represent midi-db composition identifiers.")) j@236: j@236: (defun make-midi-db-composition-identifier (composition-id) j@236: (make-instance 'midi-db-composition-identifier j@236: :composition-id composition-id)) j@236: j@236: (defclass midi-db-composition (midi-composition midi-db-object) j@236: ((collection-identifier :initarg :collection-identifier j@236: :reader collection-identifier) j@236: (filename :initarg :filename j@236: :reader filename) j@236: (owner :initarg :owner j@236: :reader owner) j@236: (version :initarg :version j@236: :reader version) j@236: (creation-timestamp :initarg :creation-timestamp j@236: :reader creation-timestamp) j@236: (deletion-timestamp :initarg :deletion-timestamp j@236: :reader deletion-timestamp)) j@236: (:documentation "Midi-db class with slots for additional database j@236: fields. FIXME: This should perhaps be a subclass of 'versioned j@236: constituents'?")) j@236: j@236: (defun make-midi-db-composition (events start duration tempi timesigs j@236: keysigs identifier j@236: collection-identifier timebase j@236: filename owner version j@236: creation-timestamp j@236: deletion-timestamp) j@236: "Make a midi-db composition. This does not do the usual j@236: adjust-sequence initialisation (calling j@236: %recompute-standard-composition-period). FIXME: Is this bad?" j@236: (make-instance 'midi-db-composition j@236: :%data events j@236: :time start j@236: :interval duration j@236: :time-signatures timesigs j@236: :tempi tempi j@236: :key-signatures keysigs j@236: :identifier identifier j@236: :collection-identifier collection-identifier j@236: :midi-timebase timebase j@236: :filename filename j@236: :owner owner j@236: :version version j@236: :creation-timestamp creation-timestamp j@236: :deletion-timestamp deletion-timestamp)) j@236: j@236: (defmethod initialize-instance :after ((composition j@236: midi-db-composition) &key) j@236: "Initialize each event so that it knows what composition it belongs j@236: to." j@236: (sequence:dosequence (e composition t) j@236: (%set-composition composition e))) j@236: j@236: (defclass midi-db-event (midi-db-object linked-event) j@236: ((collection-identifier :initarg :collection-identifier j@236: :reader collection-identifier) j@236: (composition-identifier :initarg :composition-identifier j@236: :reader composition-identifier) j@236: (identifier :initarg :identifier j@236: :reader identifier) j@236: (version :initarg :version j@236: :reader version))) j@236: j@236: (defclass midi-db-pitched-event (midi-pitched-event midi-db-event) j@236: () j@236: (:documentation "Midi-db class with slots for additional database j@236: fields. FIXME: This should perhaps be a subclass of 'versioned j@236: constituents'?")) j@236: j@236: (defclass midi-db-percussive-event (midi-percussive-event midi-db-event) j@236: () j@236: (:documentation "Midi-db class with slots for additional database j@236: fields. FIXME: This should perhaps be a subclass of 'versioned j@236: constituents'?")) j@236: j@236: (defun make-midi-db-pitched-event (collection-identifier j@236: composition-identifier j@236: event-identifier track channel j@236: patch pitch velocity start duration j@236: version &optional composition) j@236: (make-instance 'midi-db-pitched-event j@236: :collection-identifier collection-identifier j@236: :composition-identifier composition-identifier j@236: :identifier event-identifier j@236: :track track j@236: :channel channel j@236: :patch patch j@236: :number pitch j@236: :velocity velocity j@236: :time start j@236: :interval duration j@236: :version version j@236: :composition composition)) j@236: j@236: (defun make-midi-db-percussive-event (collection-identifier j@236: composition-identifier j@236: event-identifier track channel j@236: patch drum-sound velocity start j@236: duration version &optional j@236: composition) j@236: (make-instance 'midi-db-percussive-event j@236: :collection-identifier collection-identifier j@236: :composition-identifier composition-identifier j@236: :identifier event-identifier j@236: :track track j@236: :channel channel j@236: :patch patch j@236: :sound drum-sound j@236: :velocity velocity j@236: :time start j@236: :interval duration j@236: :version version j@236: :composition composition)) j@236: j@236: (defclass midi-db-tempi (standard-tempo-period midi-db-object) j@236: ((version :initarg :version j@236: :reader version)) j@236: (:documentation "FIXME: subclass versioned constituent")) j@236: j@236: (defun make-midi-db-tempo (start duration microsecs-per-crotchet version) j@236: (make-instance 'midi-db-tempi j@236: :time start j@236: :interval duration j@236: :bpm (microsecond-per-crotchet-to-bpm j@236: microsecs-per-crotchet) j@236: :version version)) j@236: j@236: (defclass midi-db-timesig (standard-time-signature-period j@236: midi-db-object) j@236: ((version :initarg :version j@236: :reader version)) j@236: (:documentation "FIXME: subclass versioned constituent")) j@236: j@236: (defun make-midi-db-timesig (start duration numerator denominator j@236: version) j@236: (make-instance 'midi-db-timesig j@236: :time start j@236: :interval duration j@236: :numerator numerator j@236: :denominator denominator j@236: :version version)) j@236: j@236: (defclass midi-db-keysig (midi-key-signature-period j@236: midi-db-object) j@236: ((version :initarg :version j@236: :reader version)) j@236: (:documentation "FIXME: subclass versioned constituent")) j@236: j@236: (defun make-midi-db-keysig (start duration mode sharp-count version) j@236: (make-instance 'midi-db-keysig j@236: :time start j@236: :interval duration j@236: :mode mode j@236: :sharp-count sharp-count j@236: :version version))