annotate dsp/tempotracking/TempoTrackV2.h @ 321:f1e6be2de9a5

A threshold (delta) is added in the peak picking parameters structure (PPickParams). It is used as an offset when computing the smoothed detection function. A constructor for the structure PPickParams is also added to set the parameters to 0 when a structure instance is created. Hence programmes using the peak picking parameter structure and which do not set the delta parameter (e.g. QM Vamp note onset detector) won't be affected by the modifications. Functions modified: - dsp/onsets/PeakPicking.cpp - dsp/onsets/PeakPicking.h - dsp/signalconditioning/DFProcess.cpp - dsp/signalconditioning/DFProcess.h
author mathieub <mathieu.barthet@eecs.qmul.ac.uk>
date Mon, 20 Jun 2011 19:01:48 +0100
parents d5014ab8b0e5
children 915365c58758
rev   line source
c@277 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
c@277 2
c@277 3 /*
c@277 4 QM DSP Library
c@277 5
c@277 6 Centre for Digital Music, Queen Mary, University of London.
c@277 7 This file copyright 2008-2009 Matthew Davies and QMUL.
c@309 8
c@309 9 This program is free software; you can redistribute it and/or
c@309 10 modify it under the terms of the GNU General Public License as
c@309 11 published by the Free Software Foundation; either version 2 of the
c@309 12 License, or (at your option) any later version. See the file
c@309 13 COPYING included with this distribution for more information.
c@277 14 */
c@277 15
c@277 16
c@277 17 #ifndef TEMPOTRACKV2_H
c@277 18 #define TEMPOTRACKV2_H
c@277 19
c@277 20 #include <vector>
c@277 21
c@277 22 using std::vector;
c@277 23
c@279 24 //!!! Question: how far is this actually sample rate dependent? I
c@279 25 // think it does produce plausible results for e.g. 48000 as well as
c@279 26 // 44100, but surely the fixed window sizes and comb filtering will
c@279 27 // make it prefer double or half time when run at e.g. 96000?
c@279 28
c@277 29 class TempoTrackV2
c@277 30 {
c@277 31 public:
c@279 32 /**
c@279 33 * Construct a tempo tracker that will operate on beat detection
c@279 34 * function data calculated from audio at the given sample rate
c@279 35 * with the given frame increment.
c@279 36 *
c@279 37 * Currently the sample rate and increment are used only for the
c@279 38 * conversion from beat frame location to bpm in the tempo array.
c@279 39 */
c@279 40 TempoTrackV2(float sampleRate, size_t dfIncrement);
c@277 41 ~TempoTrackV2();
c@277 42
c@279 43 // Returned beat periods are given in df increment units; tempi in bpm
c@277 44 void calculateBeatPeriod(const vector<double> &df,
c@278 45 vector<double> &beatPeriod,
c@278 46 vector<double> &tempi);
c@277 47
c@279 48 // Returned beat positions are given in df increment units
c@277 49 void calculateBeats(const vector<double> &df,
c@277 50 const vector<double> &beatPeriod,
c@277 51 vector<double> &beats);
c@277 52
c@277 53 private:
c@277 54 typedef vector<int> i_vec_t;
c@277 55 typedef vector<vector<int> > i_mat_t;
c@277 56 typedef vector<double> d_vec_t;
c@277 57 typedef vector<vector<double> > d_mat_t;
c@277 58
c@279 59 float m_rate;
c@279 60 size_t m_increment;
c@279 61
c@277 62 void adapt_thresh(d_vec_t &df);
c@277 63 double mean_array(const d_vec_t &dfin, int start, int end);
c@277 64 void filter_df(d_vec_t &df);
c@277 65 void get_rcf(const d_vec_t &dfframe, const d_vec_t &wv, d_vec_t &rcf);
c@278 66 void viterbi_decode(const d_mat_t &rcfmat, const d_vec_t &wv,
c@278 67 d_vec_t &bp, d_vec_t &tempi);
c@277 68 double get_max_val(const d_vec_t &df);
c@277 69 int get_max_ind(const d_vec_t &df);
c@277 70 void normalise_vec(d_vec_t &df);
c@277 71 };
c@277 72
c@277 73 #endif