annotate dsp/tonal/TonalEstimator.cpp @ 321:f1e6be2de9a5

A threshold (delta) is added in the peak picking parameters structure (PPickParams). It is used as an offset when computing the smoothed detection function. A constructor for the structure PPickParams is also added to set the parameters to 0 when a structure instance is created. Hence programmes using the peak picking parameter structure and which do not set the delta parameter (e.g. QM Vamp note onset detector) won't be affected by the modifications. Functions modified: - dsp/onsets/PeakPicking.cpp - dsp/onsets/PeakPicking.h - dsp/signalconditioning/DFProcess.cpp - dsp/signalconditioning/DFProcess.h
author mathieub <mathieu.barthet@eecs.qmul.ac.uk>
date Mon, 20 Jun 2011 19:01:48 +0100
parents d5014ab8b0e5
children cbe668c7d724
rev   line source
c@225 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
c@225 2
c@225 3 /*
c@225 4 QM DSP Library
c@225 5
c@225 6 Centre for Digital Music, Queen Mary, University of London.
c@225 7 This file copyright 2006 Martin Gasser.
c@309 8
c@309 9 This program is free software; you can redistribute it and/or
c@309 10 modify it under the terms of the GNU General Public License as
c@309 11 published by the Free Software Foundation; either version 2 of the
c@309 12 License, or (at your option) any later version. See the file
c@309 13 COPYING included with this distribution for more information.
c@225 14 */
c@225 15
c@225 16 #include "TonalEstimator.h"
c@225 17
c@225 18 #include <cmath>
c@225 19 #include <iostream>
c@225 20
c@225 21 #ifndef PI
c@225 22 #define PI (3.14159265358979232846)
c@225 23 #endif
c@225 24
c@225 25 TonalEstimator::TonalEstimator()
c@225 26 {
c@225 27 m_Basis.resize(6);
c@225 28
c@225 29 int i = 0;
c@225 30
c@225 31
c@225 32 // circle of fifths
c@225 33 m_Basis[i].resize(12);
c@225 34 for (int iP = 0; iP < 12; iP++)
c@225 35 {
c@225 36 m_Basis[i][iP] = std::sin( (7.0 / 6.0) * iP * PI);
c@225 37 }
c@225 38
c@225 39 i++;
c@225 40
c@225 41 m_Basis[i].resize(12);
c@225 42 for (int iP = 0; iP < 12; iP++)
c@225 43 {
c@225 44 m_Basis[i][iP] = std::cos( (7.0 / 6.0) * iP * PI);
c@225 45 }
c@225 46
c@225 47 i++;
c@225 48
c@225 49
c@225 50 // circle of major thirds
c@225 51 m_Basis[i].resize(12);
c@225 52 for (int iP = 0; iP < 12; iP++)
c@225 53 {
c@225 54 m_Basis[i][iP] = 0.6 * std::sin( (2.0 / 3.0) * iP * PI);
c@225 55 }
c@225 56
c@225 57 i++;
c@225 58
c@225 59 m_Basis[i].resize(12);
c@225 60 for (int iP = 0; iP < 12; iP++)
c@225 61 {
c@225 62 m_Basis[i][iP] = 0.6 * std::cos( (2.0 / 3.0) * iP * PI);
c@225 63 }
c@225 64
c@225 65 i++;
c@225 66
c@225 67
c@225 68 // circle of minor thirds
c@225 69 m_Basis[i].resize(12);
c@225 70 for (int iP = 0; iP < 12; iP++)
c@225 71 {
c@225 72 m_Basis[i][iP] = 1.1 * std::sin( (3.0 / 2.0) * iP * PI);
c@225 73 }
c@225 74
c@225 75 i++;
c@225 76
c@225 77 m_Basis[i].resize(12);
c@225 78 for (int iP = 0; iP < 12; iP++)
c@225 79 {
c@225 80 m_Basis[i][iP] = 1.1 * std::cos( (3.0 / 2.0) * iP * PI);
c@225 81 }
c@225 82
c@225 83 }
c@225 84
c@225 85 TonalEstimator::~TonalEstimator()
c@225 86 {
c@225 87 }
c@225 88
c@225 89 TCSVector TonalEstimator::transform2TCS(const ChromaVector& rVector)
c@225 90 {
c@225 91 TCSVector vaRetVal;
c@225 92 vaRetVal.resize(6, 0.0);
c@225 93
c@225 94 for (int i = 0; i < 6; i++)
c@225 95 {
c@225 96 for (int iP = 0; iP < 12; iP++)
c@225 97 {
c@225 98 vaRetVal[i] += m_Basis[i][iP] * rVector[iP];
c@225 99 }
c@225 100 }
c@225 101
c@225 102 return vaRetVal;
c@225 103 }