#include #include "generator.h" float play_tree(sound_node *root, midi_note_t *note) { (void) root; (void) note; return 0; } float generate(generator * g, synth_t * s, int i, sound_node * root) { (void) g; float sample = 0; sample = play_tree(root, &s->midi_note[i]); return sample; } int sound_tree_add_node(sound_node * root, const char * cmp) { (void) root; (void) cmp; return 0; } int load_preset(sound_node * tree, const char * path) { config_t cfg; config_setting_t *setting, *x; config_init(&cfg); if (! config_read_file(&cfg, path)) { fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg), config_error_line(&cfg), config_error_text(&cfg)); config_destroy(&cfg); return(EXIT_FAILURE); } setting = config_root_setting(&cfg); if (setting != NULL) { int count = config_setting_length(setting); for(int i = 0; i < count; ++i) { x = config_setting_get_elem(setting, i); char * name = config_setting_name(x); printf("%s -- %d\n", config_setting_name(x), config_setting_type(x)); if (name[0] == 'o') { // osc // TODO printf("Creating osc: %s\n", config_setting_name(x)); int count2 = config_setting_length(x); config_setting_t *s; for (int j = 0; j < count2; ++j) { s = config_setting_get_elem(x, j); printf("%s -> ", config_setting_name(s)); switch (config_setting_type(s)) { case CONFIG_TYPE_INT: printf("%d\n", config_setting_get_int(s)); break; case CONFIG_TYPE_FLOAT: printf("%f\n", config_setting_get_float(s)); break; case CONFIG_TYPE_STRING: printf("%s\n", config_setting_get_string(s)); break; } } //configure_osc(tree, id); } else if (name[0] == 'a') { // adsr // TODO printf("Creating adsr: %s\n", config_setting_name(x)); int count2 = config_setting_length(x); config_setting_t *s; for (int j = 0; j < count2; ++j) { s = config_setting_get_elem(x, j); printf("%s -> ", config_setting_name(s)); switch (config_setting_type(s)) { case CONFIG_TYPE_INT: printf("%d\n", config_setting_get_int(s)); break; case CONFIG_TYPE_FLOAT: printf("%f\n", config_setting_get_float(s)); break; case CONFIG_TYPE_STRING: printf("%s\n", config_setting_get_string(s)); break; } } //configure_adsr(tree, id); } else if (name[0] == 'l') { // lfo // TODO printf("Creating lfo: %s\n", config_setting_name(x)); int count2 = config_setting_length(x); config_setting_t *s; for (int j = 0; j < count2; ++j) { s = config_setting_get_elem(x, j); printf("%s -> ", config_setting_name(s)); switch (config_setting_type(s)) { case CONFIG_TYPE_INT: printf("%d\n", config_setting_get_int(s)); break; case CONFIG_TYPE_FLOAT: printf("%f\n", config_setting_get_float(s)); break; case CONFIG_TYPE_STRING: printf("%s\n", config_setting_get_string(s)); break; } } //configure_lfo(tree, id); } else { printf("%s: wrong!\n", name); } } } setting = config_lookup(&cfg, "patch"); if (setting != NULL) { int count = config_setting_length(setting); for(int i = 0; i < count; ++i) { x = config_setting_get_elem(setting, i); printf("adding sound node: %s = %f\n", config_setting_name(x), config_setting_type(x) == CONFIG_TYPE_INT ? (float)config_setting_get_int(x) : config_setting_get_float(x)); // TODO sound_tree_add_node(tree, config_setting_name(x)); } } config_destroy(&cfg); return 0; }