osc-sc/osc-call [ Functions ]

[ Top ] [ Functions ]


 Allow OSC (over UDP) messages to be sent for processing.  The function
 waits for input and processes in an endless loop; send 'quit' to stop the
 function and return to the interpreter.  Messages the function doesn't
 understand will be ignored after a warning being printed.

 As this function only terminates when a 'quit' message is sent via OSC, the
 only way to quit from within Lisp is to send the Interrupt Command (usually
 Control-C, twice).  In that case, the open sockets will remain open, and
 only closed before reopening the next time this function is called.
 Lisp code can be sent, e.g. in MaxMSP via a message, including
 opening/closing parentheses and nested calls; symbols should be quoted as
 per usual.  

 The first two tokens in the list must be /osc-sc and a (usually unique)
 identifer e.g. ((/osc-sc 1060-osc-sc-eval (print 'dog) )) Both of these
 tokens will be sent back over OSC in a list, along with the result of the
 Lisp call.  If you're using MaxMSP I would recommend using
 osc-sc-eval.maxpat (see below) to evaluate your Lisp code as this will
 package it up with the right tokens and send the evaluated result out of
 its outlet without causing conflicts with other instances of itself.

 For an example MaxMSP patch, see osc-test.maxpat in the examples folder of
 the documentation: http://michael-edwards.org/sc/examples/osc-test.maxpat
 You'll also need http://michael-edwards.org/sc/examples/osc-sc-eval.maxpat

 Note that as of November 2020, functions that return lists can also be
 processed: each element will be sent back to Max et al via UDP.
 NB: Currently only works in SBCL.
     Some lists (e.g. those including strings/symbols) might not be
     recognised as lists by MaxMPS's [route], so process them directly after


 keyword arguments:
 - :listen-port. The UDP port to listen to for messages. Default = 8090.
 - :send-ip.  The IP address to send UDP messages back out on. 
    Default = #(127 0 0 1))
 - :send-port. The UDP port to send messages back out on. Default = 8091.
 - :print. Print messages as they arrive. Default = NIL.




(defun osc-call (&key
                 (listen-port 8090)
                 (send-ip #(127 0 0 1))
                 (print nil)
                 (send-port 8091))