summaryrefslogtreecommitdiff
path: root/libs/vamp-sdk/vamp-hostsdk
diff options
context:
space:
mode:
Diffstat (limited to 'libs/vamp-sdk/vamp-hostsdk')
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/Plugin.h47
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/PluginBase.h47
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/PluginBufferingAdapter.h194
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/PluginChannelAdapter.h149
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/PluginHostAdapter.h123
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/PluginInputDomainAdapter.h136
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/PluginLoader.h243
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/PluginSummarisingAdapter.h197
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/PluginWrapper.h135
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/RealTime.h46
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/hostguard.h69
-rw-r--r--libs/vamp-sdk/vamp-hostsdk/vamp-hostsdk.h53
12 files changed, 1439 insertions, 0 deletions
diff --git a/libs/vamp-sdk/vamp-hostsdk/Plugin.h b/libs/vamp-sdk/vamp-hostsdk/Plugin.h
new file mode 100644
index 0000000000..72a3b640d5
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/Plugin.h
@@ -0,0 +1,47 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006 Chris Cannam.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_HOSTSDK_PLUGIN_H_
+#define _VAMP_HOSTSDK_PLUGIN_H_
+
+// Do not include vamp-sdk/Plugin.h directly from host code. Always
+// use this header instead.
+
+#include "hostguard.h"
+
+#include <vamp-sdk/Plugin.h>
+
+#endif
diff --git a/libs/vamp-sdk/vamp-hostsdk/PluginBase.h b/libs/vamp-sdk/vamp-hostsdk/PluginBase.h
new file mode 100644
index 0000000000..f12c25a715
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/PluginBase.h
@@ -0,0 +1,47 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006 Chris Cannam.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_HOSTSDK_PLUGIN_BASE_H_
+#define _VAMP_HOSTSDK_PLUGIN_BASE_H_
+
+// Do not include vamp-sdk/PluginBase.h directly from host code.
+// Always use this header instead.
+
+#include "hostguard.h"
+
+#include <vamp-sdk/PluginBase.h>
+
+#endif
diff --git a/libs/vamp-sdk/vamp-hostsdk/PluginBufferingAdapter.h b/libs/vamp-sdk/vamp-hostsdk/PluginBufferingAdapter.h
new file mode 100644
index 0000000000..21c2b36d74
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/PluginBufferingAdapter.h
@@ -0,0 +1,194 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006-2007 Chris Cannam and QMUL.
+ This file by Mark Levy and Chris Cannam, Copyright 2007-2008 QMUL.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_PLUGIN_BUFFERING_ADAPTER_H_
+#define _VAMP_PLUGIN_BUFFERING_ADAPTER_H_
+
+#include "hostguard.h"
+#include "PluginWrapper.h"
+
+_VAMP_SDK_HOSTSPACE_BEGIN(PluginBufferingAdapter.h)
+
+namespace Vamp {
+
+namespace HostExt {
+
+/**
+ * \class PluginBufferingAdapter PluginBufferingAdapter.h <vamp-hostsdk/PluginBufferingAdapter.h>
+ *
+ * PluginBufferingAdapter is a Vamp plugin adapter that allows plugins
+ * to be used by a host supplying an audio stream in non-overlapping
+ * buffers of arbitrary size.
+ *
+ * A host using PluginBufferingAdapter may ignore the preferred step
+ * and block size reported by the plugin, and still expect the plugin
+ * to run. The value of blockSize and stepSize passed to initialise
+ * should be the size of the buffer which the host will supply; the
+ * stepSize should be equal to the blockSize.
+ *
+ * If the internal step size used for the plugin differs from that
+ * supplied by the host, the adapter will modify the sample type and
+ * rate specifications for the plugin outputs appropriately, and set
+ * timestamps on the output features for outputs that formerly used a
+ * different sample rate specification. This is necessary in order to
+ * obtain correct time stamping.
+ *
+ * In other respects, the PluginBufferingAdapter behaves identically
+ * to the plugin that it wraps. The wrapped plugin will be deleted
+ * when the wrapper is deleted.
+ */
+
+class PluginBufferingAdapter : public PluginWrapper
+{
+public:
+ /**
+ * Construct a PluginBufferingAdapter wrapping the given plugin.
+ * The adapter takes ownership of the plugin, which will be
+ * deleted when the adapter is deleted.
+ */
+ PluginBufferingAdapter(Plugin *plugin);
+ virtual ~PluginBufferingAdapter();
+
+ /**
+ * Return the preferred step size for this adapter.
+ *
+ * Because of the way this adapter works, its preferred step size
+ * will always be the same as its preferred block size. This may
+ * or may not be the same as the preferred step size of the
+ * underlying plugin, which may be obtained by calling
+ * getPluginPreferredStepSize().
+ */
+ size_t getPreferredStepSize() const;
+
+ /**
+ * Return the preferred block size for this adapter.
+ *
+ * This may or may not be the same as the preferred block size of
+ * the underlying plugin, which may be obtained by calling
+ * getPluginPreferredBlockSize().
+ *
+ * Note that this adapter may be initialised with any block size,
+ * not just its supposedly preferred one.
+ */
+ size_t getPreferredBlockSize() const;
+
+ /**
+ * Initialise the adapter (and therefore the plugin) for the given
+ * number of channels. Initialise the adapter for the given step
+ * and block size, which must be equal.
+ *
+ * The step and block size used for the underlying plugin will
+ * depend on its preferences, or any values previously passed to
+ * setPluginStepSize and setPluginBlockSize.
+ */
+ bool initialise(size_t channels, size_t stepSize, size_t blockSize);
+
+ /**
+ * Return the preferred step size of the plugin wrapped by this
+ * adapter.
+ *
+ * This is included mainly for informational purposes. This value
+ * is not likely to be a valid step size for the adapter itself,
+ * and it is not usually of any use in interpreting the results
+ * (because the adapter re-writes OneSamplePerStep outputs to
+ * FixedSampleRate so that the hop size no longer needs to be
+ * known beforehand in order to interpret them).
+ */
+ size_t getPluginPreferredStepSize() const;
+
+ /**
+ * Return the preferred block size of the plugin wrapped by this
+ * adapter.
+ *
+ * This is included mainly for informational purposes.
+ */
+ size_t getPluginPreferredBlockSize() const;
+
+ /**
+ * Set the step size that will be used for the underlying plugin
+ * when initialise() is called. If this is not set, the plugin's
+ * own preferred step size will be used. You will not usually
+ * need to call this function. If you do call it, it must be
+ * before the first call to initialise().
+ */
+ void setPluginStepSize(size_t stepSize);
+
+ /**
+ * Set the block size that will be used for the underlying plugin
+ * when initialise() is called. If this is not set, the plugin's
+ * own preferred block size will be used. You will not usually
+ * need to call this function. If you do call it, it must be
+ * before the first call to initialise().
+ */
+ void setPluginBlockSize(size_t blockSize);
+
+ /**
+ * Return the step and block sizes that were actually used when
+ * initialising the underlying plugin.
+ *
+ * This is included mainly for informational purposes. You will
+ * not usually need to call this function. If this is called
+ * before initialise(), it will return 0 for both values. If it
+ * is called after a failed call to initialise(), it will return
+ * the values that were used in the failed call to the plugin's
+ * initialise() function.
+ */
+ void getActualStepAndBlockSizes(size_t &stepSize, size_t &blockSize);
+
+ void setParameter(std::string, float);
+ void selectProgram(std::string);
+
+ OutputList getOutputDescriptors() const;
+
+ void reset();
+
+ FeatureSet process(const float *const *inputBuffers, RealTime timestamp);
+
+ FeatureSet getRemainingFeatures();
+
+protected:
+ class Impl;
+ Impl *m_impl;
+};
+
+}
+
+}
+
+_VAMP_SDK_HOSTSPACE_END(PluginBufferingAdapter.h)
+
+#endif
diff --git a/libs/vamp-sdk/vamp-hostsdk/PluginChannelAdapter.h b/libs/vamp-sdk/vamp-hostsdk/PluginChannelAdapter.h
new file mode 100644
index 0000000000..28ee82ae7d
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/PluginChannelAdapter.h
@@ -0,0 +1,149 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006-2007 Chris Cannam and QMUL.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_PLUGIN_CHANNEL_ADAPTER_H_
+#define _VAMP_PLUGIN_CHANNEL_ADAPTER_H_
+
+#include "hostguard.h"
+#include "PluginWrapper.h"
+
+_VAMP_SDK_HOSTSPACE_BEGIN(PluginChannelAdapter.h)
+
+namespace Vamp {
+
+namespace HostExt {
+
+/**
+ * \class PluginChannelAdapter PluginChannelAdapter.h <vamp-hostsdk/PluginChannelAdapter.h>
+ *
+ * PluginChannelAdapter is a Vamp plugin adapter that implements a
+ * policy for management of plugins that expect a different number of
+ * input channels from the number actually available in the source
+ * audio data.
+ *
+ * A host using PluginChannelAdapter may ignore the getMinChannelCount
+ * and getMaxChannelCount reported by the plugin, and still expect the
+ * plugin to run.
+ *
+ * PluginChannelAdapter implements the following policy:
+ *
+ * - If the plugin supports the provided number of channels directly,
+ * PluginChannelAdapter will just run the plugin as normal.
+ *
+ * - If the plugin only supports exactly one channel but more than
+ * one channel is provided, PluginChannelAdapter will use the mean of
+ * the channels. This ensures that the resulting values remain
+ * within the same magnitude range as expected for mono data.
+ *
+ * - If the plugin requires more than one channel but exactly one is
+ * provided, the provided channel will be duplicated across all the
+ * plugin input channels.
+ *
+ * If none of the above apply:
+ *
+ * - If the plugin requires more channels than are provided, the
+ * minimum acceptable number of channels will be produced by adding
+ * empty (zero valued) channels to those provided.
+ *
+ * - If the plugin requires fewer channels than are provided, the
+ * maximum acceptable number of channels will be produced by
+ * discarding the excess channels.
+ *
+ * Hosts requiring a different channel policy from the above will need
+ * to implement it themselves, instead of using PluginChannelAdapter.
+ *
+ * Note that PluginChannelAdapter does not override the minimum and
+ * maximum channel counts returned by the wrapped plugin. The host
+ * will need to be aware that it is using a PluginChannelAdapter, and
+ * be prepared to ignore these counts as necessary. (This contrasts
+ * with the approach used in PluginInputDomainAdapter, which aims to
+ * make the host completely unaware of which underlying input domain
+ * is in fact in use.)
+ *
+ * (The rationale for this is that a host may wish to use the
+ * PluginChannelAdapter but still discriminate in some way on the
+ * basis of the number of channels actually supported. For example, a
+ * simple stereo audio host may prefer to reject plugins that require
+ * more than two channels on the grounds that doesn't actually
+ * understand what they are for, rather than allow the channel adapter
+ * to make a potentially meaningless channel conversion for them.)
+ *
+ * In every respect other than its management of channels, the
+ * PluginChannelAdapter behaves identically to the plugin that it
+ * wraps. The wrapped plugin will be deleted when the wrapper is
+ * deleted.
+ *
+ * \note This class was introduced in version 1.1 of the Vamp plugin SDK.
+ */
+
+class PluginChannelAdapter : public PluginWrapper
+{
+public:
+ /**
+ * Construct a PluginChannelAdapter wrapping the given plugin.
+ * The adapter takes ownership of the plugin, which will be
+ * deleted when the adapter is deleted.
+ */
+ PluginChannelAdapter(Plugin *plugin);
+ virtual ~PluginChannelAdapter();
+
+ bool initialise(size_t channels, size_t stepSize, size_t blockSize);
+
+ FeatureSet process(const float *const *inputBuffers, RealTime timestamp);
+
+ /**
+ * Call process(), providing interleaved audio data with the
+ * number of channels passed to initialise(). The adapter will
+ * de-interleave into temporary buffers as appropriate before
+ * calling process().
+ *
+ * \note This function was introduced in version 1.4 of the Vamp
+ * plugin SDK.
+ */
+ FeatureSet processInterleaved(const float *inputBuffer, RealTime timestamp);
+
+protected:
+ class Impl;
+ Impl *m_impl;
+};
+
+}
+
+}
+
+_VAMP_SDK_HOSTSPACE_END(PluginChannelAdapter.h)
+
+#endif
diff --git a/libs/vamp-sdk/vamp-hostsdk/PluginHostAdapter.h b/libs/vamp-sdk/vamp-hostsdk/PluginHostAdapter.h
new file mode 100644
index 0000000000..2ca1d69949
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/PluginHostAdapter.h
@@ -0,0 +1,123 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006 Chris Cannam.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_PLUGIN_HOST_ADAPTER_H_
+#define _VAMP_PLUGIN_HOST_ADAPTER_H_
+
+#include "hostguard.h"
+#include "Plugin.h"
+
+#include <vamp/vamp.h>
+
+#include <vector>
+
+_VAMP_SDK_HOSTSPACE_BEGIN(PluginHostAdapter.h)
+
+namespace Vamp {
+
+/**
+ * \class PluginHostAdapter PluginHostAdapter.h <vamp-hostsdk/PluginHostAdapter.h>
+ *
+ * PluginHostAdapter is a wrapper class that a Vamp host can use to
+ * make the C-language VampPluginDescriptor object appear as a C++
+ * Vamp::Plugin object.
+ *
+ * The Vamp API is defined in vamp/vamp.h as a C API. The C++ objects
+ * used for convenience by plugins and hosts actually communicate
+ * using the C low-level API, but the details of this communication
+ * are handled seamlessly by the Vamp SDK implementation provided the
+ * plugin and host use the proper C++ wrapper objects.
+ *
+ * See also PluginAdapter, the plugin-side wrapper that makes a C++
+ * plugin object available using the C query API.
+ */
+
+class PluginHostAdapter : public Plugin
+{
+public:
+ PluginHostAdapter(const VampPluginDescriptor *descriptor,
+ float inputSampleRate);
+ virtual ~PluginHostAdapter();
+
+ static std::vector<std::string> getPluginPath();
+
+ bool initialise(size_t channels, size_t stepSize, size_t blockSize);
+ void reset();
+
+ InputDomain getInputDomain() const;
+
+ unsigned int getVampApiVersion() const;
+ std::string getIdentifier() const;
+ std::string getName() const;
+ std::string getDescription() const;
+ std::string getMaker() const;
+ int getPluginVersion() const;
+ std::string getCopyright() const;
+
+ ParameterList getParameterDescriptors() const;
+ float getParameter(std::string) const;
+ void setParameter(std::string, float);
+
+ ProgramList getPrograms() const;
+ std::string getCurrentProgram() const;
+ void selectProgram(std::string);
+
+ size_t getPreferredStepSize() const;
+ size_t getPreferredBlockSize() const;
+
+ size_t getMinChannelCount() const;
+ size_t getMaxChannelCount() const;
+
+ OutputList getOutputDescriptors() const;
+
+ FeatureSet process(const float *const *inputBuffers, RealTime timestamp);
+
+ FeatureSet getRemainingFeatures();
+
+protected:
+ void convertFeatures(VampFeatureList *, FeatureSet &);
+
+ const VampPluginDescriptor *m_descriptor;
+ VampPluginHandle m_handle;
+};
+
+}
+
+_VAMP_SDK_HOSTSPACE_END(PluginHostAdapter.h)
+
+#endif
+
+
diff --git a/libs/vamp-sdk/vamp-hostsdk/PluginInputDomainAdapter.h b/libs/vamp-sdk/vamp-hostsdk/PluginInputDomainAdapter.h
new file mode 100644
index 0000000000..7f7c11c3be
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/PluginInputDomainAdapter.h
@@ -0,0 +1,136 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006-2007 Chris Cannam and QMUL.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_PLUGIN_INPUT_DOMAIN_ADAPTER_H_
+#define _VAMP_PLUGIN_INPUT_DOMAIN_ADAPTER_H_
+
+#include "hostguard.h"
+#include "PluginWrapper.h"
+
+_VAMP_SDK_HOSTSPACE_BEGIN(PluginInputDomainAdapter.h)
+
+namespace Vamp {
+
+namespace HostExt {
+
+/**
+ * \class PluginInputDomainAdapter PluginInputDomainAdapter.h <vamp-hostsdk/PluginInputDomainAdapter.h>
+ *
+ * PluginInputDomainAdapter is a Vamp plugin adapter that converts
+ * time-domain input into frequency-domain input for plugins that need
+ * it. This permits a host to use time- and frequency-domain plugins
+ * interchangeably without needing to handle the conversion itself.
+ *
+ * This adapter uses a basic Hanning windowed FFT that supports
+ * power-of-two block sizes only. If a frequency domain plugin
+ * requests a non-power-of-two blocksize, the adapter will adjust it
+ * to a nearby power of two instead. Thus, getPreferredBlockSize()
+ * will always return a power of two if the wrapped plugin is a
+ * frequency domain one. If the plugin doesn't accept the adjusted
+ * power of two block size, initialise() will fail.
+ *
+ * The adapter provides no way for the host to discover whether the
+ * underlying plugin is actually a time or frequency domain plugin
+ * (except that if the preferred block size is not a power of two, it
+ * must be a time domain plugin).
+ *
+ * The FFT implementation is simple and self-contained, but unlikely
+ * to be the fastest available: a host can usually do better if it
+ * cares enough.
+ *
+ * In every respect other than its input domain handling, the
+ * PluginInputDomainAdapter behaves identically to the plugin that it
+ * wraps. The wrapped plugin will be deleted when the wrapper is
+ * deleted.
+ *
+ * \note This class was introduced in version 1.1 of the Vamp plugin SDK.
+ */
+
+class PluginInputDomainAdapter : public PluginWrapper
+{
+public:
+ /**
+ * Construct a PluginInputDomainAdapter wrapping the given plugin.
+ * The adapter takes ownership of the plugin, which will be
+ * deleted when the adapter is deleted.
+ */
+ PluginInputDomainAdapter(Plugin *plugin);
+ virtual ~PluginInputDomainAdapter();
+
+ bool initialise(size_t channels, size_t stepSize, size_t blockSize);
+
+ InputDomain getInputDomain() const;
+
+ size_t getPreferredStepSize() const;
+ size_t getPreferredBlockSize() const;
+
+ FeatureSet process(const float *const *inputBuffers, RealTime timestamp);
+
+ /**
+ * Return the amount by which the timestamps supplied to process()
+ * are being incremented when they are passed to the plugin's own
+ * process() implementation.
+ *
+ * The Vamp API mandates that the timestamp passed to the plugin
+ * for time-domain input should be the time of the first sample in
+ * the block, but the timestamp passed for frequency-domain input
+ * should be the timestamp of the centre of the block.
+ *
+ * The PluginInputDomainAdapter adjusts its timestamps properly so
+ * that the plugin receives correct times, but in some
+ * circumstances (such as for establishing the correct timing of
+ * implicitly-timed features, i.e. features without their own
+ * timestamps) the host may need to be aware that this adjustment
+ * is taking place.
+ *
+ * If the plugin requires time-domain input, this function will
+ * return zero. The result of calling this function before
+ * initialise() has been called is undefined.
+ */
+ RealTime getTimestampAdjustment() const;
+
+protected:
+ class Impl;
+ Impl *m_impl;
+};
+
+}
+
+}
+
+_VAMP_SDK_HOSTSPACE_END(PluginInputDomainAdapter.h)
+
+#endif
diff --git a/libs/vamp-sdk/vamp-hostsdk/PluginLoader.h b/libs/vamp-sdk/vamp-hostsdk/PluginLoader.h
new file mode 100644
index 0000000000..4d1daffd25
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/PluginLoader.h
@@ -0,0 +1,243 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006-2007 Chris Cannam and QMUL.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_PLUGIN_LOADER_H_
+#define _VAMP_PLUGIN_LOADER_H_
+
+#include <vector>
+#include <string>
+#include <map>
+
+#include "hostguard.h"
+#include "PluginWrapper.h"
+
+_VAMP_SDK_HOSTSPACE_BEGIN(PluginLoader.h)
+
+namespace Vamp {
+
+class Plugin;
+
+namespace HostExt {
+
+/**
+ * \class PluginLoader PluginLoader.h <vamp-hostsdk/PluginLoader.h>
+ *
+ * Vamp::HostExt::PluginLoader is a convenience class for discovering
+ * and loading Vamp plugins using the typical plugin-path, library
+ * naming, and categorisation conventions described in the Vamp SDK
+ * documentation. This class is intended to greatly simplify the task
+ * of becoming a Vamp plugin host for any C++ application.
+ *
+ * Hosts are not required by the Vamp specification to use the same
+ * plugin search path and naming conventions as implemented by this
+ * class, and are certainly not required to use this actual class.
+ * But we do strongly recommend it.
+ *
+ * \note This class was introduced in version 1.1 of the Vamp plugin SDK.
+ */
+
+class PluginLoader
+{
+public:
+ /**
+ * Obtain a pointer to the singleton instance of PluginLoader.
+ * Use this to obtain your loader object.
+ */
+ static PluginLoader *getInstance();
+
+ /**
+ * PluginKey is a string type that is used to identify a plugin
+ * uniquely within the scope of "the current system". It consists
+ * of the lower-cased base name of the plugin library, a colon
+ * separator, and the identifier string for the plugin. It is
+ * only meaningful in the context of a given plugin path (the one
+ * returned by PluginHostAdapter::getPluginPath()).
+ *
+ * Use composePluginKey() to construct a plugin key from a known
+ * plugin library name and identifier.
+ *
+ * Note: the fact that the library component of the key is
+ * lower-cased implies that library names are matched
+ * case-insensitively by the PluginLoader class, regardless of the
+ * case sensitivity of the underlying filesystem. (Plugin
+ * identifiers _are_ case sensitive, however.) Also, it is not
+ * possible to portably extract a working library name from a
+ * plugin key, as the result may fail on case-sensitive
+ * filesystems. Use getLibraryPathForPlugin() instead.
+ */
+ typedef std::string PluginKey;
+
+ /**
+ * PluginKeyList is a sequence of plugin keys, such as returned by
+ * listPlugins().
+ */
+ typedef std::vector<PluginKey> PluginKeyList;
+
+ /**
+ * PluginCategoryHierarchy is a sequence of general->specific
+ * category names, as may be associated with a single plugin.
+ * This sequence describes the location of a plugin within a
+ * category forest, containing the human-readable names of the
+ * plugin's category tree root, followed by each of the nodes down
+ * to the leaf containing the plugin.
+ *
+ * \see getPluginCategory()
+ */
+ typedef std::vector<std::string> PluginCategoryHierarchy;
+
+ /**
+ * Search for all available Vamp plugins, and return a list of
+ * them in the order in which they were found.
+ */
+ PluginKeyList listPlugins();
+
+ /**
+ * AdapterFlags contains a set of values that may be OR'd together
+ * to indicate in which circumstances PluginLoader should use a
+ * plugin adapter to make a plugin easier to use for a host that
+ * does not want to cater for complex features.
+ *
+ * The available flags are:
+ *
+ * ADAPT_INPUT_DOMAIN - If the plugin expects frequency domain
+ * input, wrap it in a PluginInputDomainAdapter that automatically
+ * converts the plugin to one that expects time-domain input.
+ * This enables a host to accommodate time- and frequency-domain
+ * plugins without needing to do any conversion itself.
+ *
+ * ADAPT_CHANNEL_COUNT - Wrap the plugin in a PluginChannelAdapter
+ * to handle any mismatch between the number of channels of audio
+ * the plugin can handle and the number available in the host.
+ * This enables a host to use plugins that may require the input
+ * to be mixed down to mono, etc., without having to worry about
+ * doing that itself.
+ *
+ * ADAPT_BUFFER_SIZE - Wrap the plugin in a PluginBufferingAdapter
+ * permitting the host to provide audio input using any block
+ * size, with no overlap, regardless of the plugin's preferred
+ * block size (suitable for hosts that read from non-seekable
+ * streaming media, for example). This adapter introduces some
+ * run-time overhead and also changes the semantics of the plugin
+ * slightly (see the PluginBufferingAdapter header documentation
+ * for details).
+ *
+ * ADAPT_ALL_SAFE - Perform all available adaptations that are
+ * meaningful for the plugin and "safe". Currently this means to
+ * ADAPT_INPUT_DOMAIN if the plugin wants FrequencyDomain input;
+ * ADAPT_CHANNEL_COUNT always; and ADAPT_BUFFER_SIZE never.
+ *
+ * ADAPT_ALL - Perform all available adaptations that are
+ * meaningful for the plugin.
+ *
+ * See PluginInputDomainAdapter, PluginChannelAdapter and
+ * PluginBufferingAdapter for more details of the classes that the
+ * loader may use if these flags are set.
+ */
+ enum AdapterFlags {
+
+ ADAPT_INPUT_DOMAIN = 0x01,
+ ADAPT_CHANNEL_COUNT = 0x02,
+ ADAPT_BUFFER_SIZE = 0x04,
+
+ ADAPT_ALL_SAFE = 0x03,
+
+ ADAPT_ALL = 0xff
+ };
+
+ /**
+ * Load a Vamp plugin, given its identifying key. If the plugin
+ * could not be loaded, returns 0.
+ *
+ * The returned plugin should be deleted (using the standard C++
+ * delete keyword) after use.
+ *
+ * \param adapterFlags a bitwise OR of the values in the AdapterFlags
+ * enumeration, indicating under which circumstances an adapter should be
+ * used to wrap the original plugin. If adapterFlags is 0, no
+ * optional adapters will be used. Otherwise, the returned plugin
+ * may be of an adapter class type which will behave identically
+ * to the original plugin, apart from any particular features
+ * implemented by the adapter itself.
+ *
+ * \see AdapterFlags, PluginInputDomainAdapter, PluginChannelAdapter
+ */
+ Plugin *loadPlugin(PluginKey key,
+ float inputSampleRate,
+ int adapterFlags = 0);
+
+ /**
+ * Given a Vamp plugin library name and plugin identifier, return
+ * the corresponding plugin key in a form suitable for passing in to
+ * loadPlugin().
+ */
+ PluginKey composePluginKey(std::string libraryName,
+ std::string identifier);
+
+ /**
+ * Return the category hierarchy for a Vamp plugin, given its
+ * identifying key.
+ *
+ * If the plugin has no category information, return an empty
+ * hierarchy.
+ *
+ * \see PluginCategoryHierarchy
+ */
+ PluginCategoryHierarchy getPluginCategory(PluginKey plugin);
+
+ /**
+ * Return the file path of the dynamic library from which the
+ * given plugin will be loaded (if available).
+ */
+ std::string getLibraryPathForPlugin(PluginKey plugin);
+
+protected:
+ PluginLoader();
+ virtual ~PluginLoader();
+
+ class Impl;
+ Impl *m_impl;
+
+ static PluginLoader *m_instance;
+};
+
+}
+
+}
+
+_VAMP_SDK_HOSTSPACE_END(PluginLoader.h)
+
+#endif
+
diff --git a/libs/vamp-sdk/vamp-hostsdk/PluginSummarisingAdapter.h b/libs/vamp-sdk/vamp-hostsdk/PluginSummarisingAdapter.h
new file mode 100644
index 0000000000..e9c14f5d2b
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/PluginSummarisingAdapter.h
@@ -0,0 +1,197 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006-2008 Chris Cannam and QMUL.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_PLUGIN_SUMMARISING_ADAPTER_H_
+#define _VAMP_PLUGIN_SUMMARISING_ADAPTER_H_
+
+#include "hostguard.h"
+#include "PluginWrapper.h"
+
+#include <set>
+
+_VAMP_SDK_HOSTSPACE_BEGIN(PluginSummarisingAdapter.h)
+
+namespace Vamp {
+
+namespace HostExt {
+
+/**
+ * \class PluginSummarisingAdapter PluginSummarisingAdapter.h <vamp-hostsdk/PluginSummarisingAdapter.h>
+ *
+ * PluginSummarisingAdapter is a Vamp plugin adapter that provides
+ * summarisation methods such as mean and median averages of output
+ * features, for use in any context where an available plugin produces
+ * individual values but the result that is actually needed is some
+ * sort of aggregate.
+ *
+ * To make use of PluginSummarisingAdapter, the host should configure,
+ * initialise and run the plugin through the adapter interface just as
+ * normal. Then, after the process and getRemainingFeatures methods
+ * have been properly called and processing is complete, the host may
+ * call getSummaryForOutput or getSummaryForAllOutputs to obtain
+ * summarised features: averages, maximum values, etc, depending on
+ * the SummaryType passed to the function.
+ *
+ * By default PluginSummarisingAdapter calculates a single summary of
+ * each output's feature across the whole duration of processed audio.
+ * A host needing summaries of sub-segments of the whole audio may
+ * call setSummarySegmentBoundaries before retrieving the summaries,
+ * providing a list of times such that one summary will be provided
+ * for each segment between two consecutive times.
+ *
+ * PluginSummarisingAdapter is straightforward rather than fast. It
+ * calculates all of the summary types for all outputs always, and
+ * then returns only the ones that are requested. It is designed on
+ * the basis that, for most features, summarising and storing
+ * summarised results is far cheaper than calculating the results in
+ * the first place. If this is not true for your particular feature,
+ * PluginSummarisingAdapter may not be the best approach for you.
+ *
+ * \note This class was introduced in version 2.0 of the Vamp plugin SDK.
+ */
+
+class PluginSummarisingAdapter : public PluginWrapper
+{
+public:
+ /**
+ * Construct a PluginSummarisingAdapter wrapping the given plugin.
+ * The adapter takes ownership of the plugin, which will be
+ * deleted when the adapter is deleted.
+ */
+ PluginSummarisingAdapter(Plugin *plugin);
+ virtual ~PluginSummarisingAdapter();
+
+ bool initialise(size_t channels, size_t stepSize, size_t blockSize);
+
+ void reset();
+
+ FeatureSet process(const float *const *inputBuffers, RealTime timestamp);
+ FeatureSet getRemainingFeatures();
+
+ typedef std::set<RealTime> SegmentBoundaries;
+
+ /**
+ * Specify a series of segment boundaries, such that one summary
+ * will be returned for each of the contiguous intra-boundary
+ * segments. This function must be called before
+ * getSummaryForOutput or getSummaryForAllOutputs.
+ *
+ * Note that you cannot retrieve results with multiple different
+ * segmentations by repeatedly calling this function followed by
+ * one of the getSummary functions. The summaries are all
+ * calculated at the first call to any getSummary function, and
+ * once the summaries have been calculated, they remain
+ * calculated.
+ */
+ void setSummarySegmentBoundaries(const SegmentBoundaries &);
+
+ enum SummaryType {
+ Minimum = 0,
+ Maximum = 1,
+ Mean = 2,
+ Median = 3,
+ Mode = 4,
+ Sum = 5,
+ Variance = 6,
+ StandardDeviation = 7,
+ Count = 8,
+
+ UnknownSummaryType = 999
+ };
+
+ /**
+ * AveragingMethod indicates how the adapter should handle
+ * average-based summaries of features whose results are not
+ * equally spaced in time.
+ *
+ * If SampleAverage is specified, summary types based on averages
+ * will be calculated by treating each result individually without
+ * regard to its time: for example, the mean will be the sum of
+ * all values divided by the number of values.
+ *
+ * If ContinuousTimeAverage is specified, each feature will be
+ * considered to have a duration, either as specified in the
+ * feature's duration field, or until the following feature: thus,
+ * for example, the mean will be the sum of the products of values
+ * and durations, divided by the total duration.
+ *
+ * Although SampleAverage is useful for many types of feature,
+ * ContinuousTimeAverage is essential for some situations, for
+ * example finding the result that spans the largest proportion of
+ * the input given a feature that emits a new result only when the
+ * value changes (the modal value integrated over time).
+ */
+ enum AveragingMethod {
+ SampleAverage = 0,
+ ContinuousTimeAverage = 1,
+ };
+
+ /**
+ * Return summaries of the features that were returned on the
+ * given output, using the given SummaryType and AveragingMethod.
+ *
+ * The plugin must have been fully run (process() and
+ * getRemainingFeatures() calls all made as appropriate) before
+ * this function is called.
+ */
+ FeatureList getSummaryForOutput(int output,
+ SummaryType type,
+ AveragingMethod method = SampleAverage);
+
+ /**
+ * Return summaries of the features that were returned on all of
+ * the plugin's outputs, using the given SummaryType and
+ * AveragingMethod.
+ *
+ * The plugin must have been fully run (process() and
+ * getRemainingFeatures() calls all made as appropriate) before
+ * this function is called.
+ */
+ FeatureSet getSummaryForAllOutputs(SummaryType type,
+ AveragingMethod method = SampleAverage);
+
+protected:
+ class Impl;
+ Impl *m_impl;
+};
+
+}
+
+}
+
+_VAMP_SDK_HOSTSPACE_END(PluginSummarisingAdapter.h)
+
+#endif
diff --git a/libs/vamp-sdk/vamp-hostsdk/PluginWrapper.h b/libs/vamp-sdk/vamp-hostsdk/PluginWrapper.h
new file mode 100644
index 0000000000..357050d2be
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/PluginWrapper.h
@@ -0,0 +1,135 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006-2007 Chris Cannam and QMUL.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_PLUGIN_WRAPPER_H_
+#define _VAMP_PLUGIN_WRAPPER_H_
+
+#include "hostguard.h"
+#include <vamp-hostsdk/Plugin.h>
+
+_VAMP_SDK_HOSTSPACE_BEGIN(PluginWrapper.h)
+
+namespace Vamp {
+
+namespace HostExt {
+
+/**
+ * \class PluginWrapper PluginWrapper.h <vamp-hostsdk/PluginWrapper.h>
+ *
+ * PluginWrapper is a simple base class for adapter plugins. It takes
+ * a pointer to a "to be wrapped" Vamp plugin on construction, and
+ * provides implementations of all the Vamp plugin methods that simply
+ * delegate through to the wrapped plugin. A subclass can therefore
+ * override only the methods that are meaningful for the particular
+ * adapter.
+ *
+ * \note This class was introduced in version 1.1 of the Vamp plugin SDK.
+ */
+
+class PluginWrapper : public Plugin
+{
+public:
+ virtual ~PluginWrapper();
+
+ bool initialise(size_t channels, size_t stepSize, size_t blockSize);
+ void reset();
+
+ InputDomain getInputDomain() const;
+
+ unsigned int getVampApiVersion() const;
+ std::string getIdentifier() const;
+ std::string getName() const;
+ std::string getDescription() const;
+ std::string getMaker() const;
+ int getPluginVersion() const;
+ std::string getCopyright() const;
+
+ ParameterList getParameterDescriptors() const;
+ float getParameter(std::string) const;
+ void setParameter(std::string, float);
+
+ ProgramList getPrograms() const;
+ std::string getCurrentProgram() const;
+ void selectProgram(std::string);
+
+ size_t getPreferredStepSize() const;
+ size_t getPreferredBlockSize() const;
+
+ size_t getMinChannelCount() const;
+ size_t getMaxChannelCount() const;
+
+ OutputList getOutputDescriptors() const;
+
+ FeatureSet process(const float *const *inputBuffers, RealTime timestamp);
+
+ FeatureSet getRemainingFeatures();
+
+ /**
+ * Return a pointer to the plugin wrapper of type WrapperType
+ * surrounding this wrapper's plugin, if present.
+ *
+ * This is useful in situations where a plugin is wrapped by
+ * multiple different wrappers (one inside another) and the host
+ * wants to call some wrapper-specific function on one of the
+ * layers without having to care about the order in which they are
+ * wrapped. For example, the plugin returned by
+ * PluginLoader::loadPlugin may have more than one wrapper; if the
+ * host wanted to query or fine-tune some property of one of them,
+ * it would be hard to do so without knowing the order of the
+ * wrappers. This function therefore gives direct access to the
+ * wrapper of a particular type.
+ */
+ template <typename WrapperType>
+ WrapperType *getWrapper() {
+ WrapperType *w = dynamic_cast<WrapperType *>(this);
+ if (w) return w;
+ PluginWrapper *pw = dynamic_cast<PluginWrapper *>(m_plugin);
+ if (pw) return pw->getWrapper<WrapperType>();
+ return 0;
+ }
+
+protected:
+ PluginWrapper(Plugin *plugin); // I take ownership of plugin
+ Plugin *m_plugin;
+};
+
+}
+
+}
+
+_VAMP_SDK_HOSTSPACE_END(PluginWrapper.h)
+
+#endif
diff --git a/libs/vamp-sdk/vamp-hostsdk/RealTime.h b/libs/vamp-sdk/vamp-hostsdk/RealTime.h
new file mode 100644
index 0000000000..d789b6a1ac
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/RealTime.h
@@ -0,0 +1,46 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006 Chris Cannam.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_HOSTSDK_REALTIME_H_
+#define _VAMP_HOSTSDK_REALTIME_H_
+
+// Do not include vamp-sdk/RealTime.h directly from host code. Always
+// use this header instead.
+
+#include "hostguard.h"
+#include <vamp-sdk/RealTime.h>
+
+#endif
diff --git a/libs/vamp-sdk/vamp-hostsdk/hostguard.h b/libs/vamp-sdk/vamp-hostsdk/hostguard.h
new file mode 100644
index 0000000000..3698d84cd7
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/hostguard.h
@@ -0,0 +1,69 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006 Chris Cannam.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_HOSTSDK_HOSTGUARD_H_
+#define _VAMP_HOSTSDK_HOSTGUARD_H_
+
+#ifdef _VAMP_IN_PLUGINSDK
+#error You have included headers from both vamp-sdk and vamp-hostsdk in the same source file. Please include only vamp-sdk headers in plugin code, and only vamp-hostsdk headers in host code.
+#else
+
+#define _VAMP_IN_HOSTSDK
+
+#ifdef _VAMP_NO_HOST_NAMESPACE
+#define _VAMP_SDK_HOSTSPACE_BEGIN(h)
+#define _VAMP_SDK_HOSTSPACE_END(h)
+#define _VAMP_SDK_PLUGSPACE_BEGIN(h)
+#define _VAMP_SDK_PLUGSPACE_END(h)
+#else
+#define _VAMP_SDK_HOSTSPACE_BEGIN(h) \
+ namespace _VampHost {
+
+#define _VAMP_SDK_HOSTSPACE_END(h) \
+ } \
+ using namespace _VampHost;
+#define _VAMP_SDK_PLUGSPACE_BEGIN(h) \
+ namespace _VampHost {
+
+#define _VAMP_SDK_PLUGSPACE_END(h) \
+ } \
+ using namespace _VampHost;
+#endif
+
+#endif
+
+#endif
+
diff --git a/libs/vamp-sdk/vamp-hostsdk/vamp-hostsdk.h b/libs/vamp-sdk/vamp-hostsdk/vamp-hostsdk.h
new file mode 100644
index 0000000000..f32583d549
--- /dev/null
+++ b/libs/vamp-sdk/vamp-hostsdk/vamp-hostsdk.h
@@ -0,0 +1,53 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
+
+/*
+ Vamp
+
+ An API for audio analysis and feature extraction plugins.
+
+ Centre for Digital Music, Queen Mary, University of London.
+ Copyright 2006 Chris Cannam.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the names of the Centre for
+ Digital Music; Queen Mary, University of London; and Chris Cannam
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization.
+*/
+
+#ifndef _VAMP_HOSTSDK_SINGLE_INCLUDE_H_
+#define _VAMP_HOSTSDK_SINGLE_INCLUDE_H_
+
+#include "PluginBase.h"
+#include "PluginBufferingAdapter.h"
+#include "PluginChannelAdapter.h"
+#include "Plugin.h"
+#include "PluginHostAdapter.h"
+#include "PluginInputDomainAdapter.h"
+#include "PluginLoader.h"
+#include "PluginSummarisingAdapter.h"
+#include "PluginWrapper.h"
+#include "RealTime.h"
+
+#endif
+
+