Skip to content

Commit

Permalink
Add osc-send-from
Browse files Browse the repository at this point in the history
  • Loading branch information
taw10 committed Mar 17, 2024
1 parent 52c58f1 commit 5dcb31c
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 9 deletions.
46 changes: 38 additions & 8 deletions guile-osc.c
Original file line number Diff line number Diff line change
Expand Up @@ -295,18 +295,12 @@ static SCM osc_recv(SCM rest)
}


static SCM osc_send(SCM addr_obj, SCM path_obj, SCM rest)
static lo_message make_lo_message(SCM rest)
{
lo_address addr;
char *path;
int n_args;
lo_message message;
int i;

scm_assert_foreign_object_type(osc_address_type, addr_obj);
addr = scm_foreign_object_ref(addr_obj, 0);
path = scm_to_utf8_stringn(path_obj, NULL);

n_args = scm_to_int(scm_length(rest));

message = lo_message_new();
Expand All @@ -328,9 +322,44 @@ static SCM osc_send(SCM addr_obj, SCM path_obj, SCM rest)
}
}

lo_send_message(addr, path, message);
return message;
}


static SCM osc_send_from(SCM addr_obj, SCM from_obj, SCM path_obj, SCM rest)
{
lo_address addr;
char *path;
lo_server server;
lo_message message;

scm_assert_foreign_object_type(osc_address_type, addr_obj);
addr = scm_foreign_object_ref(addr_obj, 0);
path = scm_to_utf8_stringn(path_obj, NULL);

scm_assert_foreign_object_type(osc_server_type, from_obj);
server = scm_foreign_object_ref(from_obj, 0);

message = make_lo_message(rest);
lo_send_message_from(addr, server, path, message);
lo_message_free(message);
return SCM_UNSPECIFIED;
}


static SCM osc_send(SCM addr_obj, SCM path_obj, SCM rest)
{
lo_address addr;
char *path;
lo_message message;

scm_assert_foreign_object_type(osc_address_type, addr_obj);
addr = scm_foreign_object_ref(addr_obj, 0);
path = scm_to_utf8_stringn(path_obj, NULL);

message = make_lo_message(rest);
lo_send_message(addr, path, message);
lo_message_free(message);
return SCM_UNSPECIFIED;
}

Expand Down Expand Up @@ -365,6 +394,7 @@ void init_guile_osc()
scm_c_define_gsubr("add-osc-method", 4, 0, 0, add_osc_method);
scm_c_define_gsubr("make-osc-address", 1, 0, 0, make_osc_address);
scm_c_define_gsubr("osc-send", 2, 0, 1, osc_send);
scm_c_define_gsubr("osc-send-from", 3, 0, 1, osc_send_from);

scm_add_feature("guile-osc");
}
3 changes: 2 additions & 1 deletion open-sound-control/api.scm
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
osc-recv

make-osc-address
osc-send))
osc-send
osc-send-from))


(if (not (provided? 'guile-osc))
Expand Down
1 change: 1 addition & 0 deletions open-sound-control/client.scm
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@
(define-module (open-sound-control client)
#:use-module (open-sound-control api)
#:re-export (osc-send
osc-send-from
make-osc-address))

0 comments on commit 5dcb31c

Please sign in to comment.