From a24ad80e13710c0450b93f47856227ace132fa76 Mon Sep 17 00:00:00 2001 From: Nils Date: Sat, 6 Apr 2024 20:14:41 +0200 Subject: [PATCH] Repair tool files after clap experiment --- meson.build | 1 + tools/clap-sfzload.c | 587 ---------------------------- tools/{jack-sfzload.c => sfzload.c} | 1 + tools/sfzload.clap | Bin 76496 -> 0 bytes 4 files changed, 2 insertions(+), 587 deletions(-) delete mode 100644 tools/clap-sfzload.c rename tools/{jack-sfzload.c => sfzload.c} (99%) delete mode 100755 tools/sfzload.clap diff --git a/meson.build b/meson.build index 398b164..f750f17 100644 --- a/meson.build +++ b/meson.build @@ -162,6 +162,7 @@ executable('sfzload', install: true, ) + #basename -a *.h install_headers( meson.current_build_dir()+'/config.h', diff --git a/tools/clap-sfzload.c b/tools/clap-sfzload.c deleted file mode 100644 index 26f06a3..0000000 --- a/tools/clap-sfzload.c +++ /dev/null @@ -1,587 +0,0 @@ -// https://github.com/free-audio/clap/blob/main/src/plugin-template.c -//gcc -fPIC -shared -g -Wall -Wextra -Wno-unused-parameter -lcalfbox-lss-static `pkg-config --cflags --libs glib-2.0` -lm -luuid -lsndfile -o sfzload.clap clap-sfzload.c -//gcc -fPIC -shared -g -lcalfbox-lss-static `pkg-config --cflags --libs glib-2.0` -lm -luuid -lsndfile -o sfzload.clap clap-sfzload.c -// Symlink sfzload.clap to ~/.clap - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -///////////////////////////// -////////// CALFBOX ////////// -///////////////////////////// - - -struct cbox_environment -{ - struct cbox_document *document; - struct cbox_engine *engine; - struct cbox_rt *realtime; - struct cbox_io io; - struct cbox_open_params params; - - struct cbox_layer *layer; - struct cbox_scene *scene; - - void *arg; - gchar *context; -}; -struct cbox_environment env; - -struct program_double_buffer -{ - gboolean left_buffer_active; - char directory[PATH_MAX]; - char abs_path[PATH_MAX]; - struct sampler_module * module; - struct sampler_program *pgm_left; - struct sampler_program *pgm_right; - struct sampler_program *pgm_active; -}; -struct program_double_buffer prg_buf; - - -void switch_program_buffer() { - - GError *error = NULL; - if (prg_buf.left_buffer_active) { - //printf("switching to right buffer\n"); - prg_buf.pgm_active = prg_buf.pgm_right; - } - else { - //printf("switching to left buffer\n"); - prg_buf.pgm_active = prg_buf.pgm_left; - } - - sampler_module_load_program_sfz(prg_buf.module, prg_buf.pgm_active, prg_buf.abs_path, 0, &error); //0 means "is from string" - if (error) fprintf(stderr, "Cannot load program from sfz: %s\n", error ? error->message : "unknown error"); - - //Registering programs needs to be done after loading the programs from sfz - sampler_register_program(prg_buf.module, prg_buf.pgm_active); - - sampler_select_program(prg_buf.module, 0, prg_buf.pgm_active->name, &error); - if (error) fprintf(stderr, "Cannot select program: %s\n", error ? error->message : "unknown error"); - - //Setting the channel to a program needs to be done after registering programs - sampler_channel_set_program(&prg_buf.module->channels[0], prg_buf.pgm_active); - - prg_buf.left_buffer_active = !prg_buf.left_buffer_active; - - //Clean inactive buffer and replace with empty one for next switch - if (prg_buf.left_buffer_active) { - //printf("cleaning right buffer\n"); - //CBOX_DELETE(prg_buf.pgm_right); segfault from time to time - prg_buf.pgm_right = sampler_program_new(prg_buf.module, 0, "sfzload_right", NULL, prg_buf.directory, &error); //program number 0. tarfile is NULL. We only give the sample dir here, the actual sfz is in sampler_module_load_program_sfz - if (error) fprintf(stderr, "Cannot create new program: %s\n", error ? error->message : "unknown error"); - - } - else { - //printf("cleaning left buffer\n"); - //CBOX_DELETE(prg_buf.pgm_left); segfault from time to time - prg_buf.pgm_left = sampler_program_new(prg_buf.module, 0, "sfzload_left", NULL, prg_buf.directory, &error); //program number 0. tarfile is NULL. We only give the sample dir here, the actual sfz is in sampler_module_load_program_sfz - if (error) fprintf(stderr, "Cannot create new program: %s\n", error ? error->message : "unknown error"); - } - - if (error) g_error_free(error); - error = NULL; - -} - -gboolean on_idle(struct cbox_command_target *fb, GError **error) -{ - if (env.realtime) - { - // Process results of asynchronous commands - cbox_rt_handle_cmd_queue(env.realtime); - - if (!cbox_midi_appsink_send_to(&env.engine->appsink, fb, error)) - return FALSE; - } - return TRUE; -} - - -void cleanup_resources(struct cbox_environment *env) -{ - if (env == NULL) return; - - printf("Starting cleanup...\n"); - - if (env->realtime) { - cbox_rt_stop(env->realtime); - CBOX_DELETE(env->realtime); - env->realtime = NULL; - } - - if (env->engine) { - CBOX_DELETE(env->engine); - env->engine = NULL; - } - - if (env->document) { - cbox_document_destroy(env->document); - env->document = NULL; - } - - cbox_wavebank_close(); - cbox_config_close(); - - if (env->context) { - g_free(env->context); - env->context = NULL; - } - - printf("Cleanup complete.\n"); -} - -///////////////////////////// -//////////// CLAP /////////// -///////////////////////////// - - - -static const clap_plugin_descriptor_t s_my_plug_desc = { - .clap_version = CLAP_VERSION_INIT, - .id = "org.laborejo.sfzloader", - .name = "SFZ Loader", - .vendor = "Laborejo Software Suite", - .url = "https://git.laborejo.org/lss/libcalfbox-lss", - .manual_url = "https://git.laborejo.org/lss/libcalfbox-lss", - .support_url = "https://laborejo.org/", - .version = "1.0.0", - .description = "Load and play a single SFZ file.", - .features = (const char *[]){CLAP_PLUGIN_FEATURE_INSTRUMENT, CLAP_PLUGIN_FEATURE_STEREO, NULL}, -}; - -typedef struct { - clap_plugin_t plugin; - const clap_host_t *host; - const clap_host_latency_t *host_latency; - const clap_host_log_t *host_log; - const clap_host_thread_check_t *host_thread_check; - const clap_host_state_t *host_state; - float sampleRate; - int midiKey; - - uint32_t latency; -} my_plug_t; - -///////////////////////////// -// clap_plugin_audio_ports // -///////////////////////////// - -static uint32_t my_plug_audio_ports_count(const clap_plugin_t *plugin, bool is_input) { - // We just declare 1 audio input and 1 audio output - return 1; -} - -static bool my_plug_audio_ports_get(const clap_plugin_t *plugin, - uint32_t index, - bool is_input, - clap_audio_port_info_t *info) { - if (index > 0) - return false; - info->id = 0; - snprintf(info->name, sizeof(info->name), "%s", "My Port Name"); - info->channel_count = 2; - info->flags = CLAP_AUDIO_PORT_IS_MAIN; - info->port_type = CLAP_PORT_STEREO; - info->in_place_pair = CLAP_INVALID_ID; - return true; -} - -static const clap_plugin_audio_ports_t s_my_plug_audio_ports = { - .count = my_plug_audio_ports_count, - .get = my_plug_audio_ports_get, -}; - -//////////////////////////// -// clap_plugin_note_ports // -//////////////////////////// - -static uint32_t my_plug_note_ports_count(const clap_plugin_t *plugin, bool is_input) { - // We just declare 1 note input - return 1; -} - -static bool my_plug_note_ports_get(const clap_plugin_t *plugin, - uint32_t index, - bool is_input, - clap_note_port_info_t *info) { - if (index > 0) - return false; - info->id = 0; - snprintf(info->name, sizeof(info->name), "%s", "My Port Name"); - info->supported_dialects = - CLAP_NOTE_DIALECT_CLAP | CLAP_NOTE_DIALECT_MIDI_MPE | CLAP_NOTE_DIALECT_MIDI2; - info->preferred_dialect = CLAP_NOTE_DIALECT_CLAP; - return true; -} - -static const clap_plugin_note_ports_t s_my_plug_note_ports = { - .count = my_plug_note_ports_count, - .get = my_plug_note_ports_get, -}; - -////////////////// -// clap_latency // -////////////////// - -uint32_t my_plug_latency_get(const clap_plugin_t *plugin) { - my_plug_t *plug = plugin->plugin_data; - return plug->latency; -} - -static const clap_plugin_latency_t s_my_plug_latency = { - .get = my_plug_latency_get, -}; - -//////////////// -// clap_state // -//////////////// - -bool my_plug_state_save(const clap_plugin_t *plugin, const clap_ostream_t *stream) { - my_plug_t *plug = plugin->plugin_data; - // TODO: write the state into stream - return true; -} - -bool my_plug_state_load(const clap_plugin_t *plugin, const clap_istream_t *stream) { - my_plug_t *plug = plugin->plugin_data; - // TODO: read the state from stream - return true; -} - -static const clap_plugin_state_t s_my_plug_state = { - .save = my_plug_state_save, - .load = my_plug_state_load, -}; - -///////////////// -// clap_plugin // -///////////////// - -static bool my_plug_init(const struct clap_plugin *plugin) { - my_plug_t *plug = plugin->plugin_data; - - // Fetch host's extensions here - // Make sure to check that the interface functions are not null pointers - plug->host_log = (const clap_host_log_t *)plug->host->get_extension(plug->host, CLAP_EXT_LOG); - plug->host_thread_check = (const clap_host_thread_check_t *)plug->host->get_extension(plug->host, CLAP_EXT_THREAD_CHECK); - plug->host_latency = (const clap_host_latency_t *)plug->host->get_extension(plug->host, CLAP_EXT_LATENCY); - plug->host_state = (const clap_host_state_t *)plug->host->get_extension(plug->host, CLAP_EXT_STATE); - return true; -} - -static void my_plug_destroy(const struct clap_plugin *plugin) { - my_plug_t *plug = plugin->plugin_data; - free(plug); -} - -static bool my_plug_activate(const struct clap_plugin *plugin, - double sample_rate, - uint32_t min_frames_count, - uint32_t max_frames_count) { - - my_plug_t *plug = plugin->plugin_data; - plug->sampleRate = sample_rate; - plug->midiKey = 59; - return true; -} - -static void my_plug_deactivate(const struct clap_plugin *plugin) {} - -static bool my_plug_start_processing(const struct clap_plugin *plugin) { return true; } - -static void my_plug_stop_processing(const struct clap_plugin *plugin) {} - -static void my_plug_reset(const struct clap_plugin *plugin) {} - -static void my_plug_process_event(my_plug_t *plug, const clap_event_header_t *hdr) { - if (hdr->space_id == CLAP_CORE_EVENT_SPACE_ID) { - switch (hdr->type) { - case CLAP_EVENT_NOTE_ON: { - const clap_event_note_t *ev = (const clap_event_note_t *)hdr; - // TODO: handle note on - plug->midiKey = ev->key; - printf("Note On: MIDI Key = %d\n", plug->midiKey); - break; - } - - case CLAP_EVENT_NOTE_OFF: { - const clap_event_note_t *ev = (const clap_event_note_t *)hdr; - // TODO: handle note off - break; - } - - case CLAP_EVENT_NOTE_CHOKE: { - const clap_event_note_t *ev = (const clap_event_note_t *)hdr; - // TODO: handle note choke - break; - } - - case CLAP_EVENT_NOTE_EXPRESSION: { - const clap_event_note_expression_t *ev = (const clap_event_note_expression_t *)hdr; - // TODO: handle note expression - break; - } - - case CLAP_EVENT_PARAM_VALUE: { - const clap_event_param_value_t *ev = (const clap_event_param_value_t *)hdr; - // TODO: handle parameter change - break; - } - - case CLAP_EVENT_PARAM_MOD: { - const clap_event_param_mod_t *ev = (const clap_event_param_mod_t *)hdr; - // TODO: handle parameter modulation - break; - } - - case CLAP_EVENT_TRANSPORT: { - const clap_event_transport_t *ev = (const clap_event_transport_t *)hdr; - // TODO: handle transport event - break; - } - - case CLAP_EVENT_MIDI: { - const clap_event_midi_t *ev = (const clap_event_midi_t *)hdr; - // TODO: handle MIDI event - break; - } - - case CLAP_EVENT_MIDI_SYSEX: { - const clap_event_midi_sysex_t *ev = (const clap_event_midi_sysex_t *)hdr; - // TODO: handle MIDI Sysex event - break; - } - - case CLAP_EVENT_MIDI2: { - const clap_event_midi2_t *ev = (const clap_event_midi2_t *)hdr; - // TODO: handle MIDI2 event - break; - } - } - } -} - - -static double phase = 0.0; - -static clap_process_status my_plug_process(const struct clap_plugin *plugin, - const clap_process_t *process) { - my_plug_t *plug = plugin->plugin_data; - const uint32_t nframes = process->frames_count; - const uint32_t nev = process->in_events->size(process->in_events); - uint32_t ev_index = 0; - uint32_t next_ev_frame = nev > 0 ? 0 : nframes; - - double frequency = 440 * pow(2, (plug->midiKey - 69) / 12.0); - const double phase_step = (2.0 * M_PI * frequency) / plug->sampleRate; - - /* - - for (uint32_t i = 0; i < nframes;) { - // handle every events that happrens at the frame "i" - while (ev_index < nev && next_ev_frame == i) { - const clap_event_header_t *hdr = process->in_events->get(process->in_events, ev_index); - if (hdr->time != i) { - next_ev_frame = hdr->time; - break; - } - - my_plug_process_event(plug, hdr); - ++ev_index; - - if (ev_index == nev) { - // we reached the end of the event list - next_ev_frame = nframes; - break; - } - } - - // process every samples until the next event - for (; i < next_ev_frame; ++i) { - // fetch input samples - const float in_l = process->audio_inputs[0].data32[0][i]; - const float in_r = process->audio_inputs[0].data32[1][i]; - - // TODO: process samples, here we simply swap left and right channels - const float out_l = in_r; - const float out_r = in_l; - - // store output samples - process->audio_outputs[0].data32[0][i] = out_l; - process->audio_outputs[0].data32[1][i] = out_r; - } - } - */ - - for (uint32_t i = 0; i < nframes; ++i) { - // handle every events that happens at the frame "i" - while (ev_index < nev && next_ev_frame == i) { - const clap_event_header_t *hdr = process->in_events->get(process->in_events, ev_index); - if (hdr->time != i) { - next_ev_frame = hdr->time; - break; - } - - my_plug_process_event(plug, hdr); - ++ev_index; - - if (ev_index == nev) { - // we reached the end of the event list - next_ev_frame = nframes; - break; - } - } - - // Generate and output the sine wave - float sample = sin(phase); - phase += phase_step; - if (phase >= 2.0 * M_PI) phase -= 2.0 * M_PI; - - // Output the same sine wave on both left and right channels - process->audio_outputs[0].data32[0][i] = sample * 0.5; // Left channel - process->audio_outputs[0].data32[1][i] = sample * 0.5; // Right channel - } - - - return CLAP_PROCESS_CONTINUE; -} - -static const void *my_plug_get_extension(const struct clap_plugin *plugin, const char *id) { - if (!strcmp(id, CLAP_EXT_LATENCY)) - return &s_my_plug_latency; - if (!strcmp(id, CLAP_EXT_AUDIO_PORTS)) - return &s_my_plug_audio_ports; - if (!strcmp(id, CLAP_EXT_NOTE_PORTS)) - return &s_my_plug_note_ports; - if (!strcmp(id, CLAP_EXT_STATE)) - return &s_my_plug_state; - // TODO: add support to CLAP_EXT_PARAMS - return NULL; -} - -static void my_plug_on_main_thread(const struct clap_plugin *plugin) {} - -clap_plugin_t *my_plug_create(const clap_host_t *host) { - my_plug_t *p = calloc(1, sizeof(*p)); - p->host = host; - p->plugin.desc = &s_my_plug_desc; - p->plugin.plugin_data = p; - p->plugin.init = my_plug_init; - p->plugin.destroy = my_plug_destroy; - p->plugin.activate = my_plug_activate; - p->plugin.deactivate = my_plug_deactivate; - p->plugin.start_processing = my_plug_start_processing; - p->plugin.stop_processing = my_plug_stop_processing; - p->plugin.reset = my_plug_reset; - p->plugin.process = my_plug_process; - p->plugin.get_extension = my_plug_get_extension; - p->plugin.on_main_thread = my_plug_on_main_thread; - - // Don't call into the host here - - return &p->plugin; -} - -///////////////////////// -// clap_plugin_factory // -///////////////////////// - -static struct { - const clap_plugin_descriptor_t *desc; - clap_plugin_t *(CLAP_ABI *create)(const clap_host_t *host); -} s_plugins[] = { - { - .desc = &s_my_plug_desc, - .create = my_plug_create, - }, -}; - -static uint32_t plugin_factory_get_plugin_count(const struct clap_plugin_factory *factory) { - return sizeof(s_plugins) / sizeof(s_plugins[0]); -} - -static const clap_plugin_descriptor_t * -plugin_factory_get_plugin_descriptor(const struct clap_plugin_factory *factory, uint32_t index) { - return s_plugins[index].desc; -} - -static const clap_plugin_t *plugin_factory_create_plugin(const struct clap_plugin_factory *factory, - const clap_host_t *host, - const char *plugin_id) { - if (!clap_version_is_compatible(host->clap_version)) { - return NULL; - } - - const int N = sizeof(s_plugins) / sizeof(s_plugins[0]); - for (int i = 0; i < N; ++i) - if (!strcmp(plugin_id, s_plugins[i].desc->id)) - return s_plugins[i].create(host); - - return NULL; -} - -static const clap_plugin_factory_t s_plugin_factory = { - .get_plugin_count = plugin_factory_get_plugin_count, - .get_plugin_descriptor = plugin_factory_get_plugin_descriptor, - .create_plugin = plugin_factory_create_plugin, -}; - -//////////////// -// clap_entry // -//////////////// - -static bool entry_init(const char *plugin_path) { - // called only once, and very first - - cbox_dom_init(); - - env.document = cbox_document_new(); - env.realtime = cbox_rt_new(env.document); - env.engine = cbox_engine_new(env.document, env.realtime); - env.context = NULL; - env.realtime->engine = env.engine; //inject engine into realtime struct - - cbox_config_init(""); - - //Autoconnect our jack outputs to system out - cbox_config_set_string("io", "out_1", "#1"); - cbox_config_set_string("io", "out_2", "#2"); - cbox_config_set_string("io", "midi", "*a2j:.*"); - cbox_config_set_string("io", "client_name", "sfzload"); - cbox_config_set_int("io", "enable_common_midi_input", 1); //last is a bool. This is the default, let's call it anyway. - - return true; -} - -static void entry_deinit(void) { - // called before unloading the DSO -} - -static const void *entry_get_factory(const char *factory_id) { - if (!strcmp(factory_id, CLAP_PLUGIN_FACTORY_ID)) - return &s_plugin_factory; - return NULL; -} - -// This symbol will be resolved by the host -CLAP_EXPORT const clap_plugin_entry_t clap_entry = { - .clap_version = CLAP_VERSION_INIT, - .init = entry_init, - .deinit = entry_deinit, - .get_factory = entry_get_factory, -}; diff --git a/tools/jack-sfzload.c b/tools/sfzload.c similarity index 99% rename from tools/jack-sfzload.c rename to tools/sfzload.c index 8f9bb21..8736ca7 100644 --- a/tools/jack-sfzload.c +++ b/tools/sfzload.c @@ -457,6 +457,7 @@ int main(int argc, char *argv[]) cbox_config_set_string("io", "midi", "*a2j:.*"); cbox_config_set_string("io", "client_name", "sfzload"); cbox_config_set_int("io", "enable_common_midi_input", 1); //last is a bool. This is the default, let's call it anyway. + cbox_config_set_int("sampler", "disable_mixer_controls", 1); //Ignore CC7 Volume and CC10 Pan so that SFZ can use these CCs themselves. printf("Create JACK Client\n"); diff --git a/tools/sfzload.clap b/tools/sfzload.clap deleted file mode 100755 index 812e62f0fedd17e251c3681d4951fce1c69dc385..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76496 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