comparison Chordino.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 4270f3039ab0
comparison
equal deleted inserted replaced
78:d52884de7d79 80:026a5c0ee2c2
244 // 244 //
245 /** Calculate Tuning 245 /** Calculate Tuning
246 calculate tuning from (using the angle of the complex number defined by the 246 calculate tuning from (using the angle of the complex number defined by the
247 cumulative mean real and imag values) 247 cumulative mean real and imag values)
248 **/ 248 **/
249 float meanTuningImag = sinvalue * m_meanTuning1 - sinvalue * m_meanTuning2; 249 float meanTuningImag = 0;
250 float meanTuningReal = m_meanTuning0 + cosvalue * m_meanTuning1 + cosvalue * m_meanTuning2; 250 float meanTuningReal = 0;
251 for (int iBPS = 0; iBPS < nBPS; ++iBPS) {
252 meanTuningReal += m_meanTunings[iBPS] * cosvalues[iBPS];
253 meanTuningImag += m_meanTunings[iBPS] * sinvalues[iBPS];
254 }
251 float cumulativetuning = 440 * pow(2,atan2(meanTuningImag, meanTuningReal)/(24*M_PI)); 255 float cumulativetuning = 440 * pow(2,atan2(meanTuningImag, meanTuningReal)/(24*M_PI));
252 float normalisedtuning = atan2(meanTuningImag, meanTuningReal)/(2*M_PI); 256 float normalisedtuning = atan2(meanTuningImag, meanTuningReal)/(2*M_PI);
253 int intShift = floor(normalisedtuning * 3); 257 int intShift = floor(normalisedtuning * 3);
254 float intFactor = normalisedtuning * 3 - intShift; // intFactor is a really bad name for this 258 float floatShift = normalisedtuning * 3 - intShift; // floatShift is a really bad name for this
255 259
256 char buffer0 [50]; 260 char buffer0 [50];
257 261
258 sprintf(buffer0, "estimated tuning: %0.1f Hz", cumulativetuning); 262 sprintf(buffer0, "estimated tuning: %0.1f Hz", cumulativetuning);
259 263
283 timestamps.push_back(currentLogSpectum.timestamp); 287 timestamps.push_back(currentLogSpectum.timestamp);
284 currentTunedSpec.values.push_back(0.0); currentTunedSpec.values.push_back(0.0); // set lower edge to zero 288 currentTunedSpec.values.push_back(0.0); currentTunedSpec.values.push_back(0.0); // set lower edge to zero
285 289
286 if (m_tuneLocal) { 290 if (m_tuneLocal) {
287 intShift = floor(m_localTuning[count] * 3); 291 intShift = floor(m_localTuning[count] * 3);
288 intFactor = m_localTuning[count] * 3 - intShift; // intFactor is a really bad name for this 292 floatShift = m_localTuning[count] * 3 - intShift; // floatShift is a really bad name for this
289 } 293 }
290 294
291 // cerr << intShift << " " << intFactor << endl; 295 // cerr << intShift << " " << floatShift << endl;
292 296
293 for (unsigned k = 2; k < currentLogSpectum.values.size() - 3; ++k) { // interpolate all inner bins 297 for (unsigned k = 2; k < currentLogSpectum.values.size() - 3; ++k) { // interpolate all inner bins
294 tempValue = currentLogSpectum.values[k + intShift] * (1-intFactor) + currentLogSpectum.values[k+intShift+1] * intFactor; 298 tempValue = currentLogSpectum.values[k + intShift] * (1-floatShift) + currentLogSpectum.values[k+intShift+1] * floatShift;
295 currentTunedSpec.values.push_back(tempValue); 299 currentTunedSpec.values.push_back(tempValue);
296 } 300 }
297 301
298 currentTunedSpec.values.push_back(0.0); currentTunedSpec.values.push_back(0.0); currentTunedSpec.values.push_back(0.0); // upper edge 302 currentTunedSpec.values.push_back(0.0); currentTunedSpec.values.push_back(0.0); currentTunedSpec.values.push_back(0.0); // upper edge
299 vector<float> runningmean = SpecialConvolution(currentTunedSpec.values,hw); 303 vector<float> runningmean = SpecialConvolution(currentTunedSpec.values,hw);