mas01cr@553: #include mas01cr@553: #include mas01cr@553: #include mas01cr@553: #include mas01cr@553: #include mas01cr@553: mas01cr@553: #include mas01cr@553: mas01cr@553: const char * qstring = mas01cr@553: " PREFIX af: " mas01cr@553: " PREFIX dc: " mas01cr@553: " PREFIX mo: " mas01cr@553: " PREFIX tl: " mas01cr@553: mas01cr@553: " SELECT ?key ?value ?sample_rate ?window_length ?hop_size" mas01cr@553: " FROM " mas01cr@553: mas01cr@553: " WHERE { " mas01cr@553: mas01cr@553: " ?signal mo:available_as ?key ." mas01cr@553: mas01cr@553: " ?signal mo:time [ tl:onTimeLine ?signal_timeline ] . " mas01cr@553: mas01cr@553: " ?timeline_map a tl:UniformSamplingWindowingMap ; " mas01cr@553: " tl:rangeTimeLine ?feature_timeline ; " mas01cr@553: " tl:domainTimeLine ?signal_timeline ; " mas01cr@553: " tl:sampleRate ?sample_rate ; " mas01cr@553: " tl:windowLength ?window_length ; " mas01cr@553: " tl:hopSize ?hop_size . " mas01cr@553: mas01cr@553: " ?signal af:signal_feature ?feature . " mas01cr@553: mas01cr@553: " ?feature a ?feature_signal_type ; " mas01cr@553: " mo:time [ tl:onTimeLine ?feature_timeline ] ; " mas01cr@553: " af:value ?value . " mas01cr@553: mas01cr@553: " ?feature_signal_type dc:title \"Key Strength Plot\"" mas01cr@553: mas01cr@553: " } " mas01cr@553: ; mas01cr@553: mas01cr@553: double *parse_value_string(const char *value_string, size_t *nelements) { mas01cr@553: /* What error checking? */ mas01cr@553: mas01cr@553: *nelements = 0; mas01cr@553: mas01cr@553: const char *current = value_string; mas01cr@553: char *next = 0; mas01cr@553: mas01cr@553: size_t size = 1; mas01cr@553: double *buf = (double *) malloc(size * sizeof(double)); mas01cr@553: double value = strtod(current, &next); mas01cr@553: while(next != current) { mas01cr@553: buf[(*nelements)++] = value; mas01cr@553: if((*nelements) == size) { mas01cr@553: size *= 2; mas01cr@553: buf = (double *) realloc(buf, 2 * size * sizeof(double)); mas01cr@553: } mas01cr@553: current = next; mas01cr@553: value = strtod(current, &next); mas01cr@553: } mas01cr@553: mas01cr@553: } mas01cr@553: mas01cr@553: int main() { mas01cr@553: librdf_world *world = librdf_new_world(); mas01cr@553: if(world == NULL) return 1; mas01cr@553: mas01cr@553: librdf_storage *storage = librdf_new_storage(world, "memory", NULL, NULL); mas01cr@553: if(storage == NULL) return 1; mas01cr@553: mas01cr@553: librdf_model *model = librdf_new_model(world, storage, NULL); mas01cr@553: if(model == NULL) return 1; mas01cr@553: mas01cr@553: librdf_uri *uri = librdf_new_uri(world, "file:data/test.n3"); mas01cr@553: if(uri == NULL) return 1; mas01cr@553: mas01cr@553: librdf_parser *parser = librdf_new_parser(world, "guess", NULL, NULL); mas01cr@553: if(parser == NULL) return 1; mas01cr@553: mas01cr@553: if(librdf_parser_parse_into_model(parser, uri, NULL, model)) return 1; mas01cr@553: mas01cr@553: librdf_query *query = mas01cr@553: librdf_new_query(world, "sparql", NULL, qstring, NULL); mas01cr@553: if(query == NULL) return 1; mas01cr@553: mas01cr@553: librdf_query_results *results = librdf_query_execute(query, model); mas01cr@553: if(results == NULL) return 1; mas01cr@553: if(!librdf_query_results_is_bindings(results)) return 1; mas01cr@553: mas01cr@553: adb_t *adb = audiodb_open("keyplot.adb", O_RDWR); mas01cr@553: if(!adb) { mas01cr@553: fprintf(stderr, "keyplot.adb not opened\n"); mas01cr@553: return 1; mas01cr@553: } mas01cr@553: while(!librdf_query_results_finished(results)) { mas01cr@553: int count = librdf_query_results_get_bindings_count(results); mas01cr@553: adb_datum_t datum = {0}; mas01cr@553: datum.dim = 25; mas01cr@553: for (int i = 0; i < count; i++) { mas01cr@553: const char *name = librdf_query_results_get_binding_name(results, i); mas01cr@553: librdf_node *node = librdf_query_results_get_binding_value(results, i); mas01cr@553: if(!node) return 2; mas01cr@553: mas01cr@553: if(!strcmp(name, "key")) { mas01cr@553: datum.key = librdf_uri_as_string(librdf_node_get_uri(node)); mas01cr@553: } else if(!strcmp(name, "value")) { mas01cr@553: size_t nelements = 0; mas01cr@553: datum.data = parse_value_string(librdf_node_get_literal_value(node), &nelements); mas01cr@553: if(nelements % 25) return 4; mas01cr@553: datum.nvectors = nelements / 25; mas01cr@553: } else { mas01cr@553: printf("%s: %s\n", name, librdf_node_get_literal_value(node)); mas01cr@553: } mas01cr@553: librdf_free_node(node); mas01cr@553: } mas01cr@553: if(audiodb_insert_datum(adb, &datum)) { mas01cr@553: return 17; mas01cr@553: } mas01cr@553: librdf_query_results_next(results); mas01cr@553: } mas01cr@553: mas01cr@553: audiodb_close(adb); mas01cr@553: librdf_free_query_results(results); mas01cr@553: librdf_free_query(query); mas01cr@553: librdf_free_uri(uri); mas01cr@553: librdf_free_model(model); mas01cr@553: librdf_free_storage(storage); mas01cr@553: librdf_free_world(world); mas01cr@553: }