Changeset 3c707f7
 Timestamp:
 Nov 4, 2007, 4:47:38 PM (13 years ago)
 Branches:
 feature/autosink, feature/constantq, feature/pitchshift, feature/pydocstrings, feature/timestretch, master, pitchshift, sampler, timestretch, yinfft+
 Children:
 82f0c4e7
 Parents:
 812b376
 Location:
 src
 Files:

 2 edited
Legend:
 Unmodified
 Added
 Removed

src/hist.c
r812b376 r3c707f7 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 31 32 33 34 30 fvec_t * hist; 31 uint_t nelems; 32 uint_t channels; 33 fvec_t * cent; 34 aubio_scale_t *scaler; 35 35 }; 36 36 … … 39 39 */ 40 40 aubio_hist_t * new_aubio_hist (smpl_t ilow, smpl_t ihig, uint_t nelems, uint_t channels){ 41 42 43 44 45 46 41 aubio_hist_t * s = AUBIO_NEW(aubio_hist_t); 42 smpl_t step = (ihigilow)/(smpl_t)(nelems); 43 smpl_t accum = step; 44 uint_t i; 45 s>channels = channels; 46 s>nelems = nelems; 47 47 s>hist = new_fvec(nelems, channels); 48 49 50 51 52 53 54 55 56 57 return s; 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; 58 58 } 59 59 60 60 void del_aubio_hist(aubio_hist_t *s) { 61 61 del_fvec(s>hist); 62 63 64 62 del_fvec(s>cent); 63 del_aubio_scale(s>scaler); 64 AUBIO_FREE(s); 65 65 } 66 66 … … 68 68 * do it 69 69 */ 70 void aubio_hist_do (aubio_hist_t *s, fvec_t *input) 71 { 72 uint_t i,j; 73 sint_t tmp = 0; 74 aubio_scale_do(s>scaler, input); 75 /* reset data */ 76 for (i=0; i < s>channels; i++) 77 for (j=0; j < s>nelems; j++) 78 s>hist>data[i][j] = 0; 79 /* run accum */ 80 for (i=0; i < input>channels; i++) 81 for (j=0; j < input>length; j++) 82 { 83 tmp = (sint_t)FLOOR(input>data[i][j]); 84 if ((tmp >= 0) && (tmp < (sint_t)s>nelems)) 85 s>hist>data[i][tmp] += 1; 86 } 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 } 87 86 } 88 87 89 void aubio_hist_do_notnull (aubio_hist_t *s, fvec_t *input) 90 { 91 uint_t i,j; 92 sint_t tmp = 0; 93 aubio_scale_do(s>scaler, input); 94 /* reset data */ 95 for (i=0; i < s>channels; i++) 96 for (j=0; j < s>nelems; j++) 97 s>hist>data[i][j] = 0; 98 /* run accum */ 99 for (i=0; i < input>channels; i++) 100 for (j=0; j < input>length; j++) 101 { 102 if (input>data[i][j] != 0) { 103 tmp = (sint_t)FLOOR(input>data[i][j]); 104 if ((tmp >= 0) && (tmp < (sint_t)s>nelems)) 105 s>hist>data[i][tmp] += 1; 106 } 107 } 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 } 108 105 } 109 106 110 107 111 void aubio_hist_dyn_notnull (aubio_hist_t *s, fvec_t *input) 112 { 113 uint_t i,j; 114 sint_t tmp = 0; 115 smpl_t ilow = vec_min(input); 116 smpl_t ihig = vec_max(input); 117 smpl_t step = (ihigilow)/(smpl_t)(s>nelems); 118 119 /* readapt */ 120 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 = (ihigilow)/(smpl_t)(s>nelems); 121 114 122 /* recalculate centers */ 123 s>cent>data[0][0] = ilow + 0.5f * step; 124 for (i=1; i < s>nelems; i++) 125 s>cent>data[0][i] = s>cent>data[0][0] + i * step; 115 /* readapt */ 116 aubio_scale_set(s>scaler, ilow, ihig, 0, s>nelems); 126 117 127 /* scale */ 128 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; 129 122 130 /* reset data */ 131 for (i=0; i < s>channels; i++) 132 for (j=0; j < s>nelems; j++) 133 s>hist>data[i][j] = 0; 134 /* run accum */ 135 for (i=0; i < input>channels; i++) 136 for (j=0; j < input>length; j++) 137 { 138 if (input>data[i][j] != 0) { 139 tmp = (sint_t)FLOOR(input>data[i][j]); 140 if ((tmp >= 0) && (tmp < (sint_t)s>nelems)) 141 s>hist>data[i][tmp] += 1; 142 } 143 } 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 } 144 139 } 145 140 146 void aubio_hist_weight (aubio_hist_t *s) 147 { 148 uint_t i,j; 149 for (i=0; i < s>channels; i++) 150 for (j=0; j < s>nelems; j++) { 151 s>hist>data[i][j] *= s>cent>data[0][j]; 152 } 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 } 153 147 } 154 148 155 smpl_t aubio_hist_mean (aubio_hist_t *s) 156 { 157 uint_t i,j; 158 smpl_t tmp = 0.0f; 159 for (i=0; i < s>channels; i++) 160 for (j=0; j < s>nelems; j++) 161 tmp += s>hist>data[i][j]; 162 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); 163 156 } 164 157 
src/hist.h
r812b376 r3c707f7 15 15 along with this program; if not, write to the Free Software 16 16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 17 */ 18 18 19 19 /** @file … … 34 34 typedef struct _aubio_hist_t aubio_hist_t; 35 35 36 /** histogram creation 36 /** histogram creation 37 37 * \param flow minimum input 38 38 * \param fhig maximum input 39 39 * \param nelems number of histogram columns 40 * \param channels number of channels 40 * \param channels number of channels 41 41 */ 42 42 aubio_hist_t * new_aubio_hist(smpl_t flow, smpl_t fhig, uint_t nelems, uint_t channels); … … 48 48 void aubio_hist_do_notnull(aubio_hist_t *s, fvec_t * input); 49 49 /** compute the mean of the histogram */ 50 smpl_t aubio_hist_mean(aubio_hist_t *s); 50 smpl_t aubio_hist_mean(aubio_hist_t *s); 51 51 /** weight the histogram */ 52 void aubio_hist_weight(aubio_hist_t *s); 52 void aubio_hist_weight(aubio_hist_t *s); 53 53 /** compute dynamic histogram for nonnull elements */ 54 54 void aubio_hist_dyn_notnull (aubio_hist_t *s, fvec_t *input);
Note: See TracChangeset
for help on using the changeset viewer.