(in-package :om) (defmethod! filter-pitch-range ((self note) (min number) (max number) &optional (mode 'pass)) :icon 262 :indoc '("self" "min" "max" "mode") :initvals '( t 6000 6100 'pass) :menuins '((3 (("pass" 'pass) ("reject" 'reject)))) :doc "Filters according to pitch range and (inclusive). by default is pass." (let ((midic (midic self))) (case mode (pass (if (and (>= midic min) (<= midic max)) self)) (reject (if (not (and (>= midic min) (<= midic max))) self))))) (defmethod! filter-pitch-range ((self chord) (min number) (max number) &optional (mode 'pass)) (let* ((notes (inside self)) (flt (remove nil (loop for i in notes collect (filter-pitch-range i min max mode))))) (if flt (objfromobjs flt (make-instance 'chord))))) (defmethod! filter-pitch-range ((self chord-seq) (min number) (max number) &optional (mode 'pass)) (let* ((chords (inside self)) (flt (loop for i in chords collect (filter-pitch-range i min max mode))) ons) (loop for i in flt for on in (lonset self) do (if i (push on ons))) (if flt (let ((chrdseq (objfromobjs (remove nil flt) (make-instance 'chord-seq)))) (setf (lonset chrdseq) (reverse ons)) chrdseq))))