LdBeth Posted December 20, 2022 Share Posted December 20, 2022 Inspired by the example from this thread but I could not find the related function been shipped with the OM application. The code requires OM3.0 because of LispWorks specific API but the concept should be simple enough to be implemented in Clozure CL. After some midi objects has been compiled and inserted to the playlist one can use run-playlist to start play. While it is still playing one can feed more midi objects queued to the playlist. When the playlist is empty and after the specified seconds of timeout, the player process would exit. (setq midi1 (compile-score 'score1)) (setq midi2 (compile-score 'score2)) (setq midi3 (compile-score 'score3)) (defparameter *playlist* (mp:make-mailbox)) (defun push-to-list (item) (let ((midi (cond ((eq (type-of item) 'midi:midi) item) ((symbolp item) (compile-score item)) ((or (stringp item) (pathnamep item)) (midi:read-midi-file item))))) (mp:mailbox-send *playlist* midi))) (defun run-playlist (&key (timeout 5) (ignore-ports nil)) (mp:process-run-function "Playing..." () (lambda () (loop (let ((current (mp:mailbox-read *playlist* "Wait for feed tracks" timeout))) (if current (mp:process-join (start-midi current :ignore-ports ignore-ports)) (return))))))) (push-to-list midi1) (push-to-list midi2) (run-playlist 5) (push-to-list midi3) Stephane Boussuge and AM 2 Quote Link to comment Share on other sites More sharing options...
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.