Mercurial > hg > sv-dependency-builds
changeset 123:0cef3a1bd1ae
Remove Vamp SDK from dependency builds for Windows, as for OSX
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Fri, 18 Mar 2016 14:26:06 +0000 |
parents | 62723f530572 |
children | e3d5853d5918 |
files | win32-mingw/include/vamp-hostsdk/Plugin.h win32-mingw/include/vamp-hostsdk/PluginBase.h win32-mingw/include/vamp-hostsdk/PluginBufferingAdapter.h win32-mingw/include/vamp-hostsdk/PluginChannelAdapter.h win32-mingw/include/vamp-hostsdk/PluginHostAdapter.h win32-mingw/include/vamp-hostsdk/PluginInputDomainAdapter.h win32-mingw/include/vamp-hostsdk/PluginLoader.h win32-mingw/include/vamp-hostsdk/PluginSummarisingAdapter.h win32-mingw/include/vamp-hostsdk/PluginWrapper.h win32-mingw/include/vamp-hostsdk/RealTime.h win32-mingw/include/vamp-hostsdk/hostguard.h win32-mingw/include/vamp-hostsdk/vamp-hostsdk.h win32-mingw/include/vamp-sdk/FFT.h win32-mingw/include/vamp-sdk/Plugin.h win32-mingw/include/vamp-sdk/PluginAdapter.h win32-mingw/include/vamp-sdk/PluginBase.h win32-mingw/include/vamp-sdk/RealTime.h win32-mingw/include/vamp-sdk/plugguard.h win32-mingw/include/vamp-sdk/vamp-sdk.h win32-mingw/include/vamp/vamp.h win32-mingw/lib/libvamp-hostsdk.a win32-mingw/lib/libvamp-sdk.a |
diffstat | 22 files changed, 0 insertions(+), 3170 deletions(-) [+] |
line wrap: on
line diff
--- a/win32-mingw/include/vamp-hostsdk/Plugin.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -*- 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
--- a/win32-mingw/include/vamp-hostsdk/PluginBase.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -*- 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
--- a/win32-mingw/include/vamp-hostsdk/PluginBufferingAdapter.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,194 +0,0 @@ -/* -*- 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-2009 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
--- a/win32-mingw/include/vamp-hostsdk/PluginChannelAdapter.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,149 +0,0 @@ -/* -*- 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-2009 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
--- a/win32-mingw/include/vamp-hostsdk/PluginHostAdapter.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* -*- 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 - -
--- a/win32-mingw/include/vamp-hostsdk/PluginInputDomainAdapter.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,236 +0,0 @@ -/* -*- 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-2009 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 windowed FFT (using Hann window by - * default) 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. - * - * The window shape for the FFT frame can be set using setWindowType - * and the current shape retrieved using getWindowType. (This was - * added in v2.3 of the SDK.) - * - * 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); - void reset(); - - InputDomain getInputDomain() const; - - size_t getPreferredStepSize() const; - size_t getPreferredBlockSize() const; - - FeatureSet process(const float *const *inputBuffers, RealTime timestamp); - - /** - * ProcessTimestampMethod determines how the - * PluginInputDomainAdapter handles timestamps for the data passed - * to the process() function of the plugin it wraps, in the case - * where the plugin is expecting frequency-domain data. - * - * The Vamp specification requires that the timestamp passed to - * the plugin for frequency-domain input should be that of the - * centre of the processing block, rather than the start as is the - * case for time-domain input. - * - * Since PluginInputDomainAdapter aims to be transparent in use, - * it needs to handle this timestamp adjustment itself. However, - * some control is available over the method used for adjustment, - * by means of the ProcessTimestampMethod setting. - * - * If ProcessTimestampMethod is set to ShiftTimestamp (the - * default), then the data passed to the wrapped plugin will be - * calculated from the same input data block as passed to the - * wrapper, but the timestamp passed to the plugin will be - * advanced by half of the window size. - * - * If ProcessTimestampMethod is set to ShiftData, then the - * timestamp passed to the wrapped plugin will be the same as that - * passed to the process call of the wrapper, but the data block - * used to calculate the input will be shifted back (earlier) by - * half of the window size, with half a block of zero padding at - * the start of the first process call. This has the advantage of - * preserving the first half block of audio without any - * deterioration from window shaping. - * - * If ProcessTimestampMethod is set to NoShift, then no adjustment - * will be made and the timestamps will be incorrect. - */ - enum ProcessTimestampMethod { - ShiftTimestamp, - ShiftData, - NoShift - }; - - /** - * Set the method used for timestamp adjustment in plugins taking - * frequency-domain input. See the ProcessTimestampMethod - * documentation for details. - * - * This function must be called before the first call to - * process(). - */ - void setProcessTimestampMethod(ProcessTimestampMethod); - - /** - * Retrieve the method used for timestamp adjustment in plugins - * taking frequency-domain input. See the ProcessTimestampMethod - * documentation for details. - */ - ProcessTimestampMethod getProcessTimestampMethod() const; - - /** - * 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 or the - * PluginInputDomainAdapter is configured with its - * ProcessTimestampMethod set to ShiftData instead of - * ShiftTimestamp, then this function will return zero. - * - * The result of calling this function before initialise() has - * been called is undefined. - */ - RealTime getTimestampAdjustment() const; - - /** - * The set of supported window shapes. - */ - enum WindowType { - - RectangularWindow = 0, - - BartlettWindow = 1, /// synonym for RectangularWindow - TriangularWindow = 1, /// synonym for BartlettWindow - - HammingWindow = 2, - - HanningWindow = 3, /// synonym for HannWindow - HannWindow = 3, /// synonym for HanningWindow - - BlackmanWindow = 4, - - NuttallWindow = 7, - - BlackmanHarrisWindow = 8 - }; - - /** - * Return the current window shape. The default is HanningWindow. - */ - WindowType getWindowType() const; - - /** - * Set the current window shape. - */ - void setWindowType(WindowType type); - - -protected: - class Impl; - Impl *m_impl; -}; - -} - -} - -_VAMP_SDK_HOSTSPACE_END(PluginInputDomainAdapter.h) - -#endif
--- a/win32-mingw/include/vamp-hostsdk/PluginLoader.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,243 +0,0 @@ -/* -*- 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-2009 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 -
--- a/win32-mingw/include/vamp-hostsdk/PluginSummarisingAdapter.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,197 +0,0 @@ -/* -*- 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-2009 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
--- a/win32-mingw/include/vamp-hostsdk/PluginWrapper.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -/* -*- 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-2009 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
--- a/win32-mingw/include/vamp-hostsdk/RealTime.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -*- 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
--- a/win32-mingw/include/vamp-hostsdk/hostguard.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* -*- 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 - -#define VAMP_SDK_VERSION "2.5" -#define VAMP_SDK_MAJOR_VERSION 2 -#define VAMP_SDK_MINOR_VERSION 5 - -#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 -
--- a/win32-mingw/include/vamp-hostsdk/vamp-hostsdk.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -*- 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 - -
--- a/win32-mingw/include/vamp-sdk/FFT.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -/* -*- 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-2012 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_FFT_H_ -#define _VAMP_FFT_H_ - -#include "plugguard.h" -_VAMP_SDK_PLUGSPACE_BEGIN(FFT.h) - -namespace Vamp { - -/** - * A simple FFT implementation provided for convenience of plugin - * authors. - * - * This class provides double-precision FFTs in power-of-two sizes - * only. It is slower than more sophisticated library - * implementations. If these requirements aren't suitable, make other - * arrangements. - * - * The inverse transform is scaled by 1/n. - * - * The implementation is from Don Cross's public domain FFT code. - */ -class FFT -{ -public: - /** - * Calculate a forward transform of size n. - * - * ri and ii must point to the real and imaginary component arrays - * of the input. For real input, ii may be NULL. - * - * ro and io must point to enough space to receive the real and - * imaginary component arrays of the output. - * - * All input and output arrays are of size n. - */ - static void forward(unsigned int n, - const double *ri, const double *ii, - double *ro, double *io); - - /** - * Calculate an inverse transform of size n. - * - * ri and ii must point to the real and imaginary component arrays - * of the input. For real input, ii may be NULL. - * - * ro and io must point to enough space to receive the real and - * imaginary component arrays of the output. The output is scaled - * by 1/n. The output pointers may not be NULL, even if the output - * is expected to be real. - * - * All input and output arrays are of size n. - */ - static void inverse(unsigned int n, - const double *ri, const double *ii, - double *ro, double *io); -}; - -} - -_VAMP_SDK_PLUGSPACE_END(FFT.h) - -#endif
--- a/win32-mingw/include/vamp-sdk/Plugin.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,446 +0,0 @@ -/* -*- 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_SDK_PLUGIN_H_ -#define _VAMP_SDK_PLUGIN_H_ - -#include <string> -#include <vector> -#include <map> - -#include "PluginBase.h" -#include "RealTime.h" - -#include "plugguard.h" -_VAMP_SDK_PLUGSPACE_BEGIN(Plugin.h) - -namespace Vamp { - -/** - * \class Plugin Plugin.h <vamp-sdk/Plugin.h> - * - * Vamp::Plugin is a base class for plugin instance classes - * that provide feature extraction from audio or related data. - * - * In most cases, the input will be audio and the output will be a - * stream of derived data at a lower sampling resolution than the - * input. - * - * Note that this class inherits several abstract methods from - * PluginBase. These must be implemented by the subclass. - * - * - * PLUGIN LIFECYCLE - * - * Feature extraction plugins are managed differently from real-time - * plugins (such as VST effects). The main difference is that the - * parameters for a feature extraction plugin are configured before - * the plugin is used, and do not change during use. - * - * 1. Host constructs the plugin, passing it the input sample rate. - * The plugin may do basic initialisation, but should not do anything - * computationally expensive at this point. You must make sure your - * plugin is cheap to construct, otherwise you'll seriously affect the - * startup performance of almost all hosts. If you have serious - * initialisation to do, the proper place is in initialise() (step 5). - * - * 2. Host may query the plugin's available outputs. - * - * 3. Host queries programs and parameter descriptors, and may set - * some or all of them. Parameters that are not explicitly set should - * take their default values as specified in the parameter descriptor. - * When a program is set, the parameter values may change and the host - * will re-query them to check. - * - * 4. Host queries the preferred step size, block size and number of - * channels. These may all vary depending on the parameter values. - * (Note however that you cannot make the number of distinct outputs - * dependent on parameter values.) - * - * 5. Plugin is properly initialised with a call to initialise. This - * fixes the step size, block size, and number of channels, as well as - * all of the parameter and program settings. If the values passed in - * to initialise do not match the plugin's advertised preferred values - * from step 4, the plugin may refuse to initialise and return false - * (although if possible it should accept the new values). Any - * computationally expensive setup code should take place here. - * - * 6. Host finally checks the number of values, resolution, extents - * etc per output (which may vary depending on the number of channels, - * step size and block size as well as the parameter values). - * - * 7. Host will repeatedly call the process method to pass in blocks - * of input data. This method may return features extracted from that - * data (if the plugin is causal). - * - * 8. Host will call getRemainingFeatures exactly once, after all the - * input data has been processed. This may return any non-causal or - * leftover features. - * - * 9. At any point after initialise was called, the host may - * optionally call the reset method and restart processing. (This - * does not mean it can change the parameters, which are fixed from - * initialise until destruction.) - * - * A plugin does not need to handle the case where setParameter or - * selectProgram is called after initialise has been called. It's the - * host's responsibility not to do that. Similarly, the plugin may - * safely assume that initialise is called no more than once. - */ - -class Plugin : public PluginBase -{ -public: - virtual ~Plugin() { } - - /** - * Initialise a plugin to prepare it for use with the given number - * of input channels, step size (window increment, in sample - * frames) and block size (window size, in sample frames). - * - * The input sample rate should have been already specified at - * construction time. - * - * Return true for successful initialisation, false if the number - * of input channels, step size and/or block size cannot be - * supported. - */ - virtual bool initialise(size_t inputChannels, - size_t stepSize, - size_t blockSize) = 0; - - /** - * Reset the plugin after use, to prepare it for another clean - * run. Not called for the first initialisation (i.e. initialise - * must also do a reset). - */ - virtual void reset() = 0; - - enum InputDomain { TimeDomain, FrequencyDomain }; - - /** - * Get the plugin's required input domain. - * - * If this is TimeDomain, the samples provided to the process() - * function (below) will be in the time domain, as for a - * traditional audio processing plugin. - * - * If this is FrequencyDomain, the host will carry out a windowed - * FFT of size equal to the negotiated block size on the data - * before passing the frequency bin data in to process(). The - * input data for the FFT will be rotated so as to place the - * origin in the centre of the block. - * The plugin does not get to choose the window type -- the host - * will either let the user do so, or will use a Hanning window. - */ - virtual InputDomain getInputDomain() const = 0; - - /** - * Get the preferred block size (window size -- the number of - * sample frames passed in each block to the process() function). - * This should be called before initialise(). - * - * A plugin that can handle any block size may return 0. The - * final block size will be set in the initialise() call. - */ - virtual size_t getPreferredBlockSize() const { return 0; } - - /** - * Get the preferred step size (window increment -- the distance - * in sample frames between the start frames of consecutive blocks - * passed to the process() function) for the plugin. This should - * be called before initialise(). - * - * A plugin may return 0 if it has no particular interest in the - * step size. In this case, the host should make the step size - * equal to the block size if the plugin is accepting input in the - * time domain. If the plugin is accepting input in the frequency - * domain, the host may use any step size. The final step size - * will be set in the initialise() call. - */ - virtual size_t getPreferredStepSize() const { return 0; } - - /** - * Get the minimum supported number of input channels. - */ - virtual size_t getMinChannelCount() const { return 1; } - - /** - * Get the maximum supported number of input channels. - */ - virtual size_t getMaxChannelCount() const { return 1; } - - struct OutputDescriptor - { - /** - * The name of the output, in computer-usable form. Should be - * reasonably short and without whitespace or punctuation, using - * the characters [a-zA-Z0-9_-] only. - * Example: "zero_crossing_count" - */ - std::string identifier; - - /** - * The human-readable name of the output. - * Example: "Zero Crossing Counts" - */ - std::string name; - - /** - * A human-readable short text describing the output. May be - * empty if the name has said it all already. - * Example: "The number of zero crossing points per processing block" - */ - std::string description; - - /** - * The unit of the output, in human-readable form. - */ - std::string unit; - - /** - * True if the output has the same number of values per sample - * for every output sample. Outputs for which this is false - * are unlikely to be very useful in a general-purpose host. - */ - bool hasFixedBinCount; - - /** - * The number of values per result of the output. Undefined - * if hasFixedBinCount is false. If this is zero, the output - * is point data (i.e. only the time of each output is of - * interest, the value list will be empty). - */ - size_t binCount; - - /** - * The (human-readable) names of each of the bins, if - * appropriate. This is always optional. - */ - std::vector<std::string> binNames; - - /** - * True if the results in each output bin fall within a fixed - * numeric range (minimum and maximum values). Undefined if - * binCount is zero. - */ - bool hasKnownExtents; - - /** - * Minimum value of the results in the output. Undefined if - * hasKnownExtents is false or binCount is zero. - */ - float minValue; - - /** - * Maximum value of the results in the output. Undefined if - * hasKnownExtents is false or binCount is zero. - */ - float maxValue; - - /** - * True if the output values are quantized to a particular - * resolution. Undefined if binCount is zero. - */ - bool isQuantized; - - /** - * Quantization resolution of the output values (e.g. 1.0 if - * they are all integers). Undefined if isQuantized is false - * or binCount is zero. - */ - float quantizeStep; - - enum SampleType { - - /// Results from each process() align with that call's block start - OneSamplePerStep, - - /// Results are evenly spaced in time (sampleRate specified below) - FixedSampleRate, - - /// Results are unevenly spaced and have individual timestamps - VariableSampleRate - }; - - /** - * Positioning in time of the output results. - */ - SampleType sampleType; - - /** - * Sample rate of the output results, as samples per second. - * Undefined if sampleType is OneSamplePerStep. - * - * If sampleType is VariableSampleRate and this value is - * non-zero, then it may be used to calculate a resolution for - * the output (i.e. the "duration" of each sample, in time, - * will be 1/sampleRate seconds). It's recommended to set - * this to zero if that behaviour is not desired. - */ - float sampleRate; - - /** - * True if the returned results for this output are known to - * have a duration field. - */ - bool hasDuration; - - OutputDescriptor() : // defaults for mandatory non-class-type members - hasFixedBinCount(false), hasKnownExtents(false), isQuantized(false), - sampleType(OneSamplePerStep), sampleRate(0), hasDuration(false) { } - }; - - typedef std::vector<OutputDescriptor> OutputList; - - /** - * Get the outputs of this plugin. An output's index in this list - * is used as its numeric index when looking it up in the - * FeatureSet returned from the process() call. - */ - virtual OutputList getOutputDescriptors() const = 0; - - struct Feature - { - /** - * True if an output feature has its own timestamp. This is - * mandatory if the output has VariableSampleRate, optional if - * the output has FixedSampleRate, and unused if the output - * has OneSamplePerStep. - */ - bool hasTimestamp; - - /** - * Timestamp of the output feature. This is mandatory if the - * output has VariableSampleRate or if the output has - * FixedSampleRate and hasTimestamp is true, and unused - * otherwise. - */ - RealTime timestamp; - - /** - * True if an output feature has a specified duration. This - * is optional if the output has VariableSampleRate or - * FixedSampleRate, and and unused if the output has - * OneSamplePerStep. - */ - bool hasDuration; - - /** - * Duration of the output feature. This is mandatory if the - * output has VariableSampleRate or FixedSampleRate and - * hasDuration is true, and unused otherwise. - */ - RealTime duration; - - /** - * Results for a single sample of this feature. If the output - * hasFixedBinCount, there must be the same number of values - * as the output's binCount count. - */ - std::vector<float> values; - - /** - * Label for the sample of this feature. - */ - std::string label; - - Feature() : // defaults for mandatory non-class-type members - hasTimestamp(false), hasDuration(false) { } - }; - - typedef std::vector<Feature> FeatureList; - - typedef std::map<int, FeatureList> FeatureSet; // key is output no - - /** - * Process a single block of input data. - * - * If the plugin's inputDomain is TimeDomain, inputBuffers will - * point to one array of floats per input channel, and each of - * these arrays will contain blockSize consecutive audio samples - * (the host will zero-pad as necessary). The timestamp in this - * case will be the real time in seconds of the start of the - * supplied block of samples. - * - * If the plugin's inputDomain is FrequencyDomain, inputBuffers - * will point to one array of floats per input channel, and each - * of these arrays will contain blockSize/2+1 consecutive pairs of - * real and imaginary component floats corresponding to bins - * 0..(blockSize/2) of the FFT output. That is, bin 0 (the first - * pair of floats) contains the DC output, up to bin blockSize/2 - * which contains the Nyquist-frequency output. There will - * therefore be blockSize+2 floats per channel in total. The - * timestamp will be the real time in seconds of the centre of the - * FFT input window (i.e. the very first block passed to process - * might contain the FFT of half a block of zero samples and the - * first half-block of the actual data, with a timestamp of zero). - * - * Return any features that have become available after this - * process call. (These do not necessarily have to fall within - * the process block, except for OneSamplePerStep outputs.) - */ - virtual FeatureSet process(const float *const *inputBuffers, - RealTime timestamp) = 0; - - /** - * After all blocks have been processed, calculate and return any - * remaining features derived from the complete input. - */ - virtual FeatureSet getRemainingFeatures() = 0; - - /** - * Used to distinguish between Vamp::Plugin and other potential - * sibling subclasses of PluginBase. Do not reimplement this - * function in your subclass. - */ - virtual std::string getType() const { return "Feature Extraction Plugin"; } - -protected: - Plugin(float inputSampleRate) : - m_inputSampleRate(inputSampleRate) { } - - float m_inputSampleRate; -}; - -} - -_VAMP_SDK_PLUGSPACE_END(Plugin.h) - -#endif - - -
--- a/win32-mingw/include/vamp-sdk/PluginAdapter.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -/* -*- 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_ADAPTER_H_ -#define _VAMP_PLUGIN_ADAPTER_H_ - -#include <map> -#include <vamp/vamp.h> - -#include "Plugin.h" - -#include "plugguard.h" -_VAMP_SDK_PLUGSPACE_BEGIN(PluginAdapter.h) - -namespace Vamp { - -/** - * \class PluginAdapterBase PluginAdapter.h <vamp-sdk/PluginAdapter.h> - * - * PluginAdapter and PluginAdapterBase provide a wrapper class that a - * plugin library can use to make its C++ Vamp::Plugin objects - * available through the Vamp C API. - * - * Almost all Vamp plugin libraries will want to make use of this. To - * do so, all they need to do is declare a PluginAdapter<T> for each - * plugin class T in their library. It's very simple, and you need to - * know absolutely nothing about how it works in order to use it. - * Just cut and paste from an existing plugin's discovery function. - * \see vampGetPluginDescriptor - */ - -class PluginAdapterBase -{ -public: - virtual ~PluginAdapterBase(); - - /** - * Return a VampPluginDescriptor describing the plugin that is - * wrapped by this adapter. - */ - const VampPluginDescriptor *getDescriptor(); - -protected: - PluginAdapterBase(); - - virtual Plugin *createPlugin(float inputSampleRate) = 0; - - class Impl; - Impl *m_impl; -}; - -/** - * \class PluginAdapter PluginAdapter.h <vamp-sdk/PluginAdapter.h> - * - * PluginAdapter turns a PluginAdapterBase into a specific wrapper for - * a particular plugin implementation. - * - * See PluginAdapterBase. - */ - -template <typename P> -class PluginAdapter : public PluginAdapterBase -{ -public: - PluginAdapter() : PluginAdapterBase() { } - virtual ~PluginAdapter() { } - -protected: - Plugin *createPlugin(float inputSampleRate) { - P *p = new P(inputSampleRate); - Plugin *plugin = dynamic_cast<Plugin *>(p); - if (!plugin) { - std::cerr << "ERROR: PluginAdapter::createPlugin: " - << "Template type is not a plugin!" - << std::endl; - delete p; - return 0; - } - return plugin; - } -}; - -} - -_VAMP_SDK_PLUGSPACE_END(PluginAdapter.h) - -#endif -
--- a/win32-mingw/include/vamp-sdk/PluginBase.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,258 +0,0 @@ -/* -*- 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_SDK_PLUGIN_BASE_H_ -#define _VAMP_SDK_PLUGIN_BASE_H_ - -#include <string> -#include <vector> - -#include "plugguard.h" -_VAMP_SDK_PLUGSPACE_BEGIN(PluginBase.h) - -namespace Vamp { - -/** - * A base class for plugins with optional configurable parameters, - * programs, etc. The Vamp::Plugin is derived from this, and - * individual Vamp plugins should derive from that. - * - * This class does not provide the necessary interfaces to instantiate - * or run a plugin. It only specifies an interface for retrieving - * those controls that the host may wish to show to the user for - * editing. It could meaningfully be subclassed by real-time plugins - * or other sorts of plugin as well as Vamp plugins. - */ - -class PluginBase -{ -public: - virtual ~PluginBase() { } - - /** - * Get the Vamp API compatibility level of the plugin. - */ - virtual unsigned int getVampApiVersion() const { return 2; } - - /** - * Get the computer-usable name of the plugin. This should be - * reasonably short and contain no whitespace or punctuation - * characters. It may only contain the characters [a-zA-Z0-9_-]. - * This is the authoritative way for a program to identify a - * plugin within a given library. - * - * This text may be visible to the user, but it should not be the - * main text used to identify a plugin to the user (that will be - * the name, below). - * - * Example: "zero_crossings" - */ - virtual std::string getIdentifier() const = 0; - - /** - * Get a human-readable name or title of the plugin. This - * should be brief and self-contained, as it may be used to - * identify the plugin to the user in isolation (i.e. without also - * showing the plugin's "identifier"). - * - * Example: "Zero Crossings" - */ - virtual std::string getName() const = 0; - - /** - * Get a human-readable description for the plugin, typically - * a line of text that may optionally be displayed in addition - * to the plugin's "name". May be empty if the name has said - * it all already. - * - * Example: "Detect and count zero crossing points" - */ - virtual std::string getDescription() const = 0; - - /** - * Get the name of the author or vendor of the plugin in - * human-readable form. This should be a short identifying text, - * as it may be used to label plugins from the same source in a - * menu or similar. - */ - virtual std::string getMaker() const = 0; - - /** - * Get the copyright statement or licensing summary for the - * plugin. This can be an informative text, without the same - * presentation constraints as mentioned for getMaker above. - */ - virtual std::string getCopyright() const = 0; - - /** - * Get the version number of the plugin. - */ - virtual int getPluginVersion() const = 0; - - - struct ParameterDescriptor - { - /** - * The name of the parameter, in computer-usable form. Should - * be reasonably short, and may only contain the characters - * [a-zA-Z0-9_-]. - */ - std::string identifier; - - /** - * The human-readable name of the parameter. - */ - std::string name; - - /** - * A human-readable short text describing the parameter. May be - * empty if the name has said it all already. - */ - std::string description; - - /** - * The unit of the parameter, in human-readable form. - */ - std::string unit; - - /** - * The minimum value of the parameter. - */ - float minValue; - - /** - * The maximum value of the parameter. - */ - float maxValue; - - /** - * The default value of the parameter. The plugin should - * ensure that parameters have this value on initialisation - * (i.e. the host is not required to explicitly set parameters - * if it wants to use their default values). - */ - float defaultValue; - - /** - * True if the parameter values are quantized to a particular - * resolution. - */ - bool isQuantized; - - /** - * Quantization resolution of the parameter values (e.g. 1.0 - * if they are all integers). Undefined if isQuantized is - * false. - */ - float quantizeStep; - - /** - * Names for the quantized values. If isQuantized is true, - * this may either be empty or contain one string for each of - * the quantize steps from minValue up to maxValue inclusive. - * Undefined if isQuantized is false. - * - * If these names are provided, they should be shown to the - * user in preference to the values themselves. The user may - * never see the actual numeric values unless they are also - * encoded in the names. - */ - std::vector<std::string> valueNames; - - ParameterDescriptor() : // the defaults are invalid: you must set them - minValue(0), maxValue(0), defaultValue(0), isQuantized(false) { } - }; - - typedef std::vector<ParameterDescriptor> ParameterList; - - /** - * Get the controllable parameters of this plugin. - */ - virtual ParameterList getParameterDescriptors() const { - return ParameterList(); - } - - /** - * Get the value of a named parameter. The argument is the identifier - * field from that parameter's descriptor. - */ - virtual float getParameter(std::string) const { return 0.0; } - - /** - * Set a named parameter. The first argument is the identifier field - * from that parameter's descriptor. - */ - virtual void setParameter(std::string, float) { } - - - typedef std::vector<std::string> ProgramList; - - /** - * Get the program settings available in this plugin. A program - * is a named shorthand for a set of parameter values; changing - * the program may cause the plugin to alter the values of its - * published parameters (and/or non-public internal processing - * parameters). The host should re-read the plugin's parameter - * values after setting a new program. - * - * The programs must have unique names. - */ - virtual ProgramList getPrograms() const { return ProgramList(); } - - /** - * Get the current program. - */ - virtual std::string getCurrentProgram() const { return ""; } - - /** - * Select a program. (If the given program name is not one of the - * available programs, do nothing.) - */ - virtual void selectProgram(std::string) { } - - /** - * Get the type of plugin. This is to be implemented by the - * immediate subclass, not by actual plugins. Do not attempt to - * implement this in plugin code. - */ - virtual std::string getType() const = 0; -}; - -} - -_VAMP_SDK_PLUGSPACE_END(PluginBase.h) - -#endif
--- a/win32-mingw/include/vamp-sdk/RealTime.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,167 +0,0 @@ -/* -*- 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. -*/ - -/* - This is a modified version of a source file from the - Rosegarden MIDI and audio sequencer and notation editor. - This file copyright 2000-2006 Chris Cannam. - Relicensed by the author as detailed above. -*/ - -#ifndef _VAMP_REAL_TIME_H_ -#define _VAMP_REAL_TIME_H_ - -#include <iostream> -#include <string> - -#ifndef _WIN32 -struct timeval; -#endif - -#include "plugguard.h" -_VAMP_SDK_PLUGSPACE_BEGIN(RealTime.h) - -namespace Vamp { - -/** - * \class RealTime RealTime.h <vamp-sdk/RealTime.h> - * - * RealTime represents time values to nanosecond precision - * with accurate arithmetic and frame-rate conversion functions. - */ - -struct RealTime -{ - int sec; - int nsec; - - int usec() const { return nsec / 1000; } - int msec() const { return nsec / 1000000; } - - RealTime(): sec(0), nsec(0) {} - RealTime(int s, int n); - - RealTime(const RealTime &r) : - sec(r.sec), nsec(r.nsec) { } - - static RealTime fromSeconds(double sec); - static RealTime fromMilliseconds(int msec); - -#ifndef _WIN32 - static RealTime fromTimeval(const struct timeval &); -#endif - - RealTime &operator=(const RealTime &r) { - sec = r.sec; nsec = r.nsec; return *this; - } - - RealTime operator+(const RealTime &r) const { - return RealTime(sec + r.sec, nsec + r.nsec); - } - RealTime operator-(const RealTime &r) const { - return RealTime(sec - r.sec, nsec - r.nsec); - } - RealTime operator-() const { - return RealTime(-sec, -nsec); - } - - bool operator <(const RealTime &r) const { - if (sec == r.sec) return nsec < r.nsec; - else return sec < r.sec; - } - - bool operator >(const RealTime &r) const { - if (sec == r.sec) return nsec > r.nsec; - else return sec > r.sec; - } - - bool operator==(const RealTime &r) const { - return (sec == r.sec && nsec == r.nsec); - } - - bool operator!=(const RealTime &r) const { - return !(r == *this); - } - - bool operator>=(const RealTime &r) const { - if (sec == r.sec) return nsec >= r.nsec; - else return sec >= r.sec; - } - - bool operator<=(const RealTime &r) const { - if (sec == r.sec) return nsec <= r.nsec; - else return sec <= r.sec; - } - - RealTime operator/(int d) const; - - /** - * Return the ratio of two times. - */ - double operator/(const RealTime &r) const; - - /** - * Return a human-readable debug-type string to full precision - * (probably not a format to show to a user directly) - */ - std::string toString() const; - - /** - * Return a user-readable string to the nearest millisecond - * in a form like HH:MM:SS.mmm - */ - std::string toText(bool fixedDp = false) const; - - /** - * Convert a RealTime into a sample frame at the given sample rate. - */ - static long realTime2Frame(const RealTime &r, unsigned int sampleRate); - - /** - * Convert a sample frame at the given sample rate into a RealTime. - */ - static RealTime frame2RealTime(long frame, unsigned int sampleRate); - - static const RealTime zeroTime; -}; - -std::ostream &operator<<(std::ostream &out, const RealTime &rt); - -} - -_VAMP_SDK_PLUGSPACE_END(RealTime.h) - -#endif
--- a/win32-mingw/include/vamp-sdk/plugguard.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -/* -*- 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_SDK_PLUGGUARD_H_ -#define _VAMP_SDK_PLUGGUARD_H_ - -/** - * Normal usage should be: - * - * - Plugins include vamp-sdk/Plugin.h or vamp-sdk/PluginBase.h. - * These files include this header, which specifies an appropriate - * namespace for the plugin classes to avoid any risk of conflict - * with non-plugin class implementations in the host on load. - * - * - Hosts include vamp-hostsdk/Plugin.h, vamp-hostsdk/PluginBase.h, - * vamp-hostsdk/PluginHostAdapter, vamp-hostsdk/PluginLoader.h etc. - * These files include vamp-hostsdk/hostguard.h, which makes a note - * that we are in a host. A file such as vamp-hostsdk/Plugin.h - * then simply includes vamp-sdk/Plugin.h, and this guard header - * takes notice of the fact that it has been included from a host - * and leaves the plugin namespace unset. - * - * Problems will occur when a host includes files directly from the - * vamp-sdk directory. There are two reasons this might happen: - * mistake, perhaps owing to ignorance of the fact that this isn't - * allowed (particularly since it was the normal mechanism in v1 of - * the SDK); and a wish to incorporate plugin code directly into the - * host rather than having to load it. - * - * What if the host does include a vamp-sdk header by mistake? We can - * catch it if it's included before something from vamp-hostsdk. If - * it's included after something from vamp-hostsdk, it will work OK - * anyway. The remaining problem case is where nothing from - * vamp-hostsdk is included in the same file. We can't catch that. - */ - -#ifndef _VAMP_IN_HOSTSDK - -#define _VAMP_IN_PLUGINSDK 1 - -#define VAMP_SDK_VERSION "2.5" -#define VAMP_SDK_MAJOR_VERSION 2 -#define VAMP_SDK_MINOR_VERSION 5 - -#ifdef _VAMP_NO_PLUGIN_NAMESPACE -#define _VAMP_SDK_PLUGSPACE_BEGIN(h) -#define _VAMP_SDK_PLUGSPACE_END(h) -#else -#ifdef _VAMP_PLUGIN_IN_HOST_NAMESPACE -#define _VAMP_SDK_PLUGSPACE_BEGIN(h) \ - namespace _VampHost { - -#define _VAMP_SDK_PLUGSPACE_END(h) \ - } \ - using namespace _VampHost; -#else -#define _VAMP_SDK_PLUGSPACE_BEGIN(h) \ - namespace _VampPlugin { - -#define _VAMP_SDK_PLUGSPACE_END(h) \ - } \ - using namespace _VampPlugin; -#endif -#endif - -#endif - -#endif -
--- a/win32-mingw/include/vamp-sdk/vamp-sdk.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -*- 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_SDK_SINGLE_INCLUDE_H_ -#define _VAMP_SDK_SINGLE_INCLUDE_H_ - -#include "PluginBase.h" -#include "Plugin.h" -#include "RealTime.h" -#include "FFT.h" - -#endif - -
--- a/win32-mingw/include/vamp/vamp.h Fri Mar 18 14:04:03 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,388 +0,0 @@ -/* -*- 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_HEADER_INCLUDED -#define VAMP_HEADER_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Plugin API version. This is incremented when a change is made that - * changes the binary layout of the descriptor records. When this - * happens, there should be a mechanism for retaining compatibility - * with older hosts and/or plugins. - * - * See also the vampApiVersion field in the plugin descriptor, and the - * hostApiVersion argument to the vampGetPluginDescriptor function. - */ -#define VAMP_API_VERSION 2 - -/** - * C language API for Vamp plugins. - * - * This is the formal plugin API for Vamp. Plugin authors may prefer - * to use the C++ classes provided in the Vamp plugin SDK, instead of - * using this API directly. There is an adapter class provided that - * makes C++ plugins available using this C API with relatively little - * work, and the C++ headers are more thoroughly documented. - * - * IMPORTANT: The comments in this file summarise the purpose of each - * of the declared fields and functions, but do not provide a complete - * guide to their permitted values and expected usage. Please refer - * to the C++ headers in the Vamp plugin SDK for further details and - * plugin lifecycle documentation. - */ - -typedef struct _VampParameterDescriptor -{ - /** Computer-usable name of the parameter. Must not change. [a-zA-Z0-9_] */ - const char *identifier; - - /** Human-readable name of the parameter. May be translatable. */ - const char *name; - - /** Human-readable short text about the parameter. May be translatable. */ - const char *description; - - /** Human-readable unit of the parameter. */ - const char *unit; - - /** Minimum value. */ - float minValue; - - /** Maximum value. */ - float maxValue; - - /** Default value. Plugin is responsible for setting this on initialise. */ - float defaultValue; - - /** 1 if parameter values are quantized to a particular resolution. */ - int isQuantized; - - /** Quantization resolution, if isQuantized. */ - float quantizeStep; - - /** Human-readable names of the values, if isQuantized. May be NULL. */ - const char **valueNames; - -} VampParameterDescriptor; - -typedef enum -{ - /** Each process call returns results aligned with call's block start. */ - vampOneSamplePerStep, - - /** Returned results are evenly spaced at samplerate specified below. */ - vampFixedSampleRate, - - /** Returned results have their own individual timestamps. */ - vampVariableSampleRate - -} VampSampleType; - -typedef struct _VampOutputDescriptor -{ - /** Computer-usable name of the output. Must not change. [a-zA-Z0-9_] */ - const char *identifier; - - /** Human-readable name of the output. May be translatable. */ - const char *name; - - /** Human-readable short text about the output. May be translatable. */ - const char *description; - - /** Human-readable name of the unit of the output. */ - const char *unit; - - /** 1 if output has equal number of values for each returned result. */ - int hasFixedBinCount; - - /** Number of values per result, if hasFixedBinCount. */ - unsigned int binCount; - - /** Names of returned value bins, if hasFixedBinCount. May be NULL. */ - const char **binNames; - - /** 1 if each returned value falls within the same fixed min/max range. */ - int hasKnownExtents; - - /** Minimum value for a returned result in any bin, if hasKnownExtents. */ - float minValue; - - /** Maximum value for a returned result in any bin, if hasKnownExtents. */ - float maxValue; - - /** 1 if returned results are quantized to a particular resolution. */ - int isQuantized; - - /** Quantization resolution for returned results, if isQuantized. */ - float quantizeStep; - - /** Time positioning method for returned results (see VampSampleType). */ - VampSampleType sampleType; - - /** Sample rate of returned results, if sampleType is vampFixedSampleRate. - "Resolution" of result, if sampleType is vampVariableSampleRate. */ - float sampleRate; - - /** 1 if the returned results for this output are known to have a - duration field. - - This field is new in Vamp API version 2; it must not be tested - for plugins that report an older API version in their plugin - descriptor. - */ - int hasDuration; - -} VampOutputDescriptor; - -typedef struct _VampFeature -{ - /** 1 if the feature has a timestamp (i.e. if vampVariableSampleRate). */ - int hasTimestamp; - - /** Seconds component of timestamp. */ - int sec; - - /** Nanoseconds component of timestamp. */ - int nsec; - - /** Number of values. Must be binCount if hasFixedBinCount. */ - unsigned int valueCount; - - /** Values for this returned sample. */ - float *values; - - /** Label for this returned sample. May be NULL. */ - char *label; - -} VampFeature; - -typedef struct _VampFeatureV2 -{ - /** 1 if the feature has a duration. */ - int hasDuration; - - /** Seconds component of duratiion. */ - int durationSec; - - /** Nanoseconds component of duration. */ - int durationNsec; - -} VampFeatureV2; - -typedef union _VampFeatureUnion -{ - // sizeof(featureV1) >= sizeof(featureV2) for backward compatibility - VampFeature v1; - VampFeatureV2 v2; - -} VampFeatureUnion; - -typedef struct _VampFeatureList -{ - /** Number of features in this feature list. */ - unsigned int featureCount; - - /** Features in this feature list. May be NULL if featureCount is - zero. - - If present, this array must contain featureCount feature - structures for a Vamp API version 1 plugin, or 2*featureCount - feature unions for a Vamp API version 2 plugin. - - The features returned by an API version 2 plugin must consist - of the same feature structures as in API version 1 for the - first featureCount array elements, followed by featureCount - unions that contain VampFeatureV2 structures (or NULL pointers - if no V2 feature structures are present). - */ - VampFeatureUnion *features; - -} VampFeatureList; - -typedef enum -{ - vampTimeDomain, - vampFrequencyDomain - -} VampInputDomain; - -typedef void *VampPluginHandle; - -typedef struct _VampPluginDescriptor -{ - /** API version with which this descriptor is compatible. */ - unsigned int vampApiVersion; - - /** Computer-usable name of the plugin. Must not change. [a-zA-Z0-9_] */ - const char *identifier; - - /** Human-readable name of the plugin. May be translatable. */ - const char *name; - - /** Human-readable short text about the plugin. May be translatable. */ - const char *description; - - /** Human-readable name of plugin's author or vendor. */ - const char *maker; - - /** Version number of the plugin. */ - int pluginVersion; - - /** Human-readable summary of copyright or licensing for plugin. */ - const char *copyright; - - /** Number of parameter inputs. */ - unsigned int parameterCount; - - /** Fixed descriptors for parameter inputs. */ - const VampParameterDescriptor **parameters; - - /** Number of programs. */ - unsigned int programCount; - - /** Fixed names for programs. */ - const char **programs; - - /** Preferred input domain for audio input (time or frequency). */ - VampInputDomain inputDomain; - - /** Create and return a new instance of this plugin. */ - VampPluginHandle (*instantiate)(const struct _VampPluginDescriptor *, - float inputSampleRate); - - /** Destroy an instance of this plugin. */ - void (*cleanup)(VampPluginHandle); - - /** Initialise an instance following parameter configuration. */ - int (*initialise)(VampPluginHandle, - unsigned int inputChannels, - unsigned int stepSize, - unsigned int blockSize); - - /** Reset an instance, ready to use again on new input data. */ - void (*reset)(VampPluginHandle); - - /** Get a parameter value. */ - float (*getParameter)(VampPluginHandle, int); - - /** Set a parameter value. May only be called before initialise. */ - void (*setParameter)(VampPluginHandle, int, float); - - /** Get the current program (if programCount > 0). */ - unsigned int (*getCurrentProgram)(VampPluginHandle); - - /** Set the current program. May only be called before initialise. */ - void (*selectProgram)(VampPluginHandle, unsigned int); - - /** Get the plugin's preferred processing window increment in samples. */ - unsigned int (*getPreferredStepSize)(VampPluginHandle); - - /** Get the plugin's preferred processing window size in samples. */ - unsigned int (*getPreferredBlockSize)(VampPluginHandle); - - /** Get the minimum number of input channels this plugin can handle. */ - unsigned int (*getMinChannelCount)(VampPluginHandle); - - /** Get the maximum number of input channels this plugin can handle. */ - unsigned int (*getMaxChannelCount)(VampPluginHandle); - - /** Get the number of feature outputs (distinct sets of results). */ - unsigned int (*getOutputCount)(VampPluginHandle); - - /** Get a descriptor for a given feature output. Returned pointer - is valid only until next call to getOutputDescriptor for this - handle, or releaseOutputDescriptor for this descriptor. Host - must call releaseOutputDescriptor after use. */ - VampOutputDescriptor *(*getOutputDescriptor)(VampPluginHandle, - unsigned int); - - /** Destroy a descriptor for a feature output. */ - void (*releaseOutputDescriptor)(VampOutputDescriptor *); - - /** Process an input block and return a set of features. Returned - pointer is valid only until next call to process, - getRemainingFeatures, or cleanup for this handle, or - releaseFeatureSet for this feature set. Host must call - releaseFeatureSet after use. */ - VampFeatureList *(*process)(VampPluginHandle, - const float *const *inputBuffers, - int sec, - int nsec); - - /** Return any remaining features at the end of processing. */ - VampFeatureList *(*getRemainingFeatures)(VampPluginHandle); - - /** Release a feature set returned from process or getRemainingFeatures. */ - void (*releaseFeatureSet)(VampFeatureList *); - -} VampPluginDescriptor; - - -/** Get the descriptor for a given plugin index in this library. - Return NULL if the index is outside the range of valid indices for - this plugin library. - - The hostApiVersion argument tells the library code the highest - Vamp API version supported by the host. The function should - return a plugin descriptor compatible with the highest API version - supported by the library that is no higher than that supported by - the host. Provided the descriptor has the correct vampApiVersion - field for its actual compatibility level, the host should be able - to do the right thing with it: use it if possible, discard it - otherwise. - - This is the only symbol that a Vamp plugin actually needs to - export from its shared object; all others can be hidden. See the - accompanying documentation for notes on how to achieve this with - certain compilers. -*/ -const VampPluginDescriptor *vampGetPluginDescriptor - (unsigned int hostApiVersion, unsigned int index); - - -/** Function pointer type for vampGetPluginDescriptor. */ -typedef const VampPluginDescriptor *(*VampGetPluginDescriptorFunction) - (unsigned int, unsigned int); - -#ifdef __cplusplus -} -#endif - -#endif