Beispiel #1
0
int find_attack_point(float *buf,int *attack_point_found,int *attack_point,dataptr dz)
{
	int exit_status;
//	int definitely_found = FALSE;
	switch(dz->mode) {
	case(ENV_ATK_GATED):		
		return find_attack_point_using_gate(buf,attack_point_found,attack_point,dz);
	case(ENV_ATK_TIMED):		
		if((exit_status = go_to_search_start(dz))<0)
			return(exit_status);
		if((exit_status = find_local_maximum(buf,attack_point_found,attack_point,dz))<0)
			return(exit_status);
		break;
	case(ENV_ATK_XTIME):
		*attack_point = round(dz->param[ENV_ATK_ATTIME] * (double)dz->infile->srate) * dz->infile->channels;
		*attack_point_found = TRUE;
		break;
	case(ENV_ATK_ATMAX):		
		return go_to_max_sample(buf,attack_point_found,attack_point,dz);
	default:
		sprintf(errstr,"Unknown case in find_attack_point()\n");
		return(PROGRAM_ERROR);
	}
	return(FINISHED);
}
int main(int argc, char ** argv) {
	unsigned int i;
	unsigned int ndim;
	double exactness;
	gsl_vector * start;
	if (argc < 2 + 4 * 1) {
		usage(argv[0]);
		return 1;
	}
	exactness = atof(argv[1]);
	if ((argc - 2) % 4) {
		fprintf(stderr, "%s: wrong number of arguments\n", argv[0]);
		usage(argv[0]);
	}
	ndim = (argc - 2) / 4;
	round = gsl_vector_int_alloc(ndim);
	min = gsl_vector_alloc(ndim);
	max = gsl_vector_alloc(ndim);
	start = gsl_vector_alloc(ndim);

	for (i = 0; i < ndim; i++) {
		if (strcmp(argv[2 + i * 4], "i") == 0)
			gsl_vector_int_set(round, i, 1);
		else if (strcmp(argv[2 + i * 4], "d") == 0)
			gsl_vector_int_set(round, i, 0);
		else
			usage(argv[0]);
		gsl_vector_set(min, i, atof(argv[2 + i * 4 + 1]));
		gsl_vector_set(max, i, atof(argv[2 + i * 4 + 2]));
		gsl_vector_set(start, i, (atof(argv[2 + i * 4 + 3]) - gsl_vector_get(
				min, i)) / (gsl_vector_get(max, i) - gsl_vector_get(min, i)));
	}
	setup_rng();

	find_local_maximum(ndim, exactness, start);
	fprintf(stderr, "--- best: ---");
	print_real_vector(start);

	return 0;
}