int main(int argc, char *const argv[]){ char *alg, *f0, *f1; compute_alignment c = NULL; int err; if(argc < 3) usage(); alg = argv[1]; f0 = argv[2]; f1 = argv[3]; if(strcmp(alg,"dfs") == 0){ c = &call_dfs_solver; /* from dfs_solver.c */ }else if(strcmp(alg,"dyn") == 0){ c = &dyn_programming_solution; }else{ printf("Algorithm %s not recognized, expected dfs or dyn\n", alg); return EXIT_FAILURE; } err = align_files(f0, f1,c); if (err) return EXIT_FAILURE; return EXIT_SUCCESS; }
int main(int argc, char *argv []) { const char *progname, *infilename0, *infilename1; const char *smooth_filename, *path_filename, *trans_filename; const char *midi_filename, *beat_filename, *image_filename; //just transcribe if trasncribe == 1 int transcribe = 0; // Default for the user definable parameters path_filename = "path.data"; smooth_filename = "smooth.data"; trans_filename = "transcription.txt"; midi_filename = "midi.mid"; beat_filename = "beatmap.txt"; image_filename = "distance.pnm"; progname = strrchr(argv [0], '/'); progname = progname ? progname + 1 : argv[0] ; // If no arguments, return usage if (argc < 2) { print_usage(progname); return 1; } /*******PARSING CODE BEGINS*********/ int i = 1; while (i < argc) { //expected flagged argument if (argv[i][0] == '-') { char flag = argv[i][1]; if (flag == 'h') { sa.frame_period = atof(argv[i+1]); } else if (flag == 'w') { sa.window_size = atof(argv[i+1]); } else if (flag == 'r') { path_filename = argv[i+1]; } else if (flag == 's') { smooth_filename = argv[i+1]; } else if (flag == 't') { trans_filename = argv[i+1]; } else if (flag == 'm') { midi_filename = argv[i+1]; } else if (flag == 'i') { image_filename = argv[i+1]; } else if (flag == 'b') { beat_filename = argv[i+1]; } else if (flag == 'o') { sa.smooth_time = atof(argv[i+1]); } else if (flag == 'p') { sa.presmooth_time = atof(argv[i+1]); } else if (flag == 'x') { sa.line_time = atof(argv[i+1]); } else if (flag == 'd') { sa.silence_threshold = atof(argv[i+1]); } i++; } // When aligning audio to midi we must force file0 to be midi else { // file 1 is midi if (transcribe == 0) { infilename0 = argv[i]; transcribe++; } // file 2 is audio or a second midi else { infilename1 = argv[i]; transcribe++; } } i++; } /**********END PARSING ***********/ if (sa.presmooth_time > 0 && sa.line_time > 0) { printf("WARNING: both -p and -x options selected.\n"); } if (transcribe == 1) { // if only one midi file, just write transcription and exit, // no alignment save_transcription(infilename0, "", false, trans_filename,NULL, NULL, NULL); printf("Wrote %s\n", trans_filename); goto finish; } // if midi only in infilename1, make it infilename0 if (is_midi_file(infilename1) && !is_midi_file(infilename0)) { const char *temp; temp = infilename0; infilename0 = infilename1; infilename1 = temp; } if (!align_files(infilename0, infilename1, sa, true /* verbose */)) { printf("An error occurred, not saving path and transcription data\n"); goto finish; } if (sa.file0_frames <= 2 || sa.file1_frames <= 2) { printf("Error: file frame counts are low: %d (for input 1) and %d " "for input 2)\n...not saving path and transcription data\n", sa.file0_frames, sa.file1_frames); goto finish; } // save path save_path(path_filename, sa.pathlen, sa.pathx, sa.pathy, sa.actual_frame_period_0, sa.actual_frame_period_1); // save image of distance matrix save_image(image_filename, sa); // save smooth, midi, transcription save_transcription(infilename0, infilename1, true, trans_filename, smooth_filename, midi_filename, beat_filename); // print what the chroma matrix looks like /* printf("file0 chroma table: \n"); print_chroma_table(chrom_energy0,file0_frames); printf("\nfile1 chroma table: \n"); print_chroma_table(chrom_energy1, file1_frames); */ // only path and smooth are written when aligning two audio files if (is_midi_file(infilename0) || is_midi_file(infilename1)) printf("Wrote %s, %s, %s, and %s.\n", path_filename, smooth_filename, trans_filename, beat_filename); else printf("Wrote %s and %s.", path_filename, smooth_filename); finish: #ifdef WIN32 printf("Type RETURN to exit\n"); getchar(); #endif return 0 ; } /* main */