Mercurial > hg > amuse
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"))) |