j@302: (cl:in-package #:amuse-midi) j@302: j@302: ;;;======================================================================== j@302: ;;; Functions that return features given an event. j@302: ;;;======================================================================== j@302: j@302: (defun midi-event-type (event) j@302: "Defines an arbitrary ordering for pitched and percussive events." j@302: (if (pitchedp event) 0 1)) j@302: j@302: ;;;======================================================================== j@302: ;;; Predicates for conditioning on event attributes. j@302: ;;; Useful for sia-datapoint-specs. j@302: ;;;======================================================================== j@302: j@302: ;;; midi-drum-sound j@302: (defun midi-drum-sound-eql (event sound) j@302: (eql (midi-drum-sound event) sound)) j@302: j@302: (defun make-midi-drum-sound-eql (sound) j@302: (lambda (event) j@302: (funcall #'midi-drum-sound-eql event sound))) j@302: j@302: (defun midi-drum-sound-any (event &rest sounds) j@302: (loop for sound in sounds j@302: do (if (midi-drum-sound-eql event sound) j@302: (return t)))) j@302: j@302: (defun make-midi-drum-sound-any (&rest sounds) j@302: (lambda (event) j@302: (apply #'midi-drum-sound-any event sounds))) j@302: j@302: ;;; midi-channel j@302: (defun midi-channel-eql (event channel) j@302: (eql (midi-channel event) channel)) j@302: j@302: (defun make-midi-channel-eql (channel) j@302: (lambda (event) j@302: (funcall #'midi-channel-eql event channel))) j@302: j@302: (defun midi-channel-any (event &rest channels) j@302: (loop for channel in channels j@302: do (if (midi-channel-eql event channel) j@302: (return t)))) j@302: j@302: (defun make-midi-channel-any (&rest channels) j@302: (lambda (event) j@302: (apply #'midi-channel-any event channels))) j@302: j@302: ;;; midi-track j@302: (defun midi-track-eql (event track) j@302: (eql (midi-track event) track)) j@302: j@302: (defun make-midi-track-eql (track) j@302: (lambda (event) j@302: (funcall #'midi-track-eql event track))) j@302: j@302: (defun midi-track-any (event &rest tracks) j@302: (loop for track in tracks j@302: do (if (midi-track-eql event track) j@302: (return t)))) j@302: j@302: (defun make-midi-track-any (&rest tracks) j@302: (lambda (event) j@302: (apply #'midi-track-any event tracks)))