annotate implementations/midi/functions.lisp @ 228:16b99fc989aa

Add some basic midi predicate and accessor functions. Ignore-this: ab60873a92efc7f4c3cd98cdb938dcea darcs-hash:20090918100419-16a00-bd8423ddea7a4700d7e1c5300e4dafd35113897c.gz committer: Jamie Forth <j.forth@gold.ac.uk>
author j.forth <j.forth@gold.ac.uk>
date Thu, 24 Feb 2011 11:23:18 +0000
parents
children
rev   line source
j@228 1 (cl:in-package #:amuse-midi)
j@228 2
j@228 3 ;;;========================================================================
j@228 4 ;;; Functions that return features given an event.
j@228 5 ;;;========================================================================
j@228 6
j@228 7 (defun midi-event-type (event)
j@228 8 "Defines an arbitrary ordering for pitched and percussive events."
j@228 9 (if (pitchedp event) 0 1))
j@228 10
j@228 11 ;;;========================================================================
j@228 12 ;;; Predicates for conditioning on event attributes.
j@228 13 ;;; Useful for sia-datapoint-specs.
j@228 14 ;;;========================================================================
j@228 15
j@228 16 ;;; midi-drum-sound
j@228 17 (defun midi-drum-sound-eql (event sound)
j@228 18 (eql (midi-drum-sound event) sound))
j@228 19
j@228 20 (defun make-midi-drum-sound-eql (sound)
j@228 21 (lambda (event)
j@228 22 (funcall #'midi-drum-sound-eql event sound)))
j@228 23
j@228 24 (defun midi-drum-sound-any (event &rest sounds)
j@228 25 (loop for sound in sounds
j@228 26 do (if (midi-drum-sound-eql event sound)
j@228 27 (return t))))
j@228 28
j@228 29 (defun make-midi-drum-sound-any (&rest sounds)
j@228 30 (lambda (event)
j@228 31 (apply #'midi-drum-sound-any event sounds)))
j@228 32
j@228 33 ;;; midi-channel
j@228 34 (defun midi-channel-eql (event channel)
j@228 35 (eql (midi-channel event) channel))
j@228 36
j@228 37 (defun make-midi-channel-eql (channel)
j@228 38 (lambda (event)
j@228 39 (funcall #'midi-channel-eql event channel)))
j@228 40
j@228 41 (defun midi-channel-any (event &rest channels)
j@228 42 (loop for channel in channels
j@228 43 do (if (midi-channel-eql event channel)
j@228 44 (return t))))
j@228 45
j@228 46 (defun make-midi-channel-any (&rest channels)
j@228 47 (lambda (event)
j@228 48 (apply #'midi-channel-any event channels)))
j@228 49
j@228 50 ;;; midi-track
j@228 51 (defun midi-track-eql (event track)
j@228 52 (eql (midi-track event) track))
j@228 53
j@228 54 (defun make-midi-track-eql (track)
j@228 55 (lambda (event)
j@228 56 (funcall #'midi-track-eql event track)))
j@228 57
j@228 58 (defun midi-track-any (event &rest tracks)
j@228 59 (loop for track in tracks
j@228 60 do (if (midi-track-eql event track)
j@228 61 (return t))))
j@228 62
j@228 63 (defun make-midi-track-any (&rest tracks)
j@228 64 (lambda (event)
j@228 65 (apply #'midi-track-any event tracks)))