/* 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, n_steps, grid[lbmodel.n_dim], vol; double rho, gamma, kappa; double start, finish, elapsed, mups; if (argc!=3) { fprintf(stderr, "Usage: ./run <kappa> <nsteps>\n"); return -1; } lis_initialize(&argc, &argv); n_steps = atoi(argv[2]); grid[0] = 100; grid[1] = 20; vol = grid[0]*grid[1]; rho = 1.0; gamma = 0.0; kappa = atof(argv[1]); write_eos(); char filename[1024]; sprintf(filename, "profile_k%.03f.dat", kappa); lb_init(grid,rho,gamma,kappa); lb_mass_mom(0); fprintf(stdout, "Running %d iterations\n", n_steps); fflush(stdout); start = (double) clock(); for (i=0; i<n_steps; ++i) { lb_update(lbf); lb_mass_mom(i+1); write_profile(filename, 0); } finish = (double) clock(); elapsed = (finish-start)/CLOCKS_PER_SEC; mups = vol*n_steps/elapsed/1e6; fprintf(stdout, "Elapsed time: %.3f s (%.3e MUPS)\n", elapsed, mups); fflush(stdout); write_profile(filename, 0); lb_finalize(); lis_finalize(); return EXIT_SUCCESS; }