On Thu, 23 Oct 2008, Kjetil S. Matheussen wrote:
> > I'm no expert in OSC, but I think using a C library, such as > liblo would be easier to use in Snd than OscPack, > which is a C++ library. > > Here's an example client: > http://liblo.svn.sourceforge.net/viewvc/liblo/trunk/examples/example_client.c?revision=121&view=markup > > Using eval-c, the example (up to the first "send" command only > and without the "blob"), can be written like this: > > (eval-c-add-int-type "int32_t") > (eval-c "-llo" > "#include <lo/lo.h>" > (proto->public > "lo_address lo_address_new(const char *host, const char *port); > int lo_send_message (lo_address targ, const char *path, lo_message > msg); > lo_message lo_message_new (void); > void lo_message_free (lo_message m); > void lo_message_add_int32 (lo_message m, int32_t a); > void lo_message_add_float (lo_message m, float a); > void lo_message_add_string (lo_message m, const char *a);")) > > (define t (lo_address_new #f "7770")) > > (define message (lo_message_new)) > > (lo_message_add_float message 0.12345678) > (lo_message_add_float message 23.0) > > (define result (lo_send_message t "/foo/bar" message)) > A convenient function: (define (osc_send host port path . args) (define address (lo_address_new host (if (string? port) port (number->string port)))) (define message (lo_message_new)) (for-each (lambda (arg) (cond ((and (number? arg) (integer? arg)) (lo_message_add_int32 message arg))) ((number? arg) (lo_message_add_float message arg)) ((string? arg) (lo_message_add_string message arg)) (else (error "unkown arg" arg)))) args) (let ((res (lo_send_message address path message))) (lo_message_free message) res)) (osc_send t #f 7770 "/foo/bar" 5.2 9.4 "hello" 9234/234) ;; ( #f means local host ) _______________________________________________ Cmdist mailing list [email protected] http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist
