Mercurial > hg > qm-vamp-plugins
comparison plugins/BeatTrack.cpp @ 30:ff5a09e45209
* add support for adaptive whitening
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Thu, 09 Aug 2007 16:35:37 +0000 |
parents | 56fe3bd9de6e |
children | 5cd7e3069553 |
comparison
equal
deleted
inserted
replaced
29:56fe3bd9de6e | 30:ff5a09e45209 |
---|---|
42 | 42 |
43 | 43 |
44 BeatTracker::BeatTracker(float inputSampleRate) : | 44 BeatTracker::BeatTracker(float inputSampleRate) : |
45 Vamp::Plugin(inputSampleRate), | 45 Vamp::Plugin(inputSampleRate), |
46 m_d(0), | 46 m_d(0), |
47 m_dfType(DF_COMPLEXSD) | 47 m_dfType(DF_COMPLEXSD), |
48 m_whiten(false) | |
48 { | 49 { |
49 } | 50 } |
50 | 51 |
51 BeatTracker::~BeatTracker() | 52 BeatTracker::~BeatTracker() |
52 { | 53 { |
108 desc.valueNames.push_back("Phase Deviation"); | 109 desc.valueNames.push_back("Phase Deviation"); |
109 desc.valueNames.push_back("Complex Domain"); | 110 desc.valueNames.push_back("Complex Domain"); |
110 desc.valueNames.push_back("Broadband Energy Rise"); | 111 desc.valueNames.push_back("Broadband Energy Rise"); |
111 list.push_back(desc); | 112 list.push_back(desc); |
112 | 113 |
114 desc.identifier = "whiten"; | |
115 desc.name = "Adaptive Whitening"; | |
116 desc.description = "Normalize frequency bin magnitudes relative to recent peak levels"; | |
117 desc.minValue = 0; | |
118 desc.maxValue = 1; | |
119 desc.defaultValue = 0; | |
120 desc.isQuantized = true; | |
121 desc.quantizeStep = 1; | |
122 desc.unit = ""; | |
123 desc.valueNames.clear(); | |
124 list.push_back(desc); | |
125 | |
113 return list; | 126 return list; |
114 } | 127 } |
115 | 128 |
116 float | 129 float |
117 BeatTracker::getParameter(std::string name) const | 130 BeatTracker::getParameter(std::string name) const |
121 case DF_HFC: return 0; | 134 case DF_HFC: return 0; |
122 case DF_SPECDIFF: return 1; | 135 case DF_SPECDIFF: return 1; |
123 case DF_PHASEDEV: return 2; | 136 case DF_PHASEDEV: return 2; |
124 default: case DF_COMPLEXSD: return 3; | 137 default: case DF_COMPLEXSD: return 3; |
125 case DF_BROADBAND: return 4; | 138 case DF_BROADBAND: return 4; |
139 case DF_POWER: return 5; | |
126 } | 140 } |
141 } else if (name == "whiten") { | |
142 return m_whiten ? 1.0 : 0.0; | |
127 } | 143 } |
128 return 0.0; | 144 return 0.0; |
129 } | 145 } |
130 | 146 |
131 void | 147 void |
136 case 0: m_dfType = DF_HFC; break; | 152 case 0: m_dfType = DF_HFC; break; |
137 case 1: m_dfType = DF_SPECDIFF; break; | 153 case 1: m_dfType = DF_SPECDIFF; break; |
138 case 2: m_dfType = DF_PHASEDEV; break; | 154 case 2: m_dfType = DF_PHASEDEV; break; |
139 default: case 3: m_dfType = DF_COMPLEXSD; break; | 155 default: case 3: m_dfType = DF_COMPLEXSD; break; |
140 case 4: m_dfType = DF_BROADBAND; break; | 156 case 4: m_dfType = DF_BROADBAND; break; |
157 case 5: m_dfType = DF_POWER; break; | |
141 } | 158 } |
159 } else if (name == "whiten") { | |
160 m_whiten = (value > 0.5); | |
142 } | 161 } |
143 } | 162 } |
144 | 163 |
145 bool | 164 bool |
146 BeatTracker::initialise(size_t channels, size_t stepSize, size_t blockSize) | 165 BeatTracker::initialise(size_t channels, size_t stepSize, size_t blockSize) |
173 dfConfig.DFType = m_dfType; | 192 dfConfig.DFType = m_dfType; |
174 dfConfig.stepSecs = float(stepSize) / m_inputSampleRate; | 193 dfConfig.stepSecs = float(stepSize) / m_inputSampleRate; |
175 dfConfig.stepSize = stepSize; | 194 dfConfig.stepSize = stepSize; |
176 dfConfig.frameLength = blockSize; | 195 dfConfig.frameLength = blockSize; |
177 dfConfig.dbRise = 3; | 196 dfConfig.dbRise = 3; |
197 dfConfig.adaptiveWhitening = m_whiten; | |
198 dfConfig.whiteningRelaxCoeff = -1; | |
199 dfConfig.whiteningFloor = -1; | |
178 | 200 |
179 m_d = new BeatTrackerData(dfConfig); | 201 m_d = new BeatTrackerData(dfConfig); |
180 return true; | 202 return true; |
181 } | 203 } |
182 | 204 |