1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
4 Vamp feature extraction plugins using Paul Brossier's Aubio library.
6 Centre for Digital Music, Queen Mary, University of London.
7 This file copyright 2006 Chris Cannam.
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.
17 #include <vamp/vamp.h>
18 #include <vamp-sdk/PluginAdapter.h>
20 #include "plugins/Onset.h"
21 #include "plugins/Pitch.h"
22 #include "plugins/Notes.h"
23 #include "plugins/Tempo.h"
24 #include "plugins/Silence.h"
27 class VersionedPluginAdapter : public Vamp::PluginAdapterBase
30 VersionedPluginAdapter(unsigned int v) : PluginAdapterBase(), m_v(v) { }
31 virtual ~VersionedPluginAdapter() { }
34 Vamp::Plugin *createPlugin(float inputSampleRate) {
35 P *p = new P(inputSampleRate, m_v);
36 Vamp::Plugin *plugin = dynamic_cast<Vamp::Plugin *>(p);
42 static Vamp::PluginAdapter<Onset> onsetAdapter;
43 static Vamp::PluginAdapter<Pitch> pitchAdapter;
44 static Vamp::PluginAdapter<Tempo> tempoAdapter;
46 // These two plugins both benefit from the Vamp v2 API if available
47 static VersionedPluginAdapter<Notes> *notesAdapter = 0;
48 static VersionedPluginAdapter<Silence> *silenceAdapter = 0;
52 ~Tidy() { delete notesAdapter; delete silenceAdapter; }
56 const VampPluginDescriptor *vampGetPluginDescriptor(unsigned int vampApiVersion,
59 if (vampApiVersion < 1) return 0;
62 case 0: return onsetAdapter.getDescriptor();
63 case 1: return pitchAdapter.getDescriptor();
64 case 3: return tempoAdapter.getDescriptor();
68 notesAdapter = new VersionedPluginAdapter<Notes>(vampApiVersion);
70 return notesAdapter->getDescriptor();
73 if (!silenceAdapter) {
74 silenceAdapter = new VersionedPluginAdapter<Silence>(vampApiVersion);
76 return silenceAdapter->getDescriptor();