/* Process wave file, write music probability and labels into the specified files. Return 0 on success, print error and return non-zero on error. */ int process(const char* infile, WAVE* wave, OpusSM* sm, FILE* ofp_pmusic, FILE* ofp_labels, double sm_segment_min_dur, double b_segment_min_dur ) { double frame_dur = (double)ANALYSIS_FRAME_SIZE/wave->header.SampleRate; Labeler* lb = lb_init(sm_segment_min_dur/frame_dur, b_segment_min_dur/frame_dur); float* analysis_pcm = malloc(ANALYSIS_FRAME_SIZE*wave->header.NumChannels*sizeof(float)); int16_t* buffer = malloc(ANALYSIS_FRAME_SIZE*wave->header.NumChannels*sizeof(int16_t)); double total_music_ratio = 0; int error = 0; for (int ii = 0; ii <= wave->size - ANALYSIS_FRAME_SIZE; ii = ii + ANALYSIS_FRAME_SIZE) { int readcount = wread(buffer, ANALYSIS_FRAME_SIZE, wave); error = (readcount != ANALYSIS_FRAME_SIZE); if (error) { fprintf(stderr, "Could not read from wave file \"%s\", read count %d.\n", infile, readcount); break; } int2float(buffer, analysis_pcm, ANALYSIS_FRAME_SIZE, wave->header.NumChannels); float pmusic = sm_pmusic(sm, analysis_pcm); total_music_ratio += pmusic; if (ofp_labels != NULL) { lb_add_frame(lb, pmusic); } fprintf(ofp_pmusic, "%f %f\n", (double)ii / wave->header.SampleRate, pmusic); } if (!error) { if (ofp_labels != NULL) { lb_finalize(lb); lb_print_to_file(lb, ofp_labels, frame_dur); } total_music_ratio = (total_music_ratio * (double)ANALYSIS_FRAME_SIZE) / (double) wave->size; fprintf(stderr, "Music ratio: %f\n", total_music_ratio); } lb = lb_destroy(lb); free(analysis_pcm); free(buffer); return error; }
int main(int argc, char* argv[]) { int i = 0, j = 0, r = 0; r = lb_init(); if (r < 0) { fprintf(stderr, "ERROR: lb_init\n"); exit(r); } r = lb_get_bl_devices(5); if (r < 0) { fprintf(stderr, "ERROR: lb_get_bl_devices\n"); goto cleanup; } // search for our specific device named "FIRMATA" lb_bl_device* firmata = NULL; r = lb_get_device_by_device_name("FIRMATA", &firmata); if (r < 0) { fprintf(stderr, "ERROR: Device FIRMATA not found\n"); goto cleanup; } r = lb_connect_device(firmata); if (r < 0) { fprintf(stderr, "ERROR: lb_connect_device\n"); goto cleanup; } // r = lb_pair_device(firmata); // if (r < 0) { // fprintf(stderr, "ERROR: lb_pair_device\n"); // exit(r); //} r = lb_get_ble_device_services(firmata); if (r < 0) { fprintf(stderr, "ERROR: lb_get_ble_device_services\n"); goto cleanup; } printf("Device Found:\nName: %s\nDevice Address: %s\n", firmata->name, firmata->address); printf("Services found:\n"); for (i = 0; i < firmata->services_size; i++) { printf("%s\t%s\n", firmata->services[i]->service_path, firmata->services[i]->uuid); printf("Characteristics Found:\n"); for (j = 0; j < firmata->services[i]->characteristics_size; j++) { printf("%s\t%s\n", firmata->services[i]->characteristics[j]->char_path, firmata->services[i]->characteristics[j]->uuid); } } printf("Blinking"); fflush(stdout); uint8_t led_on[] = { 0x91, 0x20, 0x00 }; uint8_t led_off[] = { 0x91, 0x00, 0x00 }; for (i = 0; i < 10; i++) { printf("."); fflush(stdout); r = lb_write_to_characteristic(firmata, "6e400002-b5a3-f393-e0a9-e50e24dcca9e", 3, led_on); if (r < 0) { fprintf(stderr, "ERROR: lb_write_to_characteristic\n"); } usleep(1000000); printf("."); fflush(stdout); r = lb_write_to_characteristic(firmata, "6e400002-b5a3-f393-e0a9-e50e24dcca9e", 3, led_off); if (r < 0) { fprintf(stderr, "ERROR: lb_write_to_characteristic\n"); } usleep(1000000); } printf("\n"); const char* userdata_test = "test"; r = lb_register_characteristic_read_event(firmata, "6e400003-b5a3-f393-e0a9-e50e24dcca9e", test_callback, (void*) userdata_test); if (r < 0) { fprintf(stderr, "ERROR: lb_register_characteristic_read_event\n"); goto cleanup; } printf("get_version\n"); fflush(stdout); uint8_t get_version[] = { 0xf0, 0x79, 0xf7 }; r = lb_write_to_characteristic(firmata, "6e400002-b5a3-f393-e0a9-e50e24dcca9e", 3, get_version); if (r < 0) { fprintf(stderr, "ERROR: lb_write_to_characteristic\n"); } printf("waiting for callbacks\n"); fflush(stdout); sleep(2); cleanup: // r = lb_unpair_device(firmata); // if (r < 0) { // fprintf(stderr, "ERROR: lb_unpair_device\n"); // exit(r); //} r = lb_disconnect_device(firmata); if (r < 0) { fprintf(stderr, "ERROR: lb_disconnect_device\n"); } r = lb_destroy(); if (r < 0) { fprintf(stderr, "ERROR: lb_destroy\n"); } printf("Done\n"); return 0; }