Example #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;
}
Example #2
0
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;

}