Mercurial > hg > nnls-chroma
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; |