comparison implementations/viewpointable/viewpointable.lisp @ 116:b4f4df48337d

Addition of viewpointable classes and methods These may be in the wrong place, but are designed to facilitate pluggability of viewpoints for well-behaved implementations darcs-hash:20070726160347-f76cc-6e6da5d488b3f252d0575e42daa566130481f955.gz
author David Lewis <d.lewis@gold.ac.uk>
date Thu, 26 Jul 2007 17:03:47 +0100
parents
children 0190c6ad759e
comparison
equal deleted inserted replaced
115:cf198383852d 116:b4f4df48337d
1 (in-package #:amuse-viewpointing-implementation)
2
3 ;; A set of classes and methods such that, if the amuse-form methods
4 ;; are implemented, a viewpointable-composition can be made and have
5 ;; viewpoint operations carried out without loss of context.
6
7 (defclass viewpointable-event (event)
8 ((source-event :initarg :source-event
9 :accessor %viewpointable-event-source-event)
10 (source-composition :initarg :source-composition
11 :accessor %viewpointable-event-source-composition)))
12
13 (defclass viewpointable-composition (composition) ())
14
15 (defmethod timepoint ((event viewpointable-event))
16 (timepoint (%viewpointable-event-source-event event)))
17
18 (defmethod duration ((event viewpointable-event))
19 (duration (%viewpointable-event-source-event event)))
20
21 (defmethod midi-pitch-number ((event viewpointable-event))
22 (midi-pitch-number (%viewpointable-event-source-event event)))
23
24 (defmethod get-applicable-key-signatures ((event viewpointable-event) foo)
25 (declare (ignore foo))
26 (get-applicable-key-signatures (%viewpointable-event-source-event event)
27 (%viewpointable-event-source-composition event)))
28
29 (defmethod get-applicable-time-signatures ((event viewpointable-event) foo)
30 (declare (ignore foo))
31 (get-applicable-time-signatures (%viewpointable-event-source-event event)
32 (%viewpointable-event-source-composition event)))
33
34
35 (defmethod get-applicable-tempi ((event viewpointable-event) foo)
36 (declare (ignore foo))
37 (get-applicable-tempi (%viewpointable-event-source-event event)
38 (%viewpointable-event-source-composition event)))
39
40 (defmethod crotchet ((event viewpointable-event))
41 (crotchet (%viewpointable-event-source-event event)))
42
43 (defmethod diatonic-pitch ((event viewpointable-event))
44 (diatonic-pitch (%viewpointable-event-source-event event)))
45
46 (defmethod amuse-segmentation:ground-truth-segmenter-after ((composition viewpointable-composition))
47 (amuse-segmentation:ground-truth-segmenter-after composition))
48
49 (defmethod amuse-segmentation:ground-truth-segmenter-before ((composition viewpointable-composition))
50 (amuse-segmentation:ground-truth-segmenter-before composition))
51
52 (defmethod amuse-segmentation:boundary-strength (segmenter (event viewpointable-event) (composition viewpointable-composition))
53 (declare (ignore composition))
54 (amuse-segmentation:boundary-strength segmenter
55 (%viewpointable-event-source-event event)
56 (%viewpointable-event-source-composition event)))
57
58 (defun make-viewpointable-composition (composition)
59 (let ((new-comp (make-instance 'viewpointable-composition
60 :time (timepoint composition)
61 :interval (duration composition)))
62 (event-list) (i 0))
63 (sequence:dosequence (event composition)
64 (push (make-instance 'viewpointable-event :source-event event
65 :source-composition composition)
66 event-list)
67 (incf i))
68 (sequence:adjust-sequence new-comp i :initial-contents (reverse event-list))
69 new-comp))