Changeset f218f29 for src/hist.c
- Timestamp:
- Nov 7, 2007, 5:03:59 PM (16 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:
- 10cf306
- Parents:
- ef7df76 (diff), 4368223 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/hist.c
ref7df76 rf218f29 1 1 /* 2 2 Copyright (C) 2003 Paul Brossier 3 3 4 5 6 7 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 2 of the License, or 7 (at your option) any later version. 8 8 9 10 11 12 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 13 14 15 16 17 14 You should have received a copy of the GNU General Public License 15 along with this program; if not, write to the Free Software 16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 */ 18 18 19 19 #include "aubio_priv.h" … … 28 28 29 29 struct _aubio_hist_t { 30 /*bug: move to a fvec */ 31 smpl_t ** hist; 32 uint_t nelems; 33 uint_t channels; 34 smpl_t * cent; 35 aubio_scale_t *scaler; 30 fvec_t * hist; 31 uint_t nelems; 32 uint_t channels; 33 fvec_t * cent; 34 aubio_scale_t *scaler; 36 35 }; 37 36 … … 40 39 */ 41 40 aubio_hist_t * new_aubio_hist (smpl_t ilow, smpl_t ihig, uint_t nelems, uint_t channels){ 42 aubio_hist_t * s = AUBIO_NEW(aubio_hist_t); 43 smpl_t step = (ihig-ilow)/(smpl_t)(nelems); 44 smpl_t accum = step; 45 uint_t i; 46 s->channels = channels; 47 s->nelems = nelems; 48 s->hist = AUBIO_ARRAY(smpl_t*, channels); 49 for (i=0; i< s->channels; i++) { 50 s->hist[i] = AUBIO_ARRAY(smpl_t, nelems); 51 } 52 s->cent = AUBIO_ARRAY(smpl_t, nelems); 53 54 /* use scale to map ilow/ihig -> 0/nelems */ 55 s->scaler = new_aubio_scale(ilow,ihig,0,nelems); 56 /* calculate centers now once */ 57 s->cent[0] = ilow + 0.5 * step; 58 for (i=1; i < s->nelems; i++, accum+=step ) 59 s->cent[i] = s->cent[0] + accum; 60 61 return s; 41 aubio_hist_t * s = AUBIO_NEW(aubio_hist_t); 42 smpl_t step = (ihig-ilow)/(smpl_t)(nelems); 43 smpl_t accum = step; 44 uint_t i; 45 s->channels = channels; 46 s->nelems = nelems; 47 s->hist = new_fvec(nelems, channels); 48 s->cent = new_fvec(nelems, 1); 49 50 /* use scale to map ilow/ihig -> 0/nelems */ 51 s->scaler = new_aubio_scale(ilow,ihig,0,nelems); 52 /* calculate centers now once */ 53 s->cent->data[0][0] = ilow + 0.5 * step; 54 for (i=1; i < s->nelems; i++, accum+=step ) 55 s->cent->data[0][i] = s->cent->data[0][0] + accum; 56 57 return s; 62 58 } 63 59 64 60 void del_aubio_hist(aubio_hist_t *s) { 65 uint_t i; 66 for (i=0; i< s->channels; i++) { 67 AUBIO_FREE(s->hist[i]); 68 } 69 AUBIO_FREE(s->hist); 70 AUBIO_FREE(s->cent); 71 del_aubio_scale(s->scaler); 72 AUBIO_FREE(s); 61 del_fvec(s->hist); 62 del_fvec(s->cent); 63 del_aubio_scale(s->scaler); 64 AUBIO_FREE(s); 73 65 } 74 66 … … 76 68 * do it 77 69 */ 78 void aubio_hist_do (aubio_hist_t *s, fvec_t *input) 79 { 80 uint_t i,j; 81 sint_t tmp = 0; 82 aubio_scale_do(s->scaler, input); 83 /* reset data */ 84 for (i=0; i < s->channels; i++) 85 for (j=0; j < s->nelems; j++) 86 s->hist[i][j] = 0; 87 /* run accum */ 88 for (i=0; i < input->channels; i++) 89 for (j=0; j < input->length; j++) 90 { 91 tmp = (sint_t)FLOOR(input->data[i][j]); 92 if ((tmp >= 0) && (tmp < (sint_t)s->nelems)) 93 s->hist[i][tmp] += 1; 94 } 70 void aubio_hist_do (aubio_hist_t *s, fvec_t *input) { 71 uint_t i,j; 72 sint_t tmp = 0; 73 aubio_scale_do(s->scaler, input); 74 /* reset data */ 75 for (i=0; i < s->channels; i++) 76 for (j=0; j < s->nelems; j++) 77 s->hist->data[i][j] = 0; 78 /* run accum */ 79 for (i=0; i < input->channels; i++) 80 for (j=0; j < input->length; j++) 81 { 82 tmp = (sint_t)FLOOR(input->data[i][j]); 83 if ((tmp >= 0) && (tmp < (sint_t)s->nelems)) 84 s->hist->data[i][tmp] += 1; 85 } 95 86 } 96 87 97 void aubio_hist_do_notnull (aubio_hist_t *s, fvec_t *input) 98 { 99 uint_t i,j; 100 sint_t tmp = 0; 101 aubio_scale_do(s->scaler, input); 102 /* reset data */ 103 for (i=0; i < s->channels; i++) 104 for (j=0; j < s->nelems; j++) 105 s->hist[i][j] = 0; 106 /* run accum */ 107 for (i=0; i < input->channels; i++) 108 for (j=0; j < input->length; j++) 109 { 110 if (input->data[i][j] != 0) { 111 tmp = (sint_t)FLOOR(input->data[i][j]); 112 if ((tmp >= 0) && (tmp < (sint_t)s->nelems)) 113 s->hist[i][tmp] += 1; 114 } 115 } 88 void aubio_hist_do_notnull (aubio_hist_t *s, fvec_t *input) { 89 uint_t i,j; 90 sint_t tmp = 0; 91 aubio_scale_do(s->scaler, input); 92 /* reset data */ 93 for (i=0; i < s->channels; i++) 94 for (j=0; j < s->nelems; j++) 95 s->hist->data[i][j] = 0; 96 /* run accum */ 97 for (i=0; i < input->channels; i++) 98 for (j=0; j < input->length; j++) { 99 if (input->data[i][j] != 0) { 100 tmp = (sint_t)FLOOR(input->data[i][j]); 101 if ((tmp >= 0) && (tmp < (sint_t)s->nelems)) 102 s->hist->data[i][tmp] += 1; 103 } 104 } 116 105 } 117 106 118 107 119 void aubio_hist_dyn_notnull (aubio_hist_t *s, fvec_t *input) 120 { 121 uint_t i,j; 122 sint_t tmp = 0; 123 smpl_t ilow = vec_min(input); 124 smpl_t ihig = vec_max(input); 125 smpl_t step = (ihig-ilow)/(smpl_t)(s->nelems); 126 127 /* readapt */ 128 aubio_scale_set(s->scaler, ilow, ihig, 0, s->nelems); 108 void aubio_hist_dyn_notnull (aubio_hist_t *s, fvec_t *input) { 109 uint_t i,j; 110 sint_t tmp = 0; 111 smpl_t ilow = vec_min(input); 112 smpl_t ihig = vec_max(input); 113 smpl_t step = (ihig-ilow)/(smpl_t)(s->nelems); 129 114 130 /* recalculate centers */ 131 s->cent[0] = ilow + 0.5f * step; 132 for (i=1; i < s->nelems; i++) 133 s->cent[i] = s->cent[0] + i * step; 115 /* readapt */ 116 aubio_scale_set(s->scaler, ilow, ihig, 0, s->nelems); 134 117 135 /* scale */ 136 aubio_scale_do(s->scaler, input); 118 /* recalculate centers */ 119 s->cent->data[0][0] = ilow + 0.5f * step; 120 for (i=1; i < s->nelems; i++) 121 s->cent->data[0][i] = s->cent->data[0][0] + i * step; 137 122 138 /* reset data */ 139 for (i=0; i < s->channels; i++) 140 for (j=0; j < s->nelems; j++) 141 s->hist[i][j] = 0; 142 /* run accum */ 143 for (i=0; i < input->channels; i++) 144 for (j=0; j < input->length; j++) 145 { 146 if (input->data[i][j] != 0) { 147 tmp = (sint_t)FLOOR(input->data[i][j]); 148 if ((tmp >= 0) && (tmp < (sint_t)s->nelems)) 149 s->hist[i][tmp] += 1; 150 } 151 } 123 /* scale */ 124 aubio_scale_do(s->scaler, input); 125 126 /* reset data */ 127 for (i=0; i < s->channels; i++) 128 for (j=0; j < s->nelems; j++) 129 s->hist->data[i][j] = 0; 130 /* run accum */ 131 for (i=0; i < input->channels; i++) 132 for (j=0; j < input->length; j++) { 133 if (input->data[i][j] != 0) { 134 tmp = (sint_t)FLOOR(input->data[i][j]); 135 if ((tmp >= 0) && (tmp < (sint_t)s->nelems)) 136 s->hist->data[i][tmp] += 1; 137 } 138 } 152 139 } 153 140 154 void aubio_hist_weigth (aubio_hist_t *s) 155 { 156 uint_t i,j; 157 for (i=0; i < s->channels; i++) 158 for (j=0; j < s->nelems; j++) { 159 s->hist[i][j] *= s->cent[j]; 160 } 141 void aubio_hist_weight (aubio_hist_t *s) { 142 uint_t i,j; 143 for (i=0; i < s->channels; i++) 144 for (j=0; j < s->nelems; j++) { 145 s->hist->data[i][j] *= s->cent->data[0][j]; 146 } 161 147 } 162 148 163 smpl_t aubio_hist_mean (aubio_hist_t *s) 164 { 165 uint_t i,j; 166 smpl_t tmp = 0.0f; 167 for (i=0; i < s->channels; i++) 168 for (j=0; j < s->nelems; j++) 169 tmp += s->hist[i][j]; 170 return tmp/(smpl_t)(s->nelems); 149 smpl_t aubio_hist_mean (aubio_hist_t *s) { 150 uint_t i,j; 151 smpl_t tmp = 0.0f; 152 for (i=0; i < s->channels; i++) 153 for (j=0; j < s->nelems; j++) 154 tmp += s->hist->data[i][j]; 155 return tmp/(smpl_t)(s->nelems); 171 156 } 172 157
Note: See TracChangeset
for help on using the changeset viewer.