// file: read_0.C // #include "./process_data.h" // important definitions // static float last_sample_frequency = (float)-1.0; static float last_frame_duration = (float)-1.0; static float last_window_duration = (float)-1.0; static short int* tmp_buf = NULL; //----------------------------------------------------------------------------- // function: read_data_C // // arguments: // float* buffer: (output) input data // FILE* fp: (input) input file pointer // int frame_number: (input) the number of the frame // float sample_frequency: (output) sample frequency of the signals // float frame_duration: (output) frame_duration of the analysis // float window_duration: (output) window_duration of the analysis // // returns: // L_TRUE if no error was encounterd // // reads one analysis window from a file //----------------------------------------------------------------------------- int read_data_C(float* buffer, FILE* fp, int frame_number, float sample_frequency, float frame_duration, float window_duration) { // convert to integer // int frame_dur_samples = (int)round_C(frame_duration * sample_frequency); int window_dur_samples = (int)round_C(window_duration * sample_frequency); // allocate space // if ((last_sample_frequency != sample_frequency) || (last_frame_duration != frame_duration) || (last_window_duration != window_duration)) { if (tmp_buf != NULL) {free(tmp_buf);} tmp_buf = (short int*)malloc(window_dur_samples * BYTES_PER_SAMPLE); } // position the file // int offset = frame_number * frame_dur_samples - (int)round_C((window_duration - frame_duration) / 2.0 * sample_frequency); if (offset < (int)0) {rewind(fp);} else {fseek(fp, offset * BYTES_PER_SAMPLE, 0);} // compute the number of samples to read // int num_samples_to_read; int num_samples_read; if (offset >= 0) {num_samples_to_read = window_dur_samples;} else {num_samples_to_read = window_dur_samples + offset;} // read the data // if (num_samples_to_read > 0) { num_samples_read = fread(tmp_buf, BYTES_PER_SAMPLE, num_samples_to_read, fp); } // convert it to floats // for (int sample_num=0; sample_num (int)0) {return L_TRUE;} else {return L_FALSE;} }