Mercurial > hg > qm-dsp
comparison dsp/tonal/TonalEstimator.cpp @ 505:930b5b0f707d
Merge branch 'codestyle-and-tidy'
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Wed, 05 Jun 2019 12:55:15 +0100 |
parents | 7992d0923626 |
children |
comparison
equal
deleted
inserted
replaced
471:e3335cb213da | 505:930b5b0f707d |
---|---|
16 #include "TonalEstimator.h" | 16 #include "TonalEstimator.h" |
17 | 17 |
18 #include <cmath> | 18 #include <cmath> |
19 #include <iostream> | 19 #include <iostream> |
20 | 20 |
21 #ifndef PI | |
22 #define PI (3.14159265358979232846) | |
23 #endif | |
24 | |
25 TonalEstimator::TonalEstimator() | 21 TonalEstimator::TonalEstimator() |
26 { | 22 { |
27 m_Basis.resize(6); | 23 m_Basis.resize(6); |
28 | 24 |
29 int i = 0; | 25 int i = 0; |
30 | 26 |
31 | 27 |
32 // circle of fifths | 28 // circle of fifths |
33 m_Basis[i].resize(12); | 29 m_Basis[i].resize(12); |
34 for (int iP = 0; iP < 12; iP++) | 30 for (int iP = 0; iP < 12; iP++) { |
35 { | 31 m_Basis[i][iP] = std::sin( (7.0 / 6.0) * iP * M_PI); |
36 m_Basis[i][iP] = std::sin( (7.0 / 6.0) * iP * PI); | 32 } |
37 } | 33 |
38 | 34 i++; |
39 i++; | |
40 | 35 |
41 m_Basis[i].resize(12); | 36 m_Basis[i].resize(12); |
42 for (int iP = 0; iP < 12; iP++) | 37 for (int iP = 0; iP < 12; iP++) { |
43 { | 38 m_Basis[i][iP] = std::cos( (7.0 / 6.0) * iP * M_PI); |
44 m_Basis[i][iP] = std::cos( (7.0 / 6.0) * iP * PI); | 39 } |
45 } | 40 |
46 | 41 i++; |
47 i++; | 42 |
48 | 43 |
49 | 44 // circle of major thirds |
50 // circle of major thirds | 45 m_Basis[i].resize(12); |
51 m_Basis[i].resize(12); | 46 for (int iP = 0; iP < 12; iP++) { |
52 for (int iP = 0; iP < 12; iP++) | 47 m_Basis[i][iP] = 0.6 * std::sin( (2.0 / 3.0) * iP * M_PI); |
53 { | 48 } |
54 m_Basis[i][iP] = 0.6 * std::sin( (2.0 / 3.0) * iP * PI); | 49 |
55 } | 50 i++; |
56 | |
57 i++; | |
58 | 51 |
59 m_Basis[i].resize(12); | 52 m_Basis[i].resize(12); |
60 for (int iP = 0; iP < 12; iP++) | 53 for (int iP = 0; iP < 12; iP++) { |
61 { | 54 m_Basis[i][iP] = 0.6 * std::cos( (2.0 / 3.0) * iP * M_PI); |
62 m_Basis[i][iP] = 0.6 * std::cos( (2.0 / 3.0) * iP * PI); | 55 } |
63 } | |
64 | 56 |
65 i++; | 57 i++; |
66 | 58 |
67 | 59 |
68 // circle of minor thirds | 60 // circle of minor thirds |
69 m_Basis[i].resize(12); | 61 m_Basis[i].resize(12); |
70 for (int iP = 0; iP < 12; iP++) | 62 for (int iP = 0; iP < 12; iP++) { |
71 { | 63 m_Basis[i][iP] = 1.1 * std::sin( (3.0 / 2.0) * iP * M_PI); |
72 m_Basis[i][iP] = 1.1 * std::sin( (3.0 / 2.0) * iP * PI); | 64 } |
73 } | 65 |
74 | 66 i++; |
75 i++; | |
76 | 67 |
77 m_Basis[i].resize(12); | 68 m_Basis[i].resize(12); |
78 for (int iP = 0; iP < 12; iP++) | 69 for (int iP = 0; iP < 12; iP++) { |
79 { | 70 m_Basis[i][iP] = 1.1 * std::cos( (3.0 / 2.0) * iP * M_PI); |
80 m_Basis[i][iP] = 1.1 * std::cos( (3.0 / 2.0) * iP * PI); | 71 } |
81 } | |
82 | 72 |
83 } | 73 } |
84 | 74 |
85 TonalEstimator::~TonalEstimator() | 75 TonalEstimator::~TonalEstimator() |
86 { | 76 { |
87 } | 77 } |
88 | 78 |
89 TCSVector TonalEstimator::transform2TCS(const ChromaVector& rVector) | 79 TCSVector TonalEstimator::transform2TCS(const ChromaVector& rVector) |
90 { | 80 { |
91 TCSVector vaRetVal; | 81 TCSVector vaRetVal; |
92 vaRetVal.resize(6, 0.0); | 82 vaRetVal.resize(6, 0.0); |
93 | 83 |
94 for (int i = 0; i < 6; i++) | 84 for (int i = 0; i < 6; i++) { |
95 { | 85 for (int iP = 0; iP < 12; iP++) { |
96 for (int iP = 0; iP < 12; iP++) | 86 vaRetVal[i] += m_Basis[i][iP] * rVector[iP]; |
97 { | 87 } |
98 vaRetVal[i] += m_Basis[i][iP] * rVector[iP]; | 88 } |
99 } | 89 |
100 } | 90 return vaRetVal; |
101 | |
102 return vaRetVal; | |
103 } | 91 } |