static LV2UI_Handle instantiate(const LV2UI_Descriptor* descriptor, const char* plugin_uri, const char* bundle_path, LV2UI_Write_Function write_function, LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features) { DrMrUi *ui = (DrMrUi*)malloc(sizeof(DrMrUi)); ui->write = write_function; ui->controller = controller; ui->drmr_widget = NULL; ui->curKit = -1; ui->samples = 0; ui->bundle_path = g_strdup(bundle_path); *widget = NULL; build_drmr_ui(ui); ui->kits = scan_kits(); ui->gain_quark = g_quark_from_string("drmr_gain_quark"); ui->pan_quark = g_quark_from_string("drmr_pan_quark"); ui->gain_sliders = NULL; ui->pan_sliders = NULL; // store previous gain/pan vals to re-apply to sliders when we // change kits ui->gain_vals = malloc(32*sizeof(float)); memset(ui->gain_vals,0,32*sizeof(float)); ui->pan_vals = malloc(32*sizeof(float)); memset(ui->pan_vals,0,32*sizeof(float)); ui->cols = 4; ui->forceUpdate = false; fill_kit_combo(ui->kit_combo, ui->kits); #ifdef DRMR_UI_ZERO_SAMP ui->startSamp = DRMR_UI_ZERO_SAMP; #else ui->startSamp = 0; #endif *widget = ui->drmr_widget; return ui; }
static LV2_Handle instantiate(const LV2_Descriptor* descriptor, double rate, const char* bundle_path, const LV2_Feature* const* features) { int i; DrMr* drmr = malloc(sizeof(DrMr)); drmr->map = NULL; drmr->samples = NULL; drmr->num_samples = 0; drmr->curKit = -1; drmr->rate = rate; if (pthread_mutex_init(&drmr->load_mutex, 0)) { fprintf(stderr, "Could not initialize load_mutex.\n"); free(drmr); return 0; } if (pthread_cond_init(&drmr->load_cond, 0)) { fprintf(stderr, "Could not initialize load_cond.\n"); free(drmr); return 0; } // Map midi uri while(*features) { if (!strcmp((*features)->URI, LV2_URI_MAP_URI)) { drmr->map = (LV2_URI_Map_Feature *)((*features)->data); drmr->uris.midi_event = drmr->map->uri_to_id (drmr->map->callback_data, "http://lv2plug.in/ns/ext/event", "http://lv2plug.in/ns/ext/midi#MidiEvent"); } features++; } if (!drmr->map) { fprintf(stderr, "LV2 host does not support uri-map.\n"); free(drmr); return 0; } drmr->kits = scan_kits(); if (!drmr->kits) { fprintf(stderr, "No drum kits found\n"); free(drmr); return 0; } if (pthread_create(&drmr->load_thread, 0, load_thread, drmr)) { fprintf(stderr, "Could not initialize loading thread.\n"); free(drmr); return 0; } drmr->gains = malloc(32*sizeof(float*)); drmr->pans = malloc(32*sizeof(float*)); for(i = 0;i<32;i++) { drmr->gains[i] = NULL; drmr->pans[i] = NULL; } return (LV2_Handle)drmr; }