Revision 4:c74846514b09
| CepstrumPitchTracker.cpp | ||
|---|---|---|
| 271 | 271 |
double *io = new double[bs]; |
| 272 | 272 |
double *logmag = new double[bs]; |
| 273 | 273 |
|
| 274 |
// The "forward difference" method
|
|
| 274 |
// The "inverse symmetric" method. Seems to be the most reliable
|
|
| 275 | 275 |
|
| 276 | 276 |
for (int i = 0; i < hs; ++i) {
|
| 277 | 277 |
|
| ... | ... | |
| 282 | 282 |
|
| 283 | 283 |
double lm = log(mag + 0.00000001); |
| 284 | 284 |
|
| 285 |
logmag[bs/2 + i - 1] = lm; |
|
| 286 |
if (i < hs-1) {
|
|
| 287 |
logmag[bs/2 - i - 1] = lm; |
|
| 288 |
} |
|
| 285 |
logmag[i] = lm; |
|
| 286 |
if (i > 0) logmag[bs - i] = lm; |
|
| 289 | 287 |
} |
| 290 | 288 |
|
| 291 |
fft(bs, false, logmag, 0, rawcep, io); |
|
| 292 |
|
|
| 293 |
for (int i = 0; i < hs; ++i) {
|
|
| 294 |
rawcep[i] = fabs(io[i]) - fabs(rawcep[i]); |
|
| 295 |
} |
|
| 289 |
fft(bs, true, logmag, 0, rawcep, io); |
|
| 296 | 290 |
|
| 297 | 291 |
delete[] logmag; |
| 298 | 292 |
delete[] io; |
| ... | ... | |
| 333 | 327 |
|
| 334 | 328 |
// std::cerr << "peakProportion = " << peakProportion << std::endl; |
| 335 | 329 |
// std::cerr << "peak = " << m_inputSampleRate / (maxbin + m_binFrom) << std::endl; |
| 330 |
// std::cerr << "bins = " << m_bins << std::endl; |
|
| 336 | 331 |
|
| 337 |
if (peakProportion >= 0.03) {
|
|
| 332 |
if (peakProportion >= (0.00006 * m_bins)) {
|
|
| 338 | 333 |
Feature f; |
| 339 | 334 |
f.hasTimestamp = true; |
| 340 | 335 |
f.timestamp = timestamp; |
Also available in: Unified diff