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