X-Git-Url: https://git.aubio.org/?p=vamp-aubio-plugins.git;a=blobdiff_plain;f=libmain.cpp;h=007d209de8a65255cdb72780193bf36d01039f6c;hp=b9159cd0c43a09c49d5e91ef941294dbdeb92d01;hb=340474448bee6047ee27d4d7b80bd9f1477bc810;hpb=fd20836e60d1956149b4377e955561486f1d3a1f diff --git a/libmain.cpp b/libmain.cpp index b9159cd..007d209 100644 --- a/libmain.cpp +++ b/libmain.cpp @@ -21,19 +21,60 @@ #include "plugins/Pitch.h" #include "plugins/Notes.h" #include "plugins/Tempo.h" +#include "plugins/Silence.h" + +template +class VersionedPluginAdapter : public Vamp::PluginAdapterBase +{ +public: + VersionedPluginAdapter(unsigned int v) : PluginAdapterBase(), m_v(v) { } + virtual ~VersionedPluginAdapter() { } + +protected: + Vamp::Plugin *createPlugin(float inputSampleRate) { + P *p = new P(inputSampleRate, m_v); + Vamp::Plugin *plugin = dynamic_cast(p); + return plugin; + } + unsigned int m_v; +}; static Vamp::PluginAdapter onsetAdapter; static Vamp::PluginAdapter pitchAdapter; -static Vamp::PluginAdapter notesAdapter; static Vamp::PluginAdapter tempoAdapter; -const VampPluginDescriptor *vampGetPluginDescriptor(unsigned int index) +// These two plugins both benefit from the Vamp v2 API if available +static VersionedPluginAdapter *notesAdapter = 0; +static VersionedPluginAdapter *silenceAdapter = 0; + +struct Tidy { + ~Tidy() { delete notesAdapter; delete silenceAdapter; } +}; +static Tidy tidy; + +const VampPluginDescriptor *vampGetPluginDescriptor(unsigned int vampApiVersion, + unsigned int index) +{ + if (vampApiVersion < 1) return 0; + switch (index) { case 0: return onsetAdapter.getDescriptor(); case 1: return pitchAdapter.getDescriptor(); - case 2: return notesAdapter.getDescriptor(); case 3: return tempoAdapter.getDescriptor(); + + case 2: + if (!notesAdapter) { + notesAdapter = new VersionedPluginAdapter(vampApiVersion); + } + return notesAdapter->getDescriptor(); + + case 4: + if (!silenceAdapter) { + silenceAdapter = new VersionedPluginAdapter(vampApiVersion); + } + return silenceAdapter->getDescriptor(); + default: return 0; } }