33 string TransientDetector::_op_id =
X_(
"libardourvampplugins:qm-onsetdetector:2");
35 TransientDetector::TransientDetector (
float sr)
40 _op_id =
X_(
"libardourvampplugins:qm-onsetdetector");
63 int ret =
analyse (path, src, channel);
73 const Plugin::FeatureList& fl (features[0]);
75 for (Plugin::FeatureList::const_iterator
f = fl.begin();
f != fl.end(); ++
f) {
77 if (
f->hasTimestamp) {
80 (*out) << (*f).timestamp.toString() << endl;
100 plugin->selectProgram (
"Percussive onsets");
101 plugin->setParameter (
"sensitivity", val);
116 AnalysisFeatureList::iterator i = t.begin();
117 AnalysisFeatureList::iterator
f, b;
120 while (i != t.end()) {
130 while ((f != t.end()) && (((*f) - (*i)) < gap_frames)) {
147 int const buff_size = 1024;
148 int const step_size = 64;
152 AnalysisFeatureList::iterator i = positions.begin();
154 while (i != positions.end()) {
159 if (src->
read (data, (*i) - buff_size, to_read, channel) != to_read) {
165 for (
int j = 0; j < (buff_size - step_size); ) {
167 Sample const s = abs (data[j]);
168 Sample const s2 = abs (data[j + step_size]);
172 (*i) = (*i) - buff_size + (j + 24);
int use_features(Vamp::Plugin::FeatureSet &, std::ostream *)
static void cleanup_transients(AnalysisFeatureList &, float sr, float gap_msecs)
int analyse(const std::string &path, Readable *, uint32_t channel)
AnalysisFeatureList * current_results
virtual framecnt_t read(Sample *, framepos_t pos, framecnt_t cnt, int channel) const =0
std::list< framepos_t > AnalysisFeatureList
int run(const std::string &path, Readable *, uint32_t channel, AnalysisFeatureList &results)
void set_threshold(float)
static std::string _op_id
void set_sensitivity(float)
void update_positions(Readable *src, uint32_t channel, AnalysisFeatureList &results)
static std::string operational_identifier()