Revision 17:47e1917c88fc

View differences:

BeatTracker.cpp
1
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
2

  
3
/*
4
  Vamp feature extraction plugin for the BeatRoot beat tracker.
5

  
6
  Centre for Digital Music, Queen Mary, University of London.
7
  This file copyright 2011 Simon Dixon, Chris Cannam and QMUL.
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
#include "BeatTracker.h"
17

  
18
EventList BeatTracker::beatTrack(EventList events, EventList beats)
19
{
20
    AgentList agents;
21
    int count = 0;
22
    double beatTime = -1;
23
    if (!beats.empty()) {
24
	count = beats.size() - 1;
25
	EventList::iterator itr = beats.end();
26
	--itr;
27
	beatTime = itr->time;
28
    }
29
    if (count > 0) { // tempo given by mean of initial beats
30
	double ioi = (beatTime - beats.begin()->time) / count;
31
	agents.push_back(new Agent(ioi));
32
    } else // tempo not given; use tempo induction
33
	agents = Induction::beatInduction(events);
34
    if (!beats.empty())
35
	for (AgentList::iterator itr = agents.begin(); itr != agents.end();
36
	     ++itr) {
37
	    (*itr)->beatTime = beatTime;
38
	    (*itr)->beatCount = count;
39
	    (*itr)->events = beats;
40
	}
41
    agents.beatTrack(events, -1);
42
    Agent *best = agents.bestAgent();
43
    EventList results;
44
    if (best) {
45
	best->fillBeats(beatTime);
46
	results = best->events;
47
    }
48
    for (AgentList::iterator ai = agents.begin(); ai != agents.end(); ++ai) {
49
	delete *ai;
50
    }
51
    return results;
52
} // beatTrack()/1
53
	
54

  
beatroot-vamp.cat
1
vamp:beatroot-vamp:beatroot::Time > Tempo

Also available in: Unified diff