static int time_to_frame(Data *data, double time, float f_note_num){ int i_note_num = (int)f_note_num; const Sample *sample=NULL; int samplenum = 0; const Note *note=&data->notes[(int)i_note_num]; for(;;){ sample = note->samples[samplenum]; if (sample!=NULL) break; samplenum++; if (samplenum==note->num_samples) { RError("samplenum==num_samples. %f\n",f_note_num); return data->startpos*sample->num_frames + time/30000.0f; } } double src_ratio = RT_get_src_ratio2(data, sample, f_note_num); return data->startpos*sample->num_frames + time/src_ratio ; }
static double RT_get_src_ratio(Data *data, Voice *voice){ const Sample *sample = voice->sample; //int notenum = voice->note_num + (int)data->octave_adjust*12 + (int)data->note_adjust; //int notenum = voice->note_num + (int)data->note_adjust; //float pitch = voice->end_pitch + scale(data->finetune, 0, 1, -1, 1) + (int)data->note_adjust; return RT_get_src_ratio2(data,sample,voice->end_pitch); }
static int time_to_frame(Data *data, double time, float note_num){ const Sample *sample=data->notes[(int)note_num].samples[0]; double src_ratio = RT_get_src_ratio2(data, sample, note_num); return data->startpos*sample->num_frames + time/src_ratio ; }