comparison chromamethods.cpp @ 80:026a5c0ee2c2 matthiasm-plugin

bins per semitone can now be chosen in chromamethods.h
author Matthias Mauch <mail@matthiasmauch.net>
date Thu, 11 Nov 2010 15:11:05 +0900
parents ba930176df5b
children e5c16976513d
comparison
equal deleted inserted replaced
78:d52884de7d79 80:026a5c0ee2c2
103 return out; 103 return out;
104 } 104 }
105 105
106 bool logFreqMatrix(int fs, int blocksize, float *outmatrix) { 106 bool logFreqMatrix(int fs, int blocksize, float *outmatrix) {
107 107
108 int binspersemitone = 3; // this must be 3 108 int binspersemitone = nBPS;
109 int minoctave = 0; // this must be 0 109 int minoctave = 0; // this must be 0
110 int maxoctave = 7; // this must be 7 110 int maxoctave = 7; // this must be 7
111 int oversampling = 80; 111 int oversampling = 80;
112 112
113 // linear frequency vector 113 // linear frequency vector
126 // pitch-spaced frequency vector 126 // pitch-spaced frequency vector
127 int minMIDI = 21 + minoctave * 12 - 1; // this includes one additional semitone! 127 int minMIDI = 21 + minoctave * 12 - 1; // this includes one additional semitone!
128 int maxMIDI = 21 + maxoctave * 12; // this includes one additional semitone! 128 int maxMIDI = 21 + maxoctave * 12; // this includes one additional semitone!
129 vector<float> cq_f; 129 vector<float> cq_f;
130 float oob = 1.0/binspersemitone; // one over binspersemitone 130 float oob = 1.0/binspersemitone; // one over binspersemitone
131 cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI-69))); // 0.083333 is approx 1/12 131 // cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI-69))); // 0.083333 is approx 1/12
132 cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI+oob-69))); 132 // cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI+oob-69)));
133 for (int i = minMIDI + 1; i < maxMIDI; ++i) { 133 for (int i = minMIDI; i < maxMIDI; ++i) {
134 for (int k = -1; k < 2; ++k) { 134 for (int k = 0; k < binspersemitone; ++k) {
135 cq_f.push_back(440 * pow(2.0,0.083333333333 * (i+oob*k-69))); 135 cq_f.push_back(440 * pow(2.0,0.083333333333 * (i+oob*k-69)));
136 } 136 }
137 } 137 }
138 cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI-oob-69))); 138 // cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI-oob-69)));
139 cq_f.push_back(440 * pow(2.0,0.083333 * (maxMIDI-69))); 139 cq_f.push_back(440 * pow(2.0,0.083333 * (maxMIDI-69)));
140 140
141 int nFFT = fft_f.size(); 141 int nFFT = fft_f.size();
142 142
143 vector<float> fft_activation; 143 vector<float> fft_activation;
169 } 169 }
170 return true; 170 return true;
171 } 171 }
172 172
173 void dictionaryMatrix(float* dm, float s_param) { 173 void dictionaryMatrix(float* dm, float s_param) {
174 int binspersemitone = 3; // this must be 3 174 int binspersemitone = nBPS;
175 int minoctave = 0; // this must be 0 175 int minoctave = 0; // this must be 0
176 int maxoctave = 7; // this must be 7 176 int maxoctave = 7; // this must be 7
177 // float s_param = 0.7; 177 // float s_param = 0.7;
178 178
179 // pitch-spaced frequency vector 179 // pitch-spaced frequency vector
180 int minMIDI = 21 + minoctave * 12 - 1; // this includes one additional semitone! 180 int minMIDI = 21 + minoctave * 12 - 1; // this includes one additional semitone!
181 int maxMIDI = 21 + maxoctave * 12; // this includes one additional semitone! 181 int maxMIDI = 21 + maxoctave * 12; // this includes one additional semitone!
182 vector<float> cq_f; 182 vector<float> cq_f;
183 float oob = 1.0/binspersemitone; // one over binspersemitone 183 float oob = 1.0/binspersemitone; // one over binspersemitone
184 cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI-69))); // 0.083333 is approx 1/12 184 // cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI-69))); // 0.083333 is approx 1/12
185 cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI+oob-69))); 185 // cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI+oob-69)));
186 for (int i = minMIDI + 1; i < maxMIDI; ++i) { 186 for (int i = minMIDI; i < maxMIDI; ++i) {
187 for (int k = -1; k < 2; ++k) { 187 for (int k = 0; k < binspersemitone; ++k) {
188 cq_f.push_back(440 * pow(2.0,0.083333333333 * (i+oob*k-69))); 188 cq_f.push_back(440 * pow(2.0,0.083333333333 * (i+oob*k-69)));
189 } 189 }
190 } 190 }
191 cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI-oob-69))); 191 // cq_f.push_back(440 * pow(2.0,0.083333 * (minMIDI-oob-69)));
192 cq_f.push_back(440 * pow(2.0,0.083333 * (maxMIDI-69))); 192 cq_f.push_back(440 * pow(2.0,0.083333 * (maxMIDI-69)));
193 193
194 float curr_f; 194 float curr_f;
195 float floatbin; 195 float floatbin;
196 float curr_amp; 196 float curr_amp;