From c05e271a0507231eaf131930b5b9711ef85ae4a8 Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Tue, 8 Oct 2024 16:14:22 +0200 Subject: MIDI is now read in threaded way --- main.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 17 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index c196cdd..3a45592 100644 --- a/main.c +++ b/main.c @@ -2,32 +2,48 @@ #include #include #include +#include #include "version.h" +#include "midi.h" void help(const char *argv0) { printf("Usage: %s [options]\n" "\nAvailable options:\n" - " -h,--help this help\n" - " -v,--version show version\n" - " -l,--list list available devices\n" - " -p,--port=client:port device port\n", + " -l,--list list available devices\n" + " -p,--port=client:port device port\n" + " -s,--soundfont=file.sf2 soundfont file\n" + " -h,--help this help\n" + " -v,--version show version\n", argv0); } int main(int argc, char *argv[]) { - const char short_options[] = "hvlp"; + const char short_options[] = "lp:s:hv:"; const struct option long_options[] = { - { "help", 0, NULL, 'h' }, - { "version", 0, NULL, 'v' }, { "list", 0, NULL, 'l' }, { "port", 1, NULL, 'p' }, + { "soundfont", 1, NULL, 's' }, + { "help", 0, NULL, 'h' }, + { "version", 0, NULL, 'v' }, { 0 }, }; - int c; - while ((c = getopt_long(argc, argv, short_options, long_options, NULL)) != -1) { - switch (c) { + char *port_name = NULL; + char *soundfont_file = NULL; + + int opt; + while ((opt = getopt_long(argc, argv, short_options, long_options, NULL)) != -1) { + switch (opt) { + case 'l': + fprintf(stderr, "List feature is NOT implemented yet.\n"); + return 0; + case 'p': + port_name = optarg; + break; + case 's': + soundfont_file = optarg; + break; case 'h': help(argv[0]); return 0; @@ -38,18 +54,33 @@ int main(int argc, char *argv[]) { fprintf(stdout, "%s\n", TTDAW_WARRANTY); fprintf(stdout, "\n%s\n", TTDAW_AUTHOR); return 0; - case 'l': - fprintf(stderr, "List feature is NOT implemented yet.\n"); - return 0; - case 'p': - fprintf(stderr, "Port feature is NOT implemented yet.\n"); - return 0; default: - fprintf(stdout, "No option provided\n"); + fprintf(stdout, "Missing options. Check help.\n"); return 0; } } + if (port_name == NULL || soundfont_file == NULL) { + fprintf(stdout, "Missing options. Check help.\n\n"); + fprintf(stdout, "Port and soundfile are required fields.\n\n"); + return 1; + } + + fprintf(stdout, "> Device port: %s\n", port_name); + fprintf(stdout, "> Soundfont: %s\n", soundfont_file); + + // Create and start MIDI thread. + pthread_t midi_thread; + MidiArgs midi_args = { port_name }; + + if (pthread_create(&midi_thread, NULL, midi, (void*)&midi_args) != 0) { + fprintf(stderr, "Error creating midi thread\n"); + return 1; + } + + pthread_join(midi_thread, NULL); + + fprintf(stdout, "Exiting...\n"); return 0; } -- cgit v1.2.3