diff --git a/engine.c b/engine.c index 3e6863e..8885480 100644 --- a/engine.c +++ b/engine.c @@ -191,6 +191,10 @@ int engine_init(Engine *engine, const char *client_name, DispatchFn dispatch) { engine->sample_rate = jack_get_sample_rate(engine->client); + // Initialize Carla host + carla_init(&engine->carla_host, engine->client); + carla_scan_plugins(&engine->carla_host); + return 0; } diff --git a/engine.h b/engine.h index f73acdd..223302b 100644 --- a/engine.h +++ b/engine.h @@ -5,6 +5,7 @@ #include #include #include "dispatcher.h" +#include "carla.h" typedef struct { jack_client_t *client; @@ -18,6 +19,8 @@ typedef struct { DispatchFn dispatch; jack_nframes_t sample_rate; bool running; + + CarlaHost carla_host; // Carla host state for plugin management } Engine; int engine_init(Engine *engine, const char *client_name, DispatchFn dispatch); diff --git a/gui.c b/gui.c index a6960d0..a50bf39 100644 --- a/gui.c +++ b/gui.c @@ -46,7 +46,7 @@ static int loop_length = 8; /* beats */ static int current_beat = 0; /* Carla host and plugin URI input */ -static CarlaHost carla_host; +/* CarlaHost is now stored in Engine struct */ static char plugin_uri_input[256]; static int plugin_uri_input_len = 0; static int selected_channel = 0; @@ -136,7 +136,7 @@ static void gui_update(void) mu_layout_row(ctx, 1, (int[]) { -1 }, 0); if (mu_button(ctx, "Add Plugin")) { if (plugin_uri_input_len > 0) { - carla_add_plugin(&carla_host, selected_channel, plugin_uri_input, PLUGIN_TYPE_INTERNAL); + carla_add_plugin(&g_engine->carla_host, selected_channel, plugin_uri_input, PLUGIN_TYPE_INTERNAL); plugin_uri_input_len = 0; plugin_uri_input[0] = '\0'; } @@ -155,8 +155,7 @@ int gui_main(Engine *engine) { g_engine = engine; - /* Initialize Carla host */ - carla_init(&carla_host, engine->client); + /* Carla host is now initialized in engine_init */ /* initialise microui */ ctx = malloc(sizeof(mu_Context)); @@ -259,7 +258,7 @@ int gui_main(Engine *engine) } /* cleanup */ - carla_cleanup(&carla_host); + carla_cleanup(&g_engine->carla_host); endwin(); free(ctx); return 0; diff --git a/main.c b/main.c index 392ef63..9eb6cf3 100644 --- a/main.c +++ b/main.c @@ -97,10 +97,7 @@ int main(int argc, char *argv[]) { initial_state.clips[i].read_position = 0; } - // Initialize Carla host in the initial state (before dispatcher starts) - carla_init(&initial_state.carla_host, NULL); - carla_scan_plugins(&initial_state.carla_host); - + // Carla host is now initialized in engine_init // Initialize dispatcher dispatch = dispatcher_init(&initial_state); diff --git a/tui.c b/tui.c index 781a180..344c56c 100644 --- a/tui.c +++ b/tui.c @@ -323,7 +323,7 @@ static void draw_fuzzy_search(void) { attron(A_REVERSE); } int count; - const char **plugins = carla_get_available_plugins(NULL, &count); + const char **plugins = carla_get_available_plugins(&g_engine->carla_host, &count); if (plugins && idx >= 0 && idx < count) { mvprintw(start_y + 2 + i, start_x, "%s", plugins[idx]); } @@ -360,7 +360,7 @@ static bool handle_fuzzy_search(int ch) { // Update results fuzzy_search.num_results = 0; int count; - const char **plugins = carla_get_available_plugins(NULL, &count); + const char **plugins = carla_get_available_plugins(&g_engine->carla_host, &count); for (int i = 0; i < count; i++) { if (fuzzy_match(fuzzy_search.query, plugins[i])) { fuzzy_search.result_indices[fuzzy_search.num_results++] = i; @@ -391,7 +391,7 @@ static bool handle_fuzzy_search(int ch) { // Update results fuzzy_search.num_results = 0; int count; - const char **plugins = carla_get_available_plugins(NULL, &count); + const char **plugins = carla_get_available_plugins(&g_engine->carla_host, &count); for (int i = 0; i < count; i++) { if (fuzzy_match(fuzzy_search.query, plugins[i])) { fuzzy_search.result_indices[fuzzy_search.num_results++] = i; @@ -417,7 +417,7 @@ static void start_fuzzy_search(const char *prompt, void (*callback)(const char * // Initialize results with all plugins fuzzy_search.num_results = 0; int count = 0; - carla_get_available_plugins(NULL, &count); + carla_get_available_plugins(&g_engine->carla_host, &count); for (int i = 0; i < count; i++) { fuzzy_search.result_indices[fuzzy_search.num_results++] = i; }