diff --git a/Stretch.cpp b/Stretch.cpp index fe434be..3eb9fb3 100644 --- a/Stretch.cpp +++ b/Stretch.cpp @@ -152,16 +152,25 @@ Stretch::Stretch(REALTYPE rap_,int bufsize_,FFTWindow w,bool bypass_,REALTYPE sa out_buf=new REALTYPE[bufsize]; old_freq=new REALTYPE[bufsize]; + + very_old_smps=new REALTYPE[bufsize]; + new_smps=new REALTYPE[bufsize]; old_smps=new REALTYPE[bufsize]; + old_out_smps=new REALTYPE[bufsize*2]; - for (int i=0;ismp[i+bufsize]=smps[i]; old_freq[i]=infft->freq[i]; - old_smps[i]=smps[i]; }; infft->applywindow(window_type); infft->smp2freq(); }; +void Stretch::do_next_inbuf_smps(REALTYPE *smps){ + for (int i=0;ifreq[i]=infft->freq[i]*remained_samples+old_freq[i]*(1.0-remained_samples); }; - + + + //move the buffers + if (nsmps!=0){//new data arrived: update the frequency components + do_next_inbuf_smps(smps); + if (nsmps==bufsize*2) { + do_next_inbuf_smps(smps+bufsize); + }; + }; process_spectrum(outfft->freq); outfft->freq2smp(); diff --git a/Stretch.h b/Stretch.h index 8462377..2804cd6 100644 --- a/Stretch.h +++ b/Stretch.h @@ -91,13 +91,16 @@ class Stretch{ private: void do_analyse_inbuf(REALTYPE *smps); + void do_next_inbuf_smps(REALTYPE *smps); // REALTYPE *in_pool;//de marimea in_bufsize REALTYPE rap; REALTYPE *old_out_smps; - REALTYPE *old_freq,*old_smps; + REALTYPE *old_freq; + REALTYPE *new_smps,*old_smps,*very_old_smps; FFT *infft,*outfft; + FFT *fft; long double remained_samples;//0..1 REALTYPE c_pos_percents; bool require_new_buffer;