summaryrefslogtreecommitdiffstats
path: root/src/generator.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/generator.c')
-rw-r--r--src/generator.c114
1 files changed, 91 insertions, 23 deletions
diff --git a/src/generator.c b/src/generator.c
index ab2206f..de75bc8 100644
--- a/src/generator.c
+++ b/src/generator.c
@@ -3,21 +3,30 @@
#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;
- sampe = play_tree(root, s->midi_note[i]);
-
+ 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
@@ -25,52 +34,111 @@ load_preset(sound_node * tree, const char * path)
{
config_t cfg;
config_setting_t *setting, *x;
- const char *str;
config_init(&cfg);
- if (! config_read_file(&cfg, "../preset.synth")) {
+ 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_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("%s = %f\n", config_setting_name(x), config_setting_get_float(x));
- // TODO
- sound_tree_add_node(tree, name);
- }
}
- setting = config_tree_setting(&cfg);
+ setting = config_root_setting(&cfg);
if (setting != NULL) {
int count = config_setting_length(setting);
for(int i = 0; i < count; ++i) {
- chat * name = config_setting_name(x);
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
- configure_osc(tree, id);
+ 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
- configure_adsr(tree, id);
+ 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
- configure_lfo(tree, id);
+ 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!", name);
+ 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;
}