Make parser layer aware
This commit is contained in:
parent
85a7e73969
commit
9e760341b4
2
Makefile
2
Makefile
@ -10,7 +10,7 @@ $(BUNDLE): manifest.ttl drmr.ttl drmr_ui.xml drmr.so drmr_ui.so
|
|||||||
drmr.so: drmr.c drmr_hydrogen.c
|
drmr.so: drmr.c drmr_hydrogen.c
|
||||||
$(CC) -g -shared -fPIC -DPIC drmr.c drmr_hydrogen.c `pkg-config --cflags --libs lv2-plugin sndfile` -lexpat -lm -o drmr.so
|
$(CC) -g -shared -fPIC -DPIC drmr.c drmr_hydrogen.c `pkg-config --cflags --libs lv2-plugin sndfile` -lexpat -lm -o drmr.so
|
||||||
|
|
||||||
drmr_ui.so: drmr_ui.c
|
drmr_ui.so: drmr_ui.c drmr_hydrogen.c
|
||||||
$(CC) -g -shared -fPIC -DPIC drmr_ui.c drmr_hydrogen.c `pkg-config --cflags --libs lv2-plugin gtk+-2.0 sndfile` -lexpat -lm -o drmr_ui.so
|
$(CC) -g -shared -fPIC -DPIC drmr_ui.c drmr_hydrogen.c `pkg-config --cflags --libs lv2-plugin gtk+-2.0 sndfile` -lexpat -lm -o drmr_ui.so
|
||||||
|
|
||||||
install: $(BUNDLE)
|
install: $(BUNDLE)
|
||||||
|
@ -36,11 +36,21 @@ static char* default_drumkit_locations[] = {
|
|||||||
|
|
||||||
#define MAX_CHAR_DATA 512
|
#define MAX_CHAR_DATA 512
|
||||||
|
|
||||||
|
struct instrument_layer {
|
||||||
|
char* filename;
|
||||||
|
int min;
|
||||||
|
int max;
|
||||||
|
int gain;
|
||||||
|
struct instrument_layer *next;
|
||||||
|
};
|
||||||
|
|
||||||
struct instrument_info {
|
struct instrument_info {
|
||||||
int id;
|
int id;
|
||||||
char* filename;
|
char* filename;
|
||||||
char* name;
|
char* name;
|
||||||
struct instrument_info* next;
|
int gain;
|
||||||
|
struct instrument_layer *layers;
|
||||||
|
struct instrument_info *next;
|
||||||
// maybe pan/vol/etc..
|
// maybe pan/vol/etc..
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -57,9 +67,12 @@ struct hp_info {
|
|||||||
char in_info;
|
char in_info;
|
||||||
char in_instrument_list;
|
char in_instrument_list;
|
||||||
char in_instrument;
|
char in_instrument;
|
||||||
|
char in_layer;
|
||||||
|
char counted_cur_inst;
|
||||||
int cur_off;
|
int cur_off;
|
||||||
char cur_buf[MAX_CHAR_DATA];
|
char cur_buf[MAX_CHAR_DATA];
|
||||||
struct instrument_info* cur_instrument;
|
struct instrument_info* cur_instrument;
|
||||||
|
struct instrument_layer* cur_layer;
|
||||||
struct kit_info* kit_info;
|
struct kit_info* kit_info;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -70,6 +83,13 @@ startElement(void *userData, const char *name, const char **atts)
|
|||||||
struct hp_info* info = (struct hp_info*)userData;
|
struct hp_info* info = (struct hp_info*)userData;
|
||||||
info->cur_off = 0;
|
info->cur_off = 0;
|
||||||
if (info->in_info) {
|
if (info->in_info) {
|
||||||
|
if (info->in_instrument) {
|
||||||
|
if (!strcmp(name,"layer") && !info->scan_only) {
|
||||||
|
info->in_layer = 1;
|
||||||
|
info->cur_layer = malloc(sizeof(struct instrument_layer));
|
||||||
|
memset(info->cur_layer,0,sizeof(struct instrument_layer));
|
||||||
|
}
|
||||||
|
}
|
||||||
if (info->in_instrument_list) {
|
if (info->in_instrument_list) {
|
||||||
if (!strcmp(name,"instrument")) {
|
if (!strcmp(name,"instrument")) {
|
||||||
info->in_instrument = 1;
|
info->in_instrument = 1;
|
||||||
@ -100,10 +120,23 @@ endElement(void *userData, const char *name)
|
|||||||
if (info->scan_only && info->in_info && !info->in_instrument_list && !strcmp(name,"info"))
|
if (info->scan_only && info->in_info && !info->in_instrument_list && !strcmp(name,"info"))
|
||||||
info->kit_info->desc = strdup(info->cur_buf);
|
info->kit_info->desc = strdup(info->cur_buf);
|
||||||
|
|
||||||
|
if (info->in_layer && !info->scan_only) {
|
||||||
|
if (!strcmp(name,"filename"))
|
||||||
|
info->cur_layer->filename = strdup(info->cur_buf);
|
||||||
|
if (!strcmp(name,"min"))
|
||||||
|
info->cur_layer->min = atoi(info->cur_buf);
|
||||||
|
if (!strcmp(name,"max"))
|
||||||
|
info->cur_layer->max = atoi(info->cur_buf);
|
||||||
|
if (!strcmp(name,"gain"))
|
||||||
|
info->cur_layer->gain = atoi(info->cur_buf);
|
||||||
|
}
|
||||||
|
|
||||||
if (info->in_instrument) {
|
if (info->in_instrument) {
|
||||||
if (info->scan_only) {
|
if (info->scan_only) {
|
||||||
if (!strcmp(name,"filename"))
|
if (!strcmp(name,"filename") && !info->counted_cur_inst) {
|
||||||
info->kit_info->inst_count++;
|
info->kit_info->inst_count++;
|
||||||
|
info->counted_cur_inst = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!strcmp(name,"id"))
|
if (!strcmp(name,"id"))
|
||||||
@ -117,10 +150,28 @@ endElement(void *userData, const char *name)
|
|||||||
|
|
||||||
info->cur_off = 0;
|
info->cur_off = 0;
|
||||||
|
|
||||||
if (!info->scan_only &&
|
if (!info->scan_only &&
|
||||||
info->in_instrument &&
|
info->in_layer &&
|
||||||
!strcmp(name,"instrument") &&
|
!strcmp(name,"layer") &&
|
||||||
info->cur_instrument->filename) {
|
info->cur_layer->filename) {
|
||||||
|
struct instrument_layer *cur_l = info->cur_instrument->layers;
|
||||||
|
if (cur_l) {
|
||||||
|
while(cur_l->next) cur_l = cur_l->next;
|
||||||
|
cur_l->next = info->cur_layer;
|
||||||
|
} else
|
||||||
|
info->cur_instrument->layers = info->cur_layer;
|
||||||
|
info->cur_layer = NULL;
|
||||||
|
info->in_layer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info->scan_only && info->in_instrument && !strcmp(name,"instrument")) {
|
||||||
|
info->counted_cur_inst = 0;
|
||||||
|
info->in_instrument = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!info->scan_only && info->in_instrument &&
|
||||||
|
(info->cur_instrument && (info->cur_instrument->filename || info->cur_instrument->layers)) &&
|
||||||
|
!strcmp(name,"instrument")) {
|
||||||
struct instrument_info * cur_i = info->kit_info->instruments;
|
struct instrument_info * cur_i = info->kit_info->instruments;
|
||||||
if (cur_i) {
|
if (cur_i) {
|
||||||
while(cur_i->next) cur_i = cur_i->next;
|
while(cur_i->next) cur_i = cur_i->next;
|
||||||
|
Loading…
Reference in New Issue
Block a user