Browse Source

Starting to improve the new algorithm (took what's best in older algo).

master
Nasca Octavian PAUL 12 years ago
parent
commit
6ccce6eb4f
2 changed files with 37 additions and 4 deletions
  1. +33
    -3
      Stretch.cpp
  2. +4
    -1
      Stretch.h

+ 33
- 3
Stretch.cpp View File

@@ -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;i<bufsize*2;i++) old_out_smps[i]=0.0;
for (int i=0;i<bufsize*2;i++) {
old_out_smps[i]=0.0;
};
for (int i=0;i<bufsize;i++) {
old_freq[i]=0.0;
new_smps[i]=0.0;
old_smps[i]=0.0;
very_old_smps[i]=0.0;
};


infft=new FFT(bufsize*2);
fft=new FFT(bufsize*2);
outfft=new FFT(bufsize*2);
remained_samples=0.0;
window_type=w;
@@ -172,8 +181,11 @@ Stretch::Stretch(REALTYPE rap_,int bufsize_,FFTWindow w,bool bypass_,REALTYPE sa
Stretch::~Stretch(){
delete [] old_freq;
delete [] out_buf;
delete [] new_smps;
delete [] old_smps;
delete [] very_old_smps;
delete [] old_out_smps;
delete fft;
delete infft;
delete outfft;
};
@@ -189,12 +201,19 @@ void Stretch::do_analyse_inbuf(REALTYPE *smps){
infft->smp[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;i<bufsize;i++) {
very_old_smps[i]=old_smps[i];
old_smps[i]=new_smps[i];
new_smps[i]=smps[i];
};
};

void Stretch::process(REALTYPE *smps,int nsmps){
if (bypass){
for (int i=0;i<bufsize;i++) out_buf[i]=smps[i];
@@ -212,11 +231,22 @@ void Stretch::process(REALTYPE *smps,int nsmps){
do_analyse_inbuf(smps);
if (nsmps==bufsize*2) do_analyse_inbuf(smps+bufsize);
};


//compute the output spectrum
#warning sa fac output spectrum ca la versiunea veche prin reanaliza a bufferului very_old_smps,old_smps,new_smps
for (int i=0;i<bufsize;i++) {
outfft->freq[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();


+ 4
- 1
Stretch.h View File

@@ -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;


Loading…
Cancel
Save