示例#1
0
/* 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;
}
示例#2
0
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;
}