Mercurial > hg > svcore
changeset 71:e32c6a6cb40f
* Remove dsp directory. This is now the qm-dsp library used by
qm-vamp-plugins instead of being used in Sonic Visualiser directly.
* Remove plugins that have now become part of qm-vamp-plugins.
* Move time stretcher from dsp to audioio (this is the one DSP thing
we do need in SV)
author | Chris Cannam |
---|---|
date | Thu, 06 Apr 2006 12:12:41 +0000 |
parents | d26c85099215 |
children | 9bbc57e8bf43 |
files | plugin/FeatureExtractionPluginFactory.cpp plugin/api/FEAPI.h plugin/api/svp.h |
diffstat | 3 files changed, 4 insertions(+), 714 deletions(-) [+] |
line wrap: on
line diff
--- a/plugin/FeatureExtractionPluginFactory.cpp Wed Apr 05 16:52:30 2006 +0000 +++ b/plugin/FeatureExtractionPluginFactory.cpp Thu Apr 06 12:12:41 2006 +0000 @@ -16,12 +16,6 @@ #include "FeatureExtractionPluginFactory.h" #include "PluginIdentifier.h" -#include "plugins/BeatDetect.h" //!!! -#include "plugins/ChromagramPlugin.h" //!!! -#include "plugins/ZeroCrossing.h" //!!! -#include "plugins/SpectralCentroid.h" //!!! -#include "plugins/TonalChangeDetect.h" //!!! - #include "vamp/vamp.h" #include "vamp-sdk/PluginHostAdapter.h" @@ -38,7 +32,7 @@ FeatureExtractionPluginFactory * FeatureExtractionPluginFactory::instance(QString pluginType) { - if (pluginType == "vamp" || pluginType == "sv") { //!!! + if (pluginType == "vamp") { if (!_nativeInstance) { std::cerr << "FeatureExtractionPluginFactory::instance(" << pluginType.toStdString() << "): creating new FeatureExtractionPluginFactory" << std::endl; @@ -112,12 +106,6 @@ FeatureExtractionPluginFactory::getPluginIdentifiers() { std::vector<QString> rv; - rv.push_back("sv:_builtin:beats"); //!!! - rv.push_back("sv:_builtin:chromagram"); //!!! - rv.push_back("sv:_builtin:zerocrossing"); //!!! - rv.push_back("sv:_builtin:spectralcentroid"); //!!! - rv.push_back("sv:_builtin:tonalchange"); //!!! - std::vector<QString> path = getPluginPath(); for (std::vector<QString>::iterator i = path.begin(); i != path.end(); ++i) { @@ -135,7 +123,7 @@ void *libraryHandle = DLOPEN(soname, RTLD_LAZY); if (!libraryHandle) { - std::cerr << "WARNING: FeatureExtractionPluginFactory::getPluginIdentifiers: Failed to load library " << soname.toStdString() << std::endl; + std::cerr << "WARNING: FeatureExtractionPluginFactory::getPluginIdentifiers: Failed to load library " << soname.toStdString() << ": " << DLERROR() << std::endl; continue; } @@ -229,39 +217,11 @@ QString type, soname, label; PluginIdentifier::parseIdentifier(identifier, type, soname, label); - if (type != "vamp" && type != "sv") { //!!! + if (type != "vamp") { std::cerr << "FeatureExtractionPluginFactory::instantiatePlugin: Wrong factory for plugin type " << type.toStdString() << std::endl; return 0; } - //!!! - if (type == "sv" && soname == PluginIdentifier::BUILTIN_PLUGIN_SONAME) { - - if (label == "beats") { - return new BeatDetector(inputSampleRate); //!!! - } - - if (label == "chromagram") { - return new ChromagramPlugin(inputSampleRate); //!!! - } - - if (label == "zerocrossing") { - return new ZeroCrossing(inputSampleRate); //!!! - } - - if (label == "spectralcentroid") { - return new SpectralCentroid(inputSampleRate); //!!! - } - - if (label == "tonalchange") { - return new TonalChangeDetect(inputSampleRate); //!!! - } - - std::cerr << "FeatureExtractionPluginFactory::instantiatePlugin: Unknown plugin \"" << identifier.toStdString() << "\"" << std::endl; - - return 0; - } - QString found = findPluginFile(soname); if (found == "") { @@ -275,7 +235,7 @@ void *libraryHandle = DLOPEN(soname, RTLD_LAZY); if (!libraryHandle) { - std::cerr << "FeatureExtractionPluginFactory::instantiatePlugin: Failed to load library " << soname.toStdString() << std::endl; + std::cerr << "FeatureExtractionPluginFactory::instantiatePlugin: Failed to load library " << soname.toStdString() << ": " << DLERROR() << std::endl; return 0; }
--- a/plugin/api/FEAPI.h Wed Apr 05 16:52:30 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,531 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////// -// /*! \file FEAPI.h -// \brief interface of the feature extraction plugin. -// <br><br> -// In the following, context function pointers typedefs are referred to as -// functions.<br> -// -// -// Create a new instance of the plugin with the function -// ::FEAPI_CreatePluginInstance. The call of this function is mandatory. -// <br><br> -// -// Initialize the plugin with the call of function -// ::FEAPI_InitializePlugin.<br><br> -// -// Information about the plugin can be requested via the following -// functions:<br> -// ::FEAPI_GetPluginAPIVersion, <br> -// ::FEAPI_GetPluginName, <br> -// ::FEAPI_GetPluginVendor, <br> -// ::FEAPI_GetPluginVendorVersion, <br> -// ::FEAPI_GetPluginCopyright, <br> -// ::FEAPI_GetPluginDescription. <br> -// The call of these functions is optional. Combined with a call to -// ::FEAPI_GetPluginId, the plugin can be uniquely identified. <br><br> -// -// The technical capabilities of the plugin can be requested via the call -// of the function -// ::FEAPI_GetPluginProperty.<br><br> -// -// To get the number of the features resp. results that are computed -// by the plugin, call the function <br> -// ::FEAPI_GetPluginNumOfResults; <br> -// the function <br> -// ::FEAPI_GetPluginResultDescription gives you detailed information about the -// meaning and usage of every result (see structure ::_ResultDescription -// for details). <br><br> -// -// To get the number of the options/ parameter settings that can be -// done before processing, call the function <br> -// ::FEAPI_GetPluginNumOfParameters; <br> -// the function <br> -// ::FEAPI_GetPluginParamDescription gives you detailed information about -// the meaning and usage of every single parameter (see structure -// ::FEAPI_ParameterDescription_t for details).<br><br> -// -// To get or set a specific parameter value, call the function <br> -// ::FEAPI_GetPluginParameter resp. <br> -// ::FEAPI_SetPluginParameter. <br><br> -// -// After the plugin is initialized, the actual processing can begin. -// The ::FEAPI_ProcessPlugin <br> -// function can be called to do the actual feature/result -// calculation. ::FEAPI_ProcessPlugin expects subsequently new blocks -// of audio data. Note that ::FEAPI_ProcessPlugin does not return -// computed feature values.<br> -// -// After finishing one ::FEAPI_ProcessPlugin call, zero, one or more -// results can be available, depending on the plug-ins implementation. -// To query the available number of values for every feature/result, -// call <br> -// ::FEAPI_GetPluginSizeOfResult, <br> -// which returns the number of values for this -// result. Afterwards, the result values for each result can -// be requested via <br> -// ::FEAPI_GetPluginResult. Note that the memory for the results has to be -// allocated by the host.<br><br> -// -// To signal that no more audio data is available at the end (e.g. of -// the audio file), call <br> -// ::FEAPI_ProcessPluginDone and get the last results with -// ::FEAPI_GetPluginResult if available.<br><br> -// -// To flush the internal buffers, the function <br> -// ::FEAPI_ResetPlugin <br> -// may be called. -// -// After all processing has been done, destroy the instance of the -// plugin with the function <br> -// ::FEAPI_DestroyPluginInstance. <br> -// The call of this function is mandatory. <br><br> -// -// <br><br><br> -// The Feature Extraction plugin API is released under a BSD style -// license. Please make all changes available to the authors.<br> -// Contact information: lerch <at> zplane.de. -// -// */ -// -// Copyright (c) 2004-2005, Alexander Lerch, zplane.development GbR -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must link to the FEAPI website -// http://www.sf.net/projects/feapi, -// reproduce this list of conditions and the following -// disclaimer in the documentation and/or other materials -// provided with the distribution. -// * The name of the contributors to this software must not be used -// to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -//////////////////////////////////////////////////////////////////////////////////// -// CVS INFORMATION -// -// $RCSfile: FEAPI.h,v $ -// $Author: alex_lerch $ -// $Date: 2005/05/20 17:08:36 $ -// -// $Log: FEAPI.h,v $ -// Revision 1.2 2005/05/20 17:08:36 alex_lerch -// - updated documentation -// - added "signal" typedef for inputs and results -// - changed function PluginCanDo to PluginGetProperty and changed the function itself to return values instead of bools -// - cosmetic changes -// -// Revision 1.1.1.1 2005/03/30 14:54:40 alex_lerch -// first draft version requiring several updates: -// - interface check -// - check of plugin base class -// - implementation of host base class -// - update of outdated documentation -// -// -//////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////// -// !!!Do never ever edit this file!!! -//////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////// - -/*! \brief avoid multiple header includes */ -#if !defined(FEAPI_HEADER_INCLUDED) -#define FEAPI_HEADER_INCLUDED - - -#ifdef __cplusplus -extern "C" { -#endif - -/* Maximum string lengths. */ -const unsigned int FEAPI_uiMaxNameLength = 1024; //!< maximum number of characters for a name string (including null terminator) -const unsigned int FEAPI_uiMaxUnitLength = 1024; //!< maximum number of characters for a unit string (including null terminator) -const unsigned int FEAPI_uiMaxDescriptionLength = 4096; //!< maximum number of characters for a description string (including null terminator) - -//////////////////////////////////////////////////////////////////////////////////// -// interface structures and types -/** @defgroup types Interface Structures and Types - * @{ - */ - - -/*! Structure describing properties and other information about one result/feature. */ -typedef struct FEAPI_SignalDescription_t_tag -{ - char acName[FEAPI_uiMaxNameLength]; //!< name of the result/feature (e.g. "Spectral Centroid", "Loudness", etc.) - char acUnit[FEAPI_uiMaxUnitLength]; //!< unit of the result/feature (e.g. "dB", "sone", "Hz", etc.) - char acDescription[FEAPI_uiMaxDescriptionLength]; //!< description of the result/feature (clear text description) - float fRangeMin; //!< minimum value of the result/feature (if no minimum value: minimum floating point value) - float fRangeMax; //!< maximum value of the result/feature (if no maximum value: maximum floating point value) - float fQuantizedTo; //!< quantization step size of the result/feature (e.g. 1 for integer result, -1 for no quantization) - float fSampleRate; //!< sample rate of the result/feature output in Hz; -1 if sample rate equals input block length, -2 for non-equidistant samples -} FEAPI_SignalDescription_t; - - -/*! Structure describing properties and other information about one parameter. */ -typedef struct FEAPI_ParameterDescription_t_tag -{ - char acName[FEAPI_uiMaxNameLength]; //!< name of the parameter (e.g. "Gain", "Sensitivity", etc.) - char acUnit[FEAPI_uiMaxUnitLength]; //!< unit of the parameter (e.g. "dB", "Hz", etc.) - char acDescription[FEAPI_uiMaxDescriptionLength]; //!< description of the parameter (clear text description) - float fRangeMin, //!< minimum value of the parameter (if no minimum value: minimum floating point value) - fRangeMax, //!< maximum value of the parameter (if no maximum value: maximum floating point value) - fDefaultValue; //!< default value for the parameter - float fQuantizedTo; //!< quantization step size of the parameter (e.g. 1 for integer quantization, -1 for no quantization) - int bIsChangeableInRealTime;//!< 0/false if the parameter has to be set before the processing starts and can not be changed during processing, 1 if the parameter can be changed during processing -} FEAPI_ParameterDescription_t; - - -/*! Structure for user/vendor defined commands. */ -typedef struct FEAPI_UserData_t_tag -{ - char *pcUserString; //!< user defined string value (memory could be freed by host after function call) - void *pcUserData; //!< pointer to user defined data -} FEAPI_UserData_t; - - -/*! Typedef for the plugin instance handle. */ -typedef void* FEAPI_PluginInstance_t; - - -/*! This typedef is used for time stamps in seconds. - For a block of data, the time stamp is defined to be the time at the beginning of the block. */ -typedef double FEAPI_TimeStamp_t; - - -/*! This typedef is used for input and output data. - At least for this version of the API, this is exactly float. */ -typedef float FEAPI_Signal_t; - - -/*! Enumerator for possible error return values, if any other value than FEAPI_kNoError is returned, - the function was not able to execute the specified operation(s).<br> - All error defines are negative. */ -typedef enum FEAPI_Error_t_tag -{ - FEAPI_kNoError = 0, //!< no error occurred - FEAPI_kUnspecifiedError = -1, //!< an error occurred, but the type is not yet specified - FEAPI_kUnknownError = -9999 //!< an error occurred, but its type is not specifyable -} FEAPI_Error_t; - - -/*! Enumerator for retrieval of version info which can be resolved as major.minor.sub. */ -typedef enum FEAPI_VersionInfo_t_tag -{ - FEAPI_kMajorVersion = 0, //!< indicates the major version - FEAPI_kMinorVersion = 1, //!< indicates the minor version - FEAPI_kSubVersion = 2 //!< indicates the sub version or bug-fix version -} FEAPI_VersionInfo_t; - - -/*! Enumerator for retrieval of information about what the plug supports. */ -typedef enum FEAPI_PluginProperty_t_tag -{ - FEAPI_kMinSampleRate = 0, //!< indicates the minimum sample rate - FEAPI_kMaxSampleRate = 1, //!< indicates the maximum sample rate - FEAPI_kMinChannels = 2, //!< indicates minimum number of channels - FEAPI_kMaxChannels = 3, //!< indicates maximum number of channels - FEAPI_kMinFrameSize = 4, //!< indicates minimum number of frames per process call - FEAPI_kMaxFrameSize = 5, //!< indicates maximum number of frames per process call - FEAPI_kOptFrameSize = 6 //!< indicates optimal number of frames per process call -} FEAPI_PluginProperty_t; - -/** @} */ - -//////////////////////////////////////////////////////////////////////////////////// -// API function declaration -/** @defgroup apifun API function pointers - * @{ - */ - - /*! - * Creates a new instance of the plugin - * - * @param phInstanceHandle : handle to the instance to be created - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_CreatePluginInstance_t) ( FEAPI_PluginInstance_t *phInstanceHandle ); - - /*! - * Destroys an instance of the plugin. - * - * @param phInstanceHandle : handle to the instance to be destroyed - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_DestroyPluginInstance_t) ( FEAPI_PluginInstance_t *phInstanceHandle ); - - /*! - * initializes a new instance of the plugin - * - * @param hInstanceHandle : handle to the instance - * @param fInputSampleRate : sample rate of input(s) in Hz - * @param iNumberOfAudioChannels : number of input audio channels - * @param iHostApiMajorVersion : major version number of host - * @param pstUserData : pointer to user or vendor defined data (may be NULL) - * - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_InitializePlugin_t) (FEAPI_PluginInstance_t hInstanceHandle, - float fInputSampleRate, - int iNumberOfAudioChannels, - int iHostApiMajorVersion, - FEAPI_UserData_t *pstUserData); - - - /*! - * Gets the version number (major, minor or subversion) of the API used by the plugin. - * This is *not* the plugin version, therefore the function may be called without a previously - * created instance. - * - * @param eAPIMajorMinorOrSubVersion : flag which version type is requested - * @return int : requested version number - */ - typedef int (*FEAPI_GetPluginAPIVersion_t) ( FEAPI_VersionInfo_t eAPIMajorMinorOrSubVersion ); //!< \todo change ints to (unsigned) ints where appropriate? - - - /*! - * Gets the name of the plugin. - * - * @param hInstanceHandle : handle to instance - * @param *pcPluginName : pointer to buffer of FEAPI_uiMaxNameLength chars, the name will be copied to this buffer - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_GetPluginName_t) ( FEAPI_PluginInstance_t hInstanceHandle, - char *pcPluginName); - - /*! - * Gets the vendor name of the plugin. - * - * @param hInstanceHandle : handle to instance - * @param *pcPluginVendor : pointer to buffer of FEAPI_uiMaxNameLength chars, the vendor name will be copied to this buffer - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_GetPluginVendor_t) (FEAPI_PluginInstance_t hInstanceHandle, - char *pcPluginVendor); - - /*! - * Gets an indication of the plugins capabilities. - * - * @param hInstanceHandle : handle to instance - * @param ePluginProperty : requested property - * @return float : corresponding value - */ - typedef float (*FEAPI_GetPluginProperty_t) (FEAPI_PluginInstance_t hInstanceHandle, - FEAPI_PluginProperty_t ePluginProperty); - - /*! - * Gets the (vendor unique) plugin identification string. - * - * @param hInstanceHandle : handle to instance - * @param *pcPluginId : pointer to buffer of FEAPI_uiMaxNameLength chars, the id will be copied to this buffer - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_GetPluginId_t) (FEAPI_PluginInstance_t hInstanceHandle, - char *pcPluginId); - - /*! - * Gets the vendor version of the plugin. - * - * @param hInstanceHandle : handle to instance - * @param ePluginMajorMinorOrSubVersion : flag which version type is requested - * @return int : requested version number - */ - typedef int (*FEAPI_GetPluginVendorVersion_t) ( FEAPI_PluginInstance_t hInstanceHandle, - FEAPI_VersionInfo_t ePluginMajorMinorOrSubVersion); - - /*! - * Gets the description of the plugin, containing information about what the plugin actually does. - * - * @param hInstanceHandle : handle to instance - * @param *pcPluginDescription : pointer to buffer of FEAPI_uiMaxDescriptionLength chars, the plugin description will be copied to this buffer - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_GetPluginDescription_t) (FEAPI_PluginInstance_t hInstanceHandle, - char *pcPluginDescription); - - /*! - * Gets the copyright information for the plugin. - * - * @param hInstanceHandle : handle to instance - * @param *pcPluginCopyright : pointer to buffer of FEAPI_uiMaxDescriptionLength chars, the plugin copyright information will be copied to this buffer - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_GetPluginCopyright_t) (FEAPI_PluginInstance_t hInstanceHandle, - char *pcPluginCopyright); - - /*! - * Gets the number of inputs for the plugin. This number will equal the - * number of audio channels in many cases, otherwise exceed the number of audio channels. - * The additional input channels are plugin developer specific and not recommended. If used, - * they have to be routed host internally. - * - * @param hInstanceHandle : handle to instance - * @return int : number of inputs - */ - typedef int (*FEAPI_GetPluginNumOfInputs_t) (FEAPI_PluginInstance_t hInstanceHandle); - - /*! - * Gets information about one of the possible inputs. - * - * @param hInstanceHandle : handle to instance - * @param iInputIndex : index of the input the description is requested for, index ranges from 0...NumOfInputs-1 - * @param *pstInputDescription : the requested description will be copied to this structure - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_GetPluginInputDescription_t) (FEAPI_PluginInstance_t hInstanceHandle, - int iInputIndex, - FEAPI_SignalDescription_t *pstInputDescription); - - /*! - * Gets the number of parameters. - * - * @param hInstanceHandle : handle to instance - * @return int : number of parameters - */ - typedef int (*FEAPI_GetPluginNumOfParameters_t) (FEAPI_PluginInstance_t hInstanceHandle); - - /*! - * Gets information about one of the possible parameters. - * - * @param hInstanceHandle : handle to instance - * @param iParameterIndex : index of the parameter (setting) the description is requested for, index ranges from 0...NumOfParameters-1 - * @param *pstParameterDescription : the requested description will be copied to this structure - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_GetPluginParameterDescription_t) (FEAPI_PluginInstance_t hInstanceHandle, - int iParameterIndex, - FEAPI_ParameterDescription_t *pstParameterDescription); - - /*! - * Sets a parameter to a specified value. - * - * @param hInstanceHandle : handle to instance - * @param iParameterIndex : index of the parameter (setting) to be changed, index ranges from 0...NumOfParameters-1 - * @param fValue : new value of the parameter - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_SetPluginParameter_t) ( FEAPI_PluginInstance_t hInstanceHandle, - int iParameterIndex, - float fValue); - - /*! - * Gets the current value of a parameter. - * - * @param hInstanceHandle : handle to instance - * @param iParameterIndex : index of the parameter (setting) requested, index ranges from 0...NumOfParameters-1 - * @return float : value of the parameter with index iParameterIndex - */ - typedef float (*FEAPI_GetPluginParameter_t) (FEAPI_PluginInstance_t hInstanceHandle, - int iParameterIndex); - - /*! - * Processes a block of audio data. - * - * @param hInstanceHandle : handle to instance - * @param **ppfInputBuffer : input audio data in the format [channels][samples]; audio samples have a range from -1.0...+1.0 - * @param *ptFEAPI_TimeStamp : time stamps in seconds for every input, may be NULL - * @param iNumberOfFrames : number of frames in ppfInputBuffer - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_ProcessPlugin_t) (FEAPI_PluginInstance_t hInstanceHandle, - const FEAPI_Signal_t **ppfInputBuffer, - const FEAPI_TimeStamp_t *ptFEAPI_TimeStamp, - int iNumberOfFrames); - - /*! - * Signals that no more input data is available (does the final processing). - * - * @param hInstanceHandle : handle to instance - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_ProcessPluginDone_t) (FEAPI_PluginInstance_t hInstanceHandle); - - /*! - * Gets the number of results/features to be calculated. - * - * @param hInstanceHandle : handle to instance - * @return int : number of results - */ - typedef int (*FEAPI_GetPluginNumOfResults_t) (FEAPI_PluginInstance_t hInstanceHandle); - - /*! - * Gets information about one of the possible results/features. - * - * @param hInstanceHandle : handle to instance - * @param iResultIndex : index of the result (feature) the description is requested for, index ranges from 0...NumOfResults-1 - * @param *pstResultDescription : the requested description will be copied to this structure - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_GetPluginResultDescription_t) ( FEAPI_PluginInstance_t hInstanceHandle, - int iResultIndex, - FEAPI_SignalDescription_t *pstResultDescription); - - /*! - * Gets the size of one result in FEAPI_Signal_t values (4 bytes per value). - * - * @param hInstanceHandle : handle to instance - * @param iResultIndex : index of the result/feature the size is requested for, index ranges from 0...NumOfResults-1 - * @return int : size of result in FEAPI_Signal_t values (4 bytes per value) - */ - typedef int (*FEAPI_GetPluginSizeOfResult_t) (FEAPI_PluginInstance_t hInstanceHandle, - int iResultIndex); - - /*! - * Gets one result. - * - * @param hInstanceHandle : handle to instance - * @param iResultIndex : index of the requested result/feature, index ranges from 0...NumOfResults-1 - * @param *pfResult : the result data is copied into this buffer - * @param *ptFEAPI_TimeStamp : the time stamp of the result - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_GetPluginResult_t) ( FEAPI_PluginInstance_t hInstanceHandle, - int iResultIndex, - FEAPI_Signal_t *pfResult, - FEAPI_TimeStamp_t *ptFEAPI_TimeStamp); - - /*! - * Gets the maximum latency of one result. Since the host buffer size may vary, this is only the - * *internal* latency. - * - * @param hInstanceHandle : handle to instance - * @param iResultIndex : index of the requested result (feature), index ranges from 0...NumOfResults-1 - * @return int : number of samples (at audio input sample rate) which is required to calculate this result the first time (negative values are not allowed, 0 means undefined) - */ - typedef int (*FEAPI_GetPluginResultLatency_t) (FEAPI_PluginInstance_t hInstanceHandle, int iResultIndex); - - /*! - * Resets/clears all internal buffers and states, so that the plugin is in a state where it can start processing a new audio stream. - * - * @param hInstanceHandle : handle to instance - * @return FEAPI_Error_t : FEAPI_kNoError when no error - */ - typedef FEAPI_Error_t (*FEAPI_ResetPlugin_t) (FEAPI_PluginInstance_t hInstanceHandle); - -/** @} */ - - -#ifdef __cplusplus -} -#endif - - -#endif // #if !defined(FEAPI_HEADER_INCLUDED)
--- a/plugin/api/svp.h Wed Apr 05 16:52:30 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ - -/* - Sonic Visualiser Plugin API - A plugin interface for audio feature extraction plugins. - Centre for Digital Music, Queen Mary, University of London. - Copyright 2006 Chris Cannam. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - as published by the Free Software Foundation; either version 2.1 - of the License, or (at your option) any later version. See the - file COPYING included with this distribution for more information. -*/ - -#ifndef SVP_HEADER_INCLUDED -#define SVP_HEADER_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct _SVPParameterDescriptor -{ - const char *name; - const char *description; - const char *unit; - float minValue; - float maxValue; - float defaultValue; - int isQuantized; - float quantizeStep; - -} SVPParameterDescriptor; - -typedef enum -{ - svpOneSamplePerStep, - svpFixedSampleRate, - svpVariableSampleRate - -} SVPSampleType; - -typedef struct _SVPOutputDescriptor -{ - const char *name; - const char *description; - const char *unit; - int hasFixedValueCount; - unsigned int valueCount; - const char **valueNames; - int hasKnownExtents; - float minValue; - float maxValue; - int isQuantized; - float quantizeStep; - SVPSampleType sampleType; - float sampleRate; - -} SVPOutputDescriptor; - -typedef struct _SVPFeature -{ - int hasTimestamp; - int sec; - int nsec; - unsigned int valueCount; - float *values; - char *label; - -} SVPFeature; - -typedef struct _SVPFeatureList -{ - unsigned int featureCount; - SVPFeature *features; - -} SVPFeatureList; - -typedef void *SVPPluginHandle; - -typedef struct _SVPPluginDescriptor -{ - const char *name; - const char *description; - const char *maker; - int pluginVersion; - const char *copyright; - unsigned int parameterCount; - const SVPParameterDescriptor **parameters; - unsigned int programCount; - const char **programs; - - SVPPluginHandle (*instantiate)(const struct _SVPPluginDescriptor *, - float inputSampleRate); - - void (*cleanup)(SVPPluginHandle); - - int (*initialise)(SVPPluginHandle, - unsigned int inputChannels, - unsigned int stepSize, - unsigned int blockSize); - - void (*reset)(SVPPluginHandle); - - float (*getParameter)(SVPPluginHandle, int); - void (*setParameter)(SVPPluginHandle, int, float); - - unsigned int (*getCurrentProgram)(SVPPluginHandle); - void (*selectProgram)(SVPPluginHandle, unsigned int); - - unsigned int (*getPreferredStepSize)(SVPPluginHandle); - unsigned int (*getPreferredBlockSize)(SVPPluginHandle); - unsigned int (*getMinChannelCount)(SVPPluginHandle); - unsigned int (*getMaxChannelCount)(SVPPluginHandle); - - unsigned int (*getOutputCount)(SVPPluginHandle); - SVPOutputDescriptor *(*getOutputDescriptor)(SVPPluginHandle, - unsigned int); - void (*releaseOutputDescriptor)(SVPOutputDescriptor *); - - SVPFeatureList **(*process)(SVPPluginHandle, - float **inputBuffers, - int sec, - int nsec); - SVPFeatureList **(*getRemainingFeatures)(SVPPluginHandle); - void (*releaseFeatureSet)(SVPFeatureList **); - -} SVPPluginDescriptor; - -const SVPPluginDescriptor *svpGetPluginDescriptor(unsigned int index); - -typedef const SVPPluginDescriptor *(SVPGetPluginDescriptorFunction)(unsigned int); - -#ifdef __cplusplus -} -#endif - -#endif