comparison implementations/geerdes/methods.lisp @ 88:8ea75cc8bc2c

Basic geerdes functionality moved to implementations/geerdes from separate package darcs-hash:20070720161242-f76cc-fd256cbbb81d8c418a6c7c45844264184c5ed932.gz
author David Lewis <d.lewis@gold.ac.uk>
date Fri, 20 Jul 2007 17:12:42 +0100
parents
children ad9cca28fecf
comparison
equal deleted inserted replaced
87:19a263fb92d1 88:8ea75cc8bc2c
1 (cl:in-package #:amuse-geerdes)
2
3 ;;; Compositions
4
5 ;; identifiers
6 (defun g-id (cat-id)
7 (make-instance 'geerdes-identifier-cat-id :cat-id cat-id))
8 (defun g-id-file-id (file-id)
9 (make-instance 'geerdes-identifier-file-id :file-id file-id))
10
11 (defgeneric cat-id (object))
12 (defgeneric file-id (object))
13 (defgeneric (setf cat-id) (value object))
14 (defgeneric (setf file-id) (value object))
15
16 (defmethod cat-id ((object geerdes-composition))
17 (%db-cat-id object))
18 (defmethod cat-id ((object geerdes-identifier-cat-id))
19 (slot-value object 'cat-id))
20 (defmethod file-id ((object geerdes-composition))
21 (%db-file-id object))
22 (defmethod file-id ((object geerdes-identifier-file-id))
23 (slot-value object 'file-id))
24 (defmethod (setf cat-id) (value (object geerdes-composition))
25 (setf (%db-cat-id object) value))
26 (defmethod (setf cat-id) (value (object geerdes-identifier-cat-id))
27 (setf (slot-value object 'cat-id) value))
28 (defmethod (setf file-id) (value (object geerdes-composition))
29 (setf (%db-file-id object) value))
30 (defmethod (setf file-id) (value (object geerdes-identifier-file-id))
31 (setf (slot-value object 'file-id) value))
32
33 ;; Composition
34
35 (defmethod get-composition ((identifier geerdes-identifier))
36 (let* ((composition (get-geerdes-composition identifier)))
37 (%initialise-notes composition)
38 (%initialise-constituents composition)))
39
40 (defgeneric get-geerdes-composition (identifier))
41 (defmethod get-geerdes-composition ((identifier geerdes-identifier-cat-id))
42 #.(clsql:locally-enable-sql-reader-syntax)
43 (let* ((cat-id (cat-id identifier))
44 (file-info (car (clsql:select [id] [timebase]
45 :from [midi_file]
46 :where [= [cat_id] cat-id]
47 :flatp t
48 :result-types :auto)))
49 (timebase (second file-info))
50 (file-id (first file-info))
51 (composition (make-instance 'geerdes-composition
52 :id identifier
53 :file-id file-id
54 :cat-id cat-id
55 :midi-timebase timebase)))
56 (setf (%midi-events composition) (get-db-events file-id)
57 (%midi-constituents composition) (get-db-constituents file-id))
58 #.(clsql:restore-sql-reader-syntax-state)
59 composition))
60 (defmethod get-geerdes-composition ((identifier geerdes-identifier-file-id))
61 #.(clsql:locally-enable-sql-reader-syntax)
62 (let* ((file-id (file-id identifier))
63 (file-info (car (clsql:select [cat_id] [timebase]
64 :from [midi_file]
65 :where [= [id] file-id]
66 :flatp t
67 :result-types :auto)))
68 (timebase (second file-info))
69 (cat-id (first file-info))
70 (composition (make-instance 'geerdes-composition
71 :id identifier
72 :cat-id cat-id
73 :file-id file-id
74 :midi-timebase timebase)))
75 (setf (%midi-events composition) (get-db-events file-id)
76 (%midi-constituents composition) (get-db-constituents file-id))
77 #.(clsql:restore-sql-reader-syntax-state)
78 composition))
79
80 (defun get-db-events (file-id)
81 (clsql:query
82 (concatenate 'string "
83 SELECT track, channel, start, duration, patch, pitch, velocity, id, event_id
84 FROM midi_event LEFT JOIN derived_midi_monody ON (id=event_id)
85 WHERE file_id=" (princ-to-string file-id)
86 " ORDER BY start")))
87 (defun get-db-constituents (file-id)
88 (clsql:query (concatenate 'string "
89 SELECT track, channel, start, duration,
90 param.num, param.value, pb.value, tp.value, ts.num, ts.denom
91 FROM midi_constituent c
92 LEFT JOIN midi_pb pb ON (id=pb.constituent_id)
93 LEFT JOIN midi_tempo tp ON (id=tp.constituent_id)
94 LEFT JOIN midi_timesig ts ON (id=ts.constituent_id)
95 LEFT JOIN midi_param param ON (id=param.constituent_id)
96 WHERE c.file_id=" (princ-to-string file-id)
97 " ORDER BY start")))