annotate dsp/tonal/TonalEstimator.h @ 482:cbe668c7d724

Untabify, indent, tidy
author Chris Cannam <cannam@all-day-breakfast.com>
date Fri, 31 May 2019 11:02:28 +0100
parents 7e8d1f26b098
children 701233f8ed41
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 #ifndef _TONALESTIMATOR_
c@225 17 #define _TONALESTIMATOR_
c@225 18
c@225 19
c@225 20 #include <valarray>
c@225 21 #include <numeric>
c@225 22 #include <algorithm>
c@225 23 #include <iostream>
c@225 24
c@225 25 class ChromaVector : public std::valarray<double>
c@225 26 {
c@225 27 public:
cannam@482 28 ChromaVector(size_t uSize = 12) : std::valarray<double>() {
cannam@482 29 resize(uSize, 0.0f);
cannam@482 30 }
cannam@482 31
cannam@482 32 virtual ~ChromaVector() {};
cannam@482 33
cannam@482 34 void printDebug() {
cannam@482 35 for (int i = 0; i < int(size()); i++) {
cannam@482 36 std::cout << (*this)[i] << ";";
cannam@482 37 }
cannam@482 38 std::cout << std::endl;
cannam@482 39 }
cannam@482 40
cannam@482 41 void normalizeL1() {
cannam@482 42 // normalize the chroma vector (L1 norm)
cannam@482 43 double dSum = 0.0;
cannam@482 44
cannam@482 45 for (size_t i = 0; i < 12; (dSum += std::abs((*this)[i++]))) ;
cannam@482 46 for (size_t i = 0; i < 12; dSum > 0.0000001?((*this)[i] /= dSum):(*this)[i]=0.0, i++) ;
cannam@482 47 }
c@225 48
cannam@482 49 void clear() {
c@299 50 for (size_t i = 0; i < 12; ++i) (*this)[i] = 0.0;
c@299 51 }
c@225 52 };
c@225 53
c@225 54 class TCSVector : public std::valarray<double>
c@225 55 {
c@225 56 public:
cannam@482 57 TCSVector() : std::valarray<double>() {
cannam@482 58 resize(6, 0.0f);
cannam@482 59 }
cannam@482 60
cannam@482 61 virtual ~TCSVector() {};
c@225 62
cannam@482 63 void printDebug() {
cannam@482 64 for (int i = 0; i < int(size()); i++) {
cannam@482 65 std::cout << (*this)[i] << ";";
cannam@482 66 }
cannam@482 67 std::cout << std::endl;
cannam@482 68 }
cannam@482 69
cannam@482 70 double magnitude() const {
cannam@482 71 double dMag = 0.0;
cannam@482 72
cannam@482 73 for (size_t i = 0; i < 6; i++) {
cannam@482 74 dMag += std::pow((*this)[i], 2.0);
cannam@482 75 }
cannam@482 76
cannam@482 77 return std::sqrt(dMag);
cannam@482 78 }
c@225 79 };
c@225 80
c@225 81 class TonalEstimator
c@225 82 {
c@225 83 public:
cannam@482 84 TonalEstimator();
cannam@482 85 virtual ~TonalEstimator();
cannam@482 86 TCSVector transform2TCS(const ChromaVector& rVector);
cannam@482 87
c@225 88 protected:
cannam@482 89 std::valarray< std::valarray<double> > m_Basis;
c@225 90 };
c@225 91
c@225 92 #endif // _TONALESTIMATOR_