Changeset 8a5148e
- Timestamp:
- Feb 22, 2014, 8:00:02 PM (11 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:
- 687eead
- Parents:
- 4c0a1db
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/spectral/phasevoc.c
r4c0a1db r8a5148e 31 31 uint_t hop_s; /** overlap step */ 32 32 aubio_fft_t * fft; /** fft object */ 33 fvec_t * synth; /** cur output grain [win_s]*/34 fvec_t * synthold; /** last input frame [win_s-hop_s]*/35 fvec_t * data; /** current input grain [win_s]*/36 fvec_t * dataold; /** last input frame [win_s-hop_s]*/33 fvec_t * data; /** current input grain, [win_s] frames */ 34 fvec_t * dataold; /** memory of past grain, [win_s-hop_s] frames */ 35 fvec_t * synth; /** current output grain, [win_s] frames */ 36 fvec_t * synthold; /** memory of past grain, [win_s-hop_s] frames */ 37 37 fvec_t * w; /** grain window [win_s] */ 38 38 }; … … 81 81 AUBIO_ERR("got buffer_size %d, but can not be < 2\n", win_s); 82 82 goto beach; 83 } else if (win_s < hop_s + 1) {84 AUBIO_ERR("hop size (%d) is larger than or equal towin size (%d)\n", win_s, hop_s);83 } else if (win_s < hop_s) { 84 AUBIO_ERR("hop size (%d) is larger than win size (%d)\n", win_s, hop_s); 85 85 goto beach; 86 86 } … … 93 93 94 94 /* new input output */ 95 pv->dataold = new_fvec (win_s-hop_s); 96 pv->synthold = new_fvec (win_s-hop_s); 95 if (win_s > hop_s) { 96 pv->dataold = new_fvec (win_s-hop_s); 97 pv->synthold = new_fvec (win_s-hop_s); 98 } else { 99 pv->dataold = new_fvec (1); 100 pv->synthold = new_fvec (1); 101 } 97 102 pv->w = new_aubio_window ("hanningz", win_s); 98 103 … … 141 146 smpl_t * synthnew, uint_t win_s, uint_t hop_s) 142 147 { 143 uint_t i; 144 smpl_t scale = 2 * hop_s / (win_s + .0); 145 /* add new synth to old one and put result in synthnew */ 148 uint_t i, start; 149 smpl_t scale = hop_s * 2. / win_s; 150 151 /* put new result in synthnew */ 146 152 for (i = 0; i < hop_s; i++) 147 synthnew[i] = synthold[i] + synth[i] * scale; 153 synthnew[i] = synth[i] * scale; 154 /* no overlap, nothing else to do */ 155 if (win_s <= hop_s) return; 156 157 /* add new synth to old one and */ 158 for (i = 0; i < hop_s; i++) 159 synthnew[i] += synthold[i]; 160 148 161 /* shift synthold */ 149 for (i = 0; i < win_s - 2 * hop_s; i++) 150 synthold[i] = synthold[i + hop_s]; 162 for (i = hop_s; i < win_s - hop_s; i++) 163 synthold[i - hop_s] = synthold[i]; 164 165 /* more than 50% overlap, overlap anyway */ 166 if (win_s < 2 * hop_s) start = 0; 167 /* less than 50% overlap, reset latest grain trail */ 168 else start = win_s - hop_s - hop_s; 151 169 /* erase last frame in synthold */ 152 for (i = win_s - hop_s; i < win_s; i++) 153 synthold[i - hop_s] = 0.; 170 for (i = start; i < win_s - hop_s; i++) 171 synthold[i] = 0.; 172 154 173 /* additive synth */ 155 174 for (i = 0; i < win_s - hop_s; i++)
Note: See TracChangeset
for help on using the changeset viewer.