diff --git a/src/host.c b/src/host.c index c62806d..0a77f8a 100644 --- a/src/host.c +++ b/src/host.c @@ -281,12 +281,29 @@ bool kuriborosu_host_load_file(Kuriborosu* const kuri, const char* const filenam return false; } +bool kuriborosu_host_set_plugin_custom_data(Kuriborosu* kuri, const char* type, const char* key, const char* value) +{ + CARLA_SAFE_ASSERT_RETURN(kuri != NULL, false); + CARLA_SAFE_ASSERT_RETURN(type != NULL, false); + CARLA_SAFE_ASSERT_RETURN(key != NULL, false); + CARLA_SAFE_ASSERT_RETURN(value != NULL, false); + + const uint32_t plugin_count = carla_get_current_plugin_count(kuri->carla_handle); + CARLA_SAFE_ASSERT_RETURN(plugin_count != 0, false); + + const uint32_t plugin_id = plugin_count - 1; + + carla_set_custom_data(kuri->carla_handle, plugin_id, type, key, value); + printf("set custom data '%s'\n", value); + return true; +} + bool kuriborosu_host_load_plugin(Kuriborosu* kuri, const char* filenameOrUID) { CARLA_SAFE_ASSERT_RETURN(kuri != NULL, false); CARLA_SAFE_ASSERT_RETURN(filenameOrUID != NULL, false); - if (carla_add_plugin(kuri->carla_handle, BINARY_NATIVE, PLUGIN_LV2, "", "", filenameOrUID, 0, NULL, 0x0)) + if (carla_add_plugin(kuri->carla_handle, BINARY_NATIVE, PLUGIN_LV2, "", "", filenameOrUID, 0, NULL, PLUGIN_OPTIONS_NULL)) return true; fprintf(stderr, "Failed to load plugin %s, error was: %s\n", diff --git a/src/host.h b/src/host.h index 2bb9a0d..5ae68d8 100644 --- a/src/host.h +++ b/src/host.h @@ -41,6 +41,7 @@ void kuriborosu_host_destroy(Kuriborosu* kuri); bool kuriborosu_host_load_file(Kuriborosu* kuri, const char* filename); bool kuriborosu_host_load_plugin(Kuriborosu* kuri, const char* filenameOrUID); +bool kuriborosu_host_set_plugin_custom_data(Kuriborosu* kuri, const char* type, const char* key, const char* value); bool kuriborosu_host_render_to_file(Kuriborosu* kuri, const file_render_options_t* options); double get_file_length_from_last_plugin(Kuriborosu* kuri); diff --git a/src/kuriborosu.c b/src/kuriborosu.c index 6d7dc22..9203a99 100644 --- a/src/kuriborosu.c +++ b/src/kuriborosu.c @@ -1,6 +1,6 @@ /* * kuriborosu - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2023 Filipe Coelho * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published @@ -25,13 +25,13 @@ int main(int argc, char* argv[]) { // TODO use more advanced opts - uint32_t opts_buffer_size = 1024; + uint32_t opts_buffer_size = 256; uint32_t opts_sample_rate = 48000; if (argc >= 2 && strcmp(argv[1], "--version") == 0) { printf("kuriborosu v0.0.0, using Carla v" CARLA_VERSION_STRING "\n" - "Copyright 2021 Filipe Coelho \n" + "Copyright 2021-2023 Filipe Coelho \n" "License: ???\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n"); @@ -62,10 +62,12 @@ int main(int argc, char* argv[]) const bool isfile = strchr(infile, '.') != NULL || strchr(infile, '/') != NULL; if (isfile) { + printf("loading file '%s'...\n", infile); if (! kuriborosu_host_load_file(kuri, infile)) goto error; file_frames = (uint32_t)(get_file_length_from_last_plugin(kuri) * opts_sample_rate + 0.5); + printf("file has %u frames, %g seconds\n", file_frames, (double)file_frames/opts_sample_rate); } else { @@ -89,12 +91,34 @@ int main(int argc, char* argv[]) for (int i = 3; i < argc; ++i) { const char* const plugin_arg = argv[i]; + printf("%d %s\n", i, plugin_arg); // check if file if (plugin_arg[0] == '.' || plugin_arg[0] == '/') + { kuriborosu_host_load_file(kuri, plugin_arg); + } + // check if argument + else if (plugin_arg[0] == '-') + { + switch (plugin_arg[1]) + { + case 'p': + // TODO complete me + if (++i < argc) + { + kuriborosu_host_set_plugin_custom_data(kuri, CUSTOM_DATA_TYPE_PATH, "file", argv[i]); + } + break; + default: + // TODO give error + break; + } + } else + { kuriborosu_host_load_plugin(kuri, plugin_arg); + } } const file_render_options_t options = {