Ardour  9.0-pre0-582-g084a23a80d
TempoTrack.h
Go to the documentation of this file.
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 
3 /*
4  QM DSP Library
5 
6  Centre for Digital Music, Queen Mary, University of London.
7  This file 2005-2006 Christian Landone.
8 
9  This program is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License as
11  published by the Free Software Foundation; either version 2 of the
12  License, or (at your option) any later version. See the file
13  COPYING included with this distribution for more information.
14 */
15 
16 #ifndef TEMPOTRACK_H
17 #define TEMPOTRACK_H
18 
19 
20 #include <stdio.h>
21 #include <vector>
22 
24 #include "maths/Correlation.h"
26 
27 
28 
29 using std::vector;
30 
31 struct WinThresh
32 {
33  int pre;
34  int post;
35 };
36 
37 struct TTParams
38 {
39  int winLength; //Analysis window length
40  int lagLength; //Lag & Stride size
41  int alpha; //alpha-norm parameter
42  int LPOrd; // low-pass Filter order
43  double* LPACoeffs; //low pass Filter den coefficients
44  double* LPBCoeffs; //low pass Filter num coefficients
45  WinThresh WinT;//window size in frames for adaptive thresholding [pre post]:
46 };
47 
48 
49 class TempoTrack
50 {
51 public:
52  TempoTrack( TTParams Params );
53  virtual ~TempoTrack();
54 
55  vector<int> process( vector <double> DF, vector <double> *tempoReturn = 0);
56 
57 
58 private:
59  void initialise( TTParams Params );
60  void deInitialise();
61 
62  int beatPredict( int FSP, double alignment, double period, int step);
63  int phaseMM( double* DF, double* weighting, int winLength, double period );
64  void createPhaseExtractor( double* Filter, int winLength, double period, int fsp, int lastBeat );
65  int findMeter( double* ACF, int len, double period );
66  void constDetect( double* periodP, int currentIdx, int* flag );
67  void stepDetect( double* periodP, double* periodG, int currentIdx, int* flag );
68  void createCombFilter( double* Filter, int winLength, int TSig, double beatLag );
69  double tempoMM( double* ACF, double* weight, int sig );
70 
74 
75  double m_rayparam;
76  double m_sigma;
77  double m_DFWVNnorm;
78 
79  vector<int> m_beats; // Vector of detected beats
80 
81  double m_lockedTempo;
82 
83  double* m_tempoScratch;
84  double* m_smoothRCF; // Smoothed Output of Comb Filterbank (m_tempoScratch)
85 
86  // Processing Buffers
87  double* m_rawDFFrame; // Original Detection Function Analysis Frame
88  double* m_smoothDFFrame; // Smoothed Detection Function Analysis Frame
89  double* m_frameACF; // AutoCorrelation of Smoothed Detection Function
90 
91  //Low Pass Coefficients for DF Smoothing
92  double* m_ACoeffs;
93  double* m_BCoeffs;
94 
95  // Objetcs/operators declaration
99  // Config structure for DFProcess
101 
102  // also want to smooth m_tempoScratch
104  // Config structure for RCFProcess
106 
107 
108 
109 };
110 
111 #endif
Definition: Filter.h:21
Definition: Framer.h:25
double * m_rawDFFrame
Definition: TempoTrack.h:87
double * m_smoothRCF
Definition: TempoTrack.h:84
int m_lagLength
Definition: TempoTrack.h:73
int phaseMM(double *DF, double *weighting, int winLength, double period)
void initialise(TTParams Params)
int m_winLength
Definition: TempoTrack.h:72
double m_lockedTempo
Definition: TempoTrack.h:81
virtual ~TempoTrack()
double tempoMM(double *ACF, double *weight, int sig)
vector< int > m_beats
Definition: TempoTrack.h:79
double m_DFWVNnorm
Definition: TempoTrack.h:77
int beatPredict(int FSP, double alignment, double period, int step)
double m_sigma
Definition: TempoTrack.h:76
void createPhaseExtractor(double *Filter, int winLength, double period, int fsp, int lastBeat)
double * m_frameACF
Definition: TempoTrack.h:89
int m_dataLength
Definition: TempoTrack.h:71
DFProcess * m_RCFConditioning
Definition: TempoTrack.h:103
double * m_tempoScratch
Definition: TempoTrack.h:83
Correlation m_correlator
Definition: TempoTrack.h:98
double * m_smoothDFFrame
Definition: TempoTrack.h:88
void stepDetect(double *periodP, double *periodG, int currentIdx, int *flag)
TempoTrack(TTParams Params)
DFProcess * m_DFConditioning
Definition: TempoTrack.h:97
vector< int > process(vector< double > DF, vector< double > *tempoReturn=0)
double m_rayparam
Definition: TempoTrack.h:75
DFProcConfig m_RCFPParams
Definition: TempoTrack.h:105
int findMeter(double *ACF, int len, double period)
void createCombFilter(double *Filter, int winLength, int TSig, double beatLag)
void constDetect(double *periodP, int currentIdx, int *flag)
Framer m_DFFramer
Definition: TempoTrack.h:96
DFProcConfig m_DFPParams
Definition: TempoTrack.h:100
void deInitialise()
double * m_ACoeffs
Definition: TempoTrack.h:92
double * m_BCoeffs
Definition: TempoTrack.h:93
double * LPACoeffs
Definition: TempoTrack.h:43
double * LPBCoeffs
Definition: TempoTrack.h:44
int winLength
Definition: TempoTrack.h:39
int alpha
Definition: TempoTrack.h:41
WinThresh WinT
Definition: TempoTrack.h:45
int lagLength
Definition: TempoTrack.h:40
int LPOrd
Definition: TempoTrack.h:42
int post
Definition: TempoTrack.h:34