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; }