Browse Source

Add osc server param

master
cancel 6 years ago
parent
commit
8f824ed84a
  1. 5
      osc_out.c
  2. 3
      osc_out.h
  3. 19
      tui_main.c

5
osc_out.c

@ -10,7 +10,8 @@ struct Oosc_dev {
struct sockaddr_in addr; struct sockaddr_in addr;
}; };
Oosc_udp_create_error oosc_dev_create_udp(Oosc_dev** out_ptr, U16 port) { Oosc_udp_create_error oosc_dev_create_udp(Oosc_dev** out_ptr,
char const* dest_addr, U16 port) {
int udpfd = socket(AF_INET, SOCK_DGRAM, 0); int udpfd = socket(AF_INET, SOCK_DGRAM, 0);
if (udpfd < 0) { if (udpfd < 0) {
fprintf(stderr, "Failed to open UDP socket, error number: %d\n", errno); fprintf(stderr, "Failed to open UDP socket, error number: %d\n", errno);
@ -19,7 +20,7 @@ Oosc_udp_create_error oosc_dev_create_udp(Oosc_dev** out_ptr, U16 port) {
struct sockaddr_in addr; struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_addr.s_addr = inet_addr(dest_addr);
addr.sin_port = htons((U16)port); addr.sin_port = htons((U16)port);
Oosc_dev* dev = malloc(sizeof(Oosc_dev)); Oosc_dev* dev = malloc(sizeof(Oosc_dev));
dev->fd = udpfd; dev->fd = udpfd;

3
osc_out.h

@ -7,7 +7,8 @@ typedef enum {
Oosc_udp_create_error_couldnt_open_socket = 1, Oosc_udp_create_error_couldnt_open_socket = 1,
} Oosc_udp_create_error; } Oosc_udp_create_error;
Oosc_udp_create_error oosc_dev_create_udp(Oosc_dev** out_dev_ptr, U16 port); Oosc_udp_create_error oosc_dev_create_udp(Oosc_dev** out_dev_ptr,
char const* dest_addr, U16 port);
void oosc_dev_destroy(Oosc_dev* dev); void oosc_dev_destroy(Oosc_dev* dev);
// raw UDP datagram // raw UDP datagram
void oosc_send_datagram(Oosc_dev* dev, char const* data, Usz size); void oosc_send_datagram(Oosc_dev* dev, char const* data, Usz size);

19
tui_main.c

@ -25,6 +25,10 @@ static void usage() {
" -h or --help Print this message and exit.\n" " -h or --help Print this message and exit.\n"
"\n" "\n"
"OSC options:\n" "OSC options:\n"
" --osc-server <address>\n"
" IP address to send OSC messages to.\n"
" Default: 127.0.0.1\n"
"\n"
" --osc-port <number>\n" " --osc-port <number>\n"
" UDP Port to send OSC messages to.\n" " UDP Port to send OSC messages to.\n"
" Default: none\n" " Default: none\n"
@ -575,12 +579,13 @@ void app_apply_delta_secs(App_state* a, double secs) {
} }
} }
bool app_set_osc_udp_port(App_state* a, U16 port) { bool app_set_osc_udp(App_state* a, char const* dest_addr, U16 port) {
if (a->oosc_dev) { if (a->oosc_dev) {
oosc_dev_destroy(a->oosc_dev); oosc_dev_destroy(a->oosc_dev);
a->oosc_dev = NULL; a->oosc_dev = NULL;
} }
Oosc_udp_create_error err = oosc_dev_create_udp(&a->oosc_dev, port); Oosc_udp_create_error err =
oosc_dev_create_udp(&a->oosc_dev, dest_addr, port);
if (err) { if (err) {
return false; return false;
} }
@ -608,7 +613,7 @@ void send_output_events(Oosc_dev* oosc_dev, Midi_mode const* midi_mode,
ints[1] = 12 * em->octave + em->note; // note number ints[1] = 12 * em->octave + em->note; // note number
// ints[1] = 12 * 4 + em->note; // note number // ints[1] = 12 * 4 + em->note; // note number
ints[2] = em->velocity; // velocity ints[2] = em->velocity; // velocity
ints[2] = 127; // velocity // ints[2] = 127; // velocity
oosc_send_int32s(oosc_dev, midi_mode->osc_bidule.path, ints, oosc_send_int32s(oosc_dev, midi_mode->osc_bidule.path, ints,
ORCA_ARRAY_COUNTOF(ints)); ORCA_ARRAY_COUNTOF(ints));
} break; } break;
@ -840,6 +845,7 @@ void app_input_cmd(App_state* a, App_input_cmd ev) {
enum { enum {
Argopt_margins = UCHAR_MAX + 1, Argopt_margins = UCHAR_MAX + 1,
Argopt_osc_server,
Argopt_osc_port, Argopt_osc_port,
Argopt_osc_midi_bidule, Argopt_osc_midi_bidule,
}; };
@ -848,12 +854,14 @@ int main(int argc, char** argv) {
static struct option tui_options[] = { static struct option tui_options[] = {
{"margins", required_argument, 0, Argopt_margins}, {"margins", required_argument, 0, Argopt_margins},
{"help", no_argument, 0, 'h'}, {"help", no_argument, 0, 'h'},
{"osc-server", required_argument, 0, Argopt_osc_server},
{"osc-port", required_argument, 0, Argopt_osc_port}, {"osc-port", required_argument, 0, Argopt_osc_port},
{"osc-midi-bidule", required_argument, 0, Argopt_osc_midi_bidule}, {"osc-midi-bidule", required_argument, 0, Argopt_osc_midi_bidule},
{NULL, 0, NULL, 0}}; {NULL, 0, NULL, 0}};
char* input_file = NULL; char* input_file = NULL;
int margin_thickness = 2; int margin_thickness = 2;
U16 osc_port = 0; U16 osc_port = 0;
char const* osc_ip_send_addr = "127.0.0.1";
Midi_mode midi_mode; Midi_mode midi_mode;
midi_mode_init(&midi_mode); midi_mode_init(&midi_mode);
for (;;) { for (;;) {
@ -874,6 +882,9 @@ int main(int argc, char** argv) {
return 1; return 1;
} }
} break; } break;
case Argopt_osc_server: {
osc_ip_send_addr = optarg;
} break;
case Argopt_osc_port: { case Argopt_osc_port: {
int osc_port0 = atoi(optarg); int osc_port0 = atoi(optarg);
if (osc_port0 <= 0) { if (osc_port0 <= 0) {
@ -911,7 +922,7 @@ int main(int argc, char** argv) {
app_init(&app_state); app_init(&app_state);
if (osc_port != 0) { if (osc_port != 0) {
if (!app_set_osc_udp_port(&app_state, osc_port)) { if (!app_set_osc_udp(&app_state, osc_ip_send_addr, osc_port)) {
fprintf(stderr, "Failed to open OSC UDP port %d\n", (int)osc_port); fprintf(stderr, "Failed to open OSC UDP port %d\n", (int)osc_port);
exit(1); exit(1);
} }

Loading…
Cancel
Save