Chris@58: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@58: Chris@58: /* Chris@58: Sonic Visualiser Plugin API Chris@58: A plugin interface for audio feature extraction plugins. Chris@58: Centre for Digital Music, Queen Mary, University of London. Chris@58: Copyright 2006 Chris Cannam. Chris@58: Chris@58: This library is free software; you can redistribute it and/or Chris@58: modify it under the terms of the GNU Lesser General Public License Chris@58: as published by the Free Software Foundation; either version 2.1 Chris@58: of the License, or (at your option) any later version. See the Chris@58: file COPYING included with this distribution for more information. Chris@58: */ Chris@58: Chris@58: #ifndef SVP_HEADER_INCLUDED Chris@58: #define SVP_HEADER_INCLUDED Chris@58: Chris@58: #ifdef __cplusplus Chris@58: extern "C" { Chris@58: #endif Chris@58: Chris@58: typedef struct _SVPParameterDescriptor Chris@58: { Chris@58: const char *name; Chris@58: const char *description; Chris@58: const char *unit; Chris@58: float minValue; Chris@58: float maxValue; Chris@58: float defaultValue; Chris@58: int isQuantized; Chris@58: float quantizeStep; Chris@58: Chris@58: } SVPParameterDescriptor; Chris@58: Chris@58: typedef enum Chris@58: { Chris@58: svpOneSamplePerStep, Chris@58: svpFixedSampleRate, Chris@58: svpVariableSampleRate Chris@58: Chris@58: } SVPSampleType; Chris@58: Chris@58: typedef struct _SVPOutputDescriptor Chris@58: { Chris@58: const char *name; Chris@58: const char *description; Chris@58: const char *unit; Chris@58: int hasFixedValueCount; Chris@58: unsigned int valueCount; Chris@58: const char **valueNames; Chris@58: int hasKnownExtents; Chris@58: float minValue; Chris@58: float maxValue; Chris@58: int isQuantized; Chris@58: float quantizeStep; Chris@58: SVPSampleType sampleType; Chris@58: float sampleRate; Chris@58: Chris@58: } SVPOutputDescriptor; Chris@58: Chris@58: typedef struct _SVPFeature Chris@58: { Chris@58: int hasTimestamp; Chris@58: int sec; Chris@58: int nsec; Chris@58: unsigned int valueCount; Chris@58: float *values; Chris@58: char *label; Chris@58: Chris@58: } SVPFeature; Chris@58: Chris@58: typedef struct _SVPFeatureList Chris@58: { Chris@58: unsigned int featureCount; Chris@58: SVPFeature *features; Chris@58: Chris@58: } SVPFeatureList; Chris@58: Chris@58: typedef void *SVPPluginHandle; Chris@58: Chris@58: typedef struct _SVPPluginDescriptor Chris@58: { Chris@58: const char *name; Chris@58: const char *description; Chris@58: const char *maker; Chris@58: int pluginVersion; Chris@58: const char *copyright; Chris@58: unsigned int parameterCount; Chris@58: const SVPParameterDescriptor **parameters; Chris@58: unsigned int programCount; Chris@58: const char **programs; Chris@58: Chris@58: SVPPluginHandle (*instantiate)(const struct _SVPPluginDescriptor *, Chris@58: float inputSampleRate); Chris@58: Chris@58: void (*cleanup)(SVPPluginHandle); Chris@58: Chris@58: int (*initialise)(SVPPluginHandle, Chris@58: unsigned int inputChannels, Chris@58: unsigned int stepSize, Chris@58: unsigned int blockSize); Chris@58: Chris@58: void (*reset)(SVPPluginHandle); Chris@58: Chris@58: float (*getParameter)(SVPPluginHandle, int); Chris@58: void (*setParameter)(SVPPluginHandle, int, float); Chris@58: Chris@58: unsigned int (*getCurrentProgram)(SVPPluginHandle); Chris@58: void (*selectProgram)(SVPPluginHandle, unsigned int); Chris@58: Chris@58: unsigned int (*getPreferredStepSize)(SVPPluginHandle); Chris@58: unsigned int (*getPreferredBlockSize)(SVPPluginHandle); Chris@58: unsigned int (*getMinChannelCount)(SVPPluginHandle); Chris@58: unsigned int (*getMaxChannelCount)(SVPPluginHandle); Chris@58: unsigned int (*getOutputCount)(SVPPluginHandle); Chris@58: Chris@58: SVPOutputDescriptor *(*getOutputDescriptor)(SVPPluginHandle, Chris@58: unsigned int); Chris@58: void (*releaseOutputDescriptor)(SVPOutputDescriptor *); Chris@58: Chris@58: SVPFeatureList **(*process)(SVPPluginHandle, Chris@58: float **inputBuffers, Chris@58: int sec, Chris@58: int nsec); Chris@58: SVPFeatureList **(*getRemainingFeatures)(SVPPluginHandle); Chris@58: void (*releaseFeatureSet)(SVPFeatureList **); Chris@58: Chris@58: } SVPPluginDescriptor; Chris@58: Chris@58: const SVPPluginDescriptor *svpGetPluginDescriptor(unsigned int index); Chris@58: Chris@58: typedef const SVPPluginDescriptor *(SVPGetPluginDescriptorFunction)(unsigned int); Chris@58: Chris@58: #ifdef __cplusplus Chris@58: } Chris@58: #endif Chris@58: Chris@58: #endif