15 #ifdef USE_LOSC // liblo for OSC
26 void osc_error(
int num,
const char *msg,
const char *path) {
27 logMsg(
kLogError,
"OSC server error %d in path %s: %s\n", num, path, msg);
34 logMsg(
"OSC server exiting.");
38 int quit_handler(
const char *path,
const char *types, lo_arg **argv,
int argc,
void *data,
void *user_data) {
45 int generic_handler(
const char *path,
const char *types, lo_arg **argv,
int argc,
void *data,
void *user_data) {
46 logMsg(
"OSC message: <%s>", path);
47 for (
unsigned i=0; i<argc; i++) {
48 printf(
"\t\targ %d '%c' ", i, types[i]);
49 lo_arg_pp((lo_type)types[i], argv[i]);
59 extern "C" void initOSC(
const char * thePort) {
61 sSrvThrd = lo_server_thread_new(thePort, osc_error);
62 #ifdef CSL_DEBUG // add method that will match any path and args
64 #endif // add method that will match the path /q with no args and exit
71 logMsg(
"mainOSCLoop starting");
76 logMsg(
"mainOSCLoop returning");
90 int paramSetter(
const char *path,
const char *types, lo_arg **argv,
int argc,
void *data,
void *user_data) {
93 context->
instr->setParameter(context->
selector, argc, (
void **)argv, types);
99 int playNote(
const char *path,
const char *types, lo_arg **argv,
int argc,
void *data,
void *user_data) {
101 logMsg(
"OSC playNote on instr %d", (context->
num + 1));
102 context->
instr->play();
108 int playWithArgs(
const char *path,
const char *types, lo_arg **argv,
int argc,
void *data,
void *user_data) {
111 context->
instr->playOSC(argc, (
void **) argv, types);
120 unsigned num_instruments = library.size();
121 logMsg(
"Setting up OSC address space for %d instruments", num_instruments);
123 for (
unsigned i = 0; i < num_instruments; i++) {
124 Instrument * instr = library[i];
125 unsigned num_accessors = instr->numAccessors();
129 for (
unsigned j = 0; j < num_accessors; j++) {
131 the_context->
instr = instr;
132 the_context->
num = i;
133 the_context->
selector = accs[j]->mSelector;
134 sprintf(iname,
"/i%d/%s", i+1, accs[j]->mName.c_str());
137 logMsg(
"\t\tAdding OSC method for %s (%d)", iname, accs[j]->mSelector);
141 sprintf(iname,
"/i%d/p", i + 1);
143 sprintf(iname,
"/i%d/pn", i + 1);
void logMsg(const char *format,...)
These are the public logging messages.
int generic_handler(const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data)
lo_server_thread_add_method(sSrvThrd,"/foo/bar","fi", foo_handler, NULL)
int quit_handler(const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data)
void mainOSCLoop(int port)
void playWithArgs(void *con, int arglen, const void *vargs, OSCTimeTag when, NetworkReturnAddressPtr ra)
void setupOSCInstrLibrary(std::vector< Instrument * > library)
vector< Accessor * > AccessorVector
Typedef for AccessorVector object.
std::vector< Instrument * > InstrumentVector
Players hold onto Instrument vectors/maps.
void playNote(void *con, int arglen, const void *vargs, OSCTimeTag when, NetworkReturnAddressPtr ra)
static lo_server_thread sSrvThrd