comparison onsetsdsplugin.cpp @ 1:3d1928670329

* Commit Dan's patch for threshold parameter
author cannam
date Fri, 20 Jun 2008 13:42:15 +0000
parents 635e8745ccc9
children deae47ee00e7
comparison
equal deleted inserted replaced
0:635e8745ccc9 1:3d1928670329
33 OnsetsDSPlugin::OnsetsDSPlugin(float inputSampleRate) : 33 OnsetsDSPlugin::OnsetsDSPlugin(float inputSampleRate) :
34 Vamp::Plugin(inputSampleRate), 34 Vamp::Plugin(inputSampleRate),
35 m_ods(0), 35 m_ods(0),
36 m_odsdata(0), 36 m_odsdata(0),
37 m_dfType(ODS_ODF_RCOMPLEX), 37 m_dfType(ODS_ODF_RCOMPLEX),
38 m_threshold(0.5),
38 m_medspan(11), 39 m_medspan(11),
39 m_stepSize(512), 40 m_stepSize(256),
40 m_fftSize(1024) 41 m_fftSize(512)
41 { 42 {
42 } 43 }
43 44
44 OnsetsDSPlugin::~OnsetsDSPlugin() 45 OnsetsDSPlugin::~OnsetsDSPlugin()
45 { 46 {
104 desc.valueNames.push_back("Phase deviation"); 105 desc.valueNames.push_back("Phase deviation");
105 desc.valueNames.push_back("Weighted phase deviation"); 106 desc.valueNames.push_back("Weighted phase deviation");
106 desc.valueNames.push_back("Modified Kullback-Liebler deviation"); 107 desc.valueNames.push_back("Modified Kullback-Liebler deviation");
107 list.push_back(desc); 108 list.push_back(desc);
108 109
110 desc.identifier = "threshold";
111 desc.name = "Detection threshold";
112 desc.description = "Onsets trigger when the function beats this value";
113 desc.minValue = 0;
114 desc.maxValue = 1;
115 desc.defaultValue = 0.5;
116 desc.isQuantized = false;
117 desc.valueNames.clear();
118 list.push_back(desc);
119
109 desc.identifier = "medspan"; 120 desc.identifier = "medspan";
110 desc.name = "Median frame span"; 121 desc.name = "Median frame span";
111 desc.description = "Number of past frames used in median calculation"; 122 desc.description = "Number of past frames used in median calculation";
112 desc.minValue = 5; 123 desc.minValue = 5;
113 desc.maxValue = 21; 124 desc.maxValue = 21;
131 case ODS_ODF_RCOMPLEX: return 3; 142 case ODS_ODF_RCOMPLEX: return 3;
132 case ODS_ODF_PHASE: return 4; 143 case ODS_ODF_PHASE: return 4;
133 case ODS_ODF_WPHASE: return 5; 144 case ODS_ODF_WPHASE: return 5;
134 case ODS_ODF_MKL: return 6; 145 case ODS_ODF_MKL: return 6;
135 } 146 }
147 } else if (name == "threshold") {
148 return m_threshold;
136 } else if (name == "medspan") { 149 } else if (name == "medspan") {
137 return m_medspan; 150 return m_medspan;
138 } 151 }
139 return 0.0; 152 return 0.0;
140 } 153 }
153 case 5: dfType = ODS_ODF_WPHASE; break; 166 case 5: dfType = ODS_ODF_WPHASE; break;
154 case 6: dfType = ODS_ODF_MKL; break; 167 case 6: dfType = ODS_ODF_MKL; break;
155 } 168 }
156 if (dfType == m_dfType) return; 169 if (dfType == m_dfType) return;
157 m_dfType = dfType; 170 m_dfType = dfType;
171 } else if (name == "threshold") {
172 m_threshold = value;
158 } else if (name == "medspan") { 173 } else if (name == "medspan") {
159 m_medspan = lrintf(value); 174 m_medspan = lrintf(value);
160 } 175 }
161 } 176 }
162 177
189 m_odsdata = new float[onsetsds_memneeded(m_dfType, m_fftSize, m_medspan)]; 204 m_odsdata = new float[onsetsds_memneeded(m_dfType, m_fftSize, m_medspan)];
190 m_ods = new OnsetsDS; 205 m_ods = new OnsetsDS;
191 memset(m_ods, 0, sizeof(OnsetsDS)); 206 memset(m_ods, 0, sizeof(OnsetsDS));
192 onsetsds_init(m_ods, m_odsdata, ODS_FFT_FFTW3_R2C, m_dfType, m_fftSize, 207 onsetsds_init(m_ods, m_odsdata, ODS_FFT_FFTW3_R2C, m_dfType, m_fftSize,
193 m_medspan, m_inputSampleRate); 208 m_medspan, m_inputSampleRate);
194 209 m_ods->thresh = m_threshold;
210
195 return true; 211 return true;
196 } 212 }
197 213
198 void 214 void
199 OnsetsDSPlugin::reset() 215 OnsetsDSPlugin::reset()
207 } 223 }
208 224
209 size_t 225 size_t
210 OnsetsDSPlugin::getPreferredStepSize() const 226 OnsetsDSPlugin::getPreferredStepSize() const
211 { 227 {
212 return 512; 228 return 256;
213 } 229 }
214 230
215 size_t 231 size_t
216 OnsetsDSPlugin::getPreferredBlockSize() const 232 OnsetsDSPlugin::getPreferredBlockSize() const
217 { 233 {
218 return 1024; 234 return 512;
219 } 235 }
220 236
221 OnsetsDSPlugin::OutputList 237 OnsetsDSPlugin::OutputList
222 OnsetsDSPlugin::getOutputDescriptors() const 238 OnsetsDSPlugin::getOutputDescriptors() const
223 { 239 {