j@302
|
1 (cl:in-package #:amuse-midi)
|
j@302
|
2
|
j@302
|
3 ;;;========================================================================
|
j@302
|
4 ;;; Functions that return features given an event.
|
j@302
|
5 ;;;========================================================================
|
j@302
|
6
|
j@302
|
7 (defun midi-event-type (event)
|
j@302
|
8 "Defines an arbitrary ordering for pitched and percussive events."
|
j@302
|
9 (if (pitchedp event) 0 1))
|
j@302
|
10
|
j@302
|
11 ;;;========================================================================
|
j@302
|
12 ;;; Predicates for conditioning on event attributes.
|
j@302
|
13 ;;; Useful for sia-datapoint-specs.
|
j@302
|
14 ;;;========================================================================
|
j@302
|
15
|
j@302
|
16 ;;; midi-drum-sound
|
j@302
|
17 (defun midi-drum-sound-eql (event sound)
|
j@302
|
18 (eql (midi-drum-sound event) sound))
|
j@302
|
19
|
j@302
|
20 (defun make-midi-drum-sound-eql (sound)
|
j@302
|
21 (lambda (event)
|
j@302
|
22 (funcall #'midi-drum-sound-eql event sound)))
|
j@302
|
23
|
j@302
|
24 (defun midi-drum-sound-any (event &rest sounds)
|
j@302
|
25 (loop for sound in sounds
|
j@302
|
26 do (if (midi-drum-sound-eql event sound)
|
j@302
|
27 (return t))))
|
j@302
|
28
|
j@302
|
29 (defun make-midi-drum-sound-any (&rest sounds)
|
j@302
|
30 (lambda (event)
|
j@302
|
31 (apply #'midi-drum-sound-any event sounds)))
|
j@302
|
32
|
j@302
|
33 ;;; midi-channel
|
j@302
|
34 (defun midi-channel-eql (event channel)
|
j@302
|
35 (eql (midi-channel event) channel))
|
j@302
|
36
|
j@302
|
37 (defun make-midi-channel-eql (channel)
|
j@302
|
38 (lambda (event)
|
j@302
|
39 (funcall #'midi-channel-eql event channel)))
|
j@302
|
40
|
j@302
|
41 (defun midi-channel-any (event &rest channels)
|
j@302
|
42 (loop for channel in channels
|
j@302
|
43 do (if (midi-channel-eql event channel)
|
j@302
|
44 (return t))))
|
j@302
|
45
|
j@302
|
46 (defun make-midi-channel-any (&rest channels)
|
j@302
|
47 (lambda (event)
|
j@302
|
48 (apply #'midi-channel-any event channels)))
|
j@302
|
49
|
j@302
|
50 ;;; midi-track
|
j@302
|
51 (defun midi-track-eql (event track)
|
j@302
|
52 (eql (midi-track event) track))
|
j@302
|
53
|
j@302
|
54 (defun make-midi-track-eql (track)
|
j@302
|
55 (lambda (event)
|
j@302
|
56 (funcall #'midi-track-eql event track)))
|
j@302
|
57
|
j@302
|
58 (defun midi-track-any (event &rest tracks)
|
j@302
|
59 (loop for track in tracks
|
j@302
|
60 do (if (midi-track-eql event track)
|
j@302
|
61 (return t))))
|
j@302
|
62
|
j@302
|
63 (defun make-midi-track-any (&rest tracks)
|
j@302
|
64 (lambda (event)
|
j@302
|
65 (apply #'midi-track-any event tracks)))
|