X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Ftransient_detector.cc;h=41bb51f710275bbdeac69c74c7422eca3ffa7d93;hb=bc0bb9662e939c1b37f4335c05292a7b0ad21a20;hp=cf8557de82740a602cf0ab792c6289323625b6b1;hpb=cd17e05e3a22614387050736c89a4727c4da0d61;p=ardour.git diff --git a/libs/ardour/transient_detector.cc b/libs/ardour/transient_detector.cc index cf8557de82..41bb51f710 100644 --- a/libs/ardour/transient_detector.cc +++ b/libs/ardour/transient_detector.cc @@ -1,3 +1,22 @@ +/* + Copyright (C) 2012 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + #include #include "ardour/readable.h" @@ -11,19 +30,11 @@ using namespace std; /* need a static initializer function for this */ -string TransientDetector::_op_id = X_("libardourvampplugins:qm-onsetdetector:2"); +string TransientDetector::_op_id = X_("qm-onset"); TransientDetector::TransientDetector (float sr) : AudioAnalyser (sr, X_("libardourvampplugins:qm-onsetdetector")) { - /* update the op_id */ - - _op_id = X_("libardourvampplugins:qm-onsetdetector"); - - // XXX this should load the above-named plugin and get the current version - - _op_id += ":2"; - threshold = 0.00; } @@ -125,23 +136,17 @@ TransientDetector::cleanup_transients (AnalysisFeatureList& t, float sr, float g void TransientDetector::update_positions (Readable* src, uint32_t channel, AnalysisFeatureList& positions) { - Plugin::FeatureSet features; + int const buff_size = 1024; + int const step_size = 64; - Sample* data = 0; - - int buff_size = 1024; - int step_size = 64; - - data = new Sample[buff_size]; + Sample* data = new Sample[buff_size]; AnalysisFeatureList::iterator i = positions.begin(); while (i != positions.end()) { - framecnt_t to_read; - /* read from source */ - to_read = buff_size; + framecnt_t const to_read = buff_size; if (src->read (data, (*i) - buff_size, to_read, channel) != to_read) { break; @@ -149,18 +154,18 @@ TransientDetector::update_positions (Readable* src, uint32_t channel, AnalysisFe // Simple heuristic for locating approx correct cut position. - for (int j = 0; j < buff_size;){ + for (int j = 0; j < (buff_size - step_size); ) { - Sample s = abs (data[j]); - Sample s2 = abs (data[j + step_size]); + Sample const s = abs (data[j]); + Sample const s2 = abs (data[j + step_size]); - if ((s2 - s) > threshold){ + if ((s2 - s) > threshold) { //cerr << "Thresh exceeded. Moving pos from: " << (*i) << " to: " << (*i) - buff_size + (j + 16) << endl; (*i) = (*i) - buff_size + (j + 24); break; } - j = j + step_size; + j += step_size; } ++i;