- Timestamp:
- May 28, 2005, 2:53:13 AM (19 years ago)
- Branches:
- feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master, pitchshift, sampler, timestretch, yinfft+
- Children:
- 946cad3
- Parents:
- f8714ee
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/fft.c
rf8714ee rf88a326 78 78 void del_aubio_fft(aubio_fft_t * s) { 79 79 aubio_fft_free(s); 80 AUBIO_FREE(s); 80 81 } 81 82 … … 111 112 } 112 113 114 115 /* new interface aubio_mfft */ 116 struct _aubio_mfft_t { 117 aubio_fft_t * fft; /* fftw interface */ 118 fft_data_t ** spec; /* complex spectral data */ 119 uint_t winsize; 120 uint_t channels; 121 }; 122 123 aubio_mfft_t * new_aubio_mfft(uint_t winsize, uint_t channels){ 124 uint_t i; 125 aubio_mfft_t * fft = AUBIO_NEW(aubio_mfft_t); 126 fft->winsize = winsize; 127 fft->channels = channels; 128 fft->fft = new_aubio_fft(winsize); 129 fft->spec = AUBIO_ARRAY(fft_data_t*,channels); 130 for (i=0; i < channels; i++) 131 fft->spec[i] = AUBIO_ARRAY(fft_data_t,winsize); 132 return fft; 133 } 134 135 /* execute stft */ 136 void aubio_mfft_do (aubio_mfft_t * fft,fvec_t * in,cvec_t * fftgrain){ 137 uint_t i=0; 138 /* execute stft */ 139 for (i=0; i < fft->channels; i++) { 140 aubio_fft_do (fft->fft,in->data[i],fft->spec[i],fft->winsize); 141 /* put norm and phase into fftgrain */ 142 aubio_fft_getnorm(fftgrain->norm[i], fft->spec[i], fft->winsize/2+1); 143 aubio_fft_getphas(fftgrain->phas[i], fft->spec[i], fft->winsize/2+1); 144 } 145 } 146 147 /* execute inverse fourier transform */ 148 void aubio_mfft_rdo(aubio_mfft_t * fft,cvec_t * fftgrain, fvec_t * out){ 149 uint_t i=0,j; 150 for (i=0; i < fft->channels; i++) { 151 for (j=0; j<fft->winsize/2+1; j++) { 152 fft->spec[i][j] = CEXPC(I*unwrap2pi(fftgrain->phas[i][j])); 153 fft->spec[i][j] *= fftgrain->norm[i][j]; 154 } 155 aubio_fft_rdo(fft->fft,fft->spec[i],out->data[i],fft->winsize); 156 } 157 } 158 159 void del_aubio_mfft(aubio_mfft_t * fft) { 160 uint_t i; 161 for (i=0; i < fft->channels; i++) 162 AUBIO_FREE(fft->spec[i]); 163 AUBIO_FREE(fft->spec); 164 aubio_fft_free(fft->fft); 165 AUBIO_FREE(fft); 166 }
Note: See TracChangeset
for help on using the changeset viewer.