cannam@0: cannam@0:
cannam@0:00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ cannam@0: 00002 cannam@0: 00003 /* cannam@0: 00004 Vamp cannam@0: 00005 cannam@0: 00006 An API for audio analysis and feature extraction plugins. cannam@0: 00007 cannam@0: 00008 Centre for Digital Music, Queen Mary, University of London. cannam@0: 00009 Copyright 2006 Chris Cannam. cannam@0: 00010 cannam@0: 00011 Permission is hereby granted, free of charge, to any person cannam@0: 00012 obtaining a copy of this software and associated documentation cannam@0: 00013 files (the "Software"), to deal in the Software without cannam@0: 00014 restriction, including without limitation the rights to use, copy, cannam@0: 00015 modify, merge, publish, distribute, sublicense, and/or sell copies cannam@0: 00016 of the Software, and to permit persons to whom the Software is cannam@0: 00017 furnished to do so, subject to the following conditions: cannam@0: 00018 cannam@0: 00019 The above copyright notice and this permission notice shall be cannam@0: 00020 included in all copies or substantial portions of the Software. cannam@0: 00021 cannam@0: 00022 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, cannam@0: 00023 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF cannam@0: 00024 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND cannam@0: 00025 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR cannam@0: 00026 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF cannam@0: 00027 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION cannam@0: 00028 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. cannam@0: 00029 cannam@0: 00030 Except as contained in this notice, the names of the Centre for cannam@0: 00031 Digital Music; Queen Mary, University of London; and Chris Cannam cannam@0: 00032 shall not be used in advertising or otherwise to promote the sale, cannam@0: 00033 use or other dealings in this Software without prior written cannam@0: 00034 authorization. cannam@0: 00035 */ cannam@0: 00036 cannam@0: 00037 #ifndef VAMP_HEADER_INCLUDED cannam@0: 00038 #define VAMP_HEADER_INCLUDED cannam@0: 00039 cannam@0: 00040 #ifdef __cplusplus cannam@0: 00041 extern "C" { cannam@0: 00042 #endif cannam@0: 00043 cannam@21: 00053 #define VAMP_API_VERSION 2 cannam@0: 00054 cannam@0: 00071 typedef struct _VampParameterDescriptor cannam@0: 00072 { cannam@0: 00074 const char *identifier; cannam@0: 00075 cannam@0: 00077 const char *name; cannam@0: 00078 cannam@0: 00080 const char *description; cannam@0: 00081 cannam@0: 00083 const char *unit; cannam@0: 00084 cannam@0: 00086 float minValue; cannam@0: 00087 cannam@0: 00089 float maxValue; cannam@0: 00090 cannam@0: 00092 float defaultValue; cannam@0: 00093 cannam@0: 00095 int isQuantized; cannam@0: 00096 cannam@0: 00098 float quantizeStep; cannam@0: 00099 cannam@0: 00101 const char **valueNames; cannam@0: 00102 cannam@0: 00103 } VampParameterDescriptor; cannam@0: 00104 cannam@0: 00105 typedef enum cannam@0: 00106 { cannam@0: 00108 vampOneSamplePerStep, cannam@0: 00109 cannam@0: 00111 vampFixedSampleRate, cannam@0: 00112 cannam@0: 00114 vampVariableSampleRate cannam@0: 00115 cannam@0: 00116 } VampSampleType; cannam@0: 00117 cannam@0: 00118 typedef struct _VampOutputDescriptor cannam@0: 00119 { cannam@0: 00121 const char *identifier; cannam@0: 00122 cannam@0: 00124 const char *name; cannam@0: 00125 cannam@0: 00127 const char *description; cannam@0: 00128 cannam@0: 00130 const char *unit; cannam@0: 00131 cannam@0: 00133 int hasFixedBinCount; cannam@0: 00134 cannam@0: 00136 unsigned int binCount; cannam@0: 00137 cannam@0: 00139 const char **binNames; cannam@0: 00140 cannam@0: 00142 int hasKnownExtents; cannam@0: 00143 cannam@0: 00145 float minValue; cannam@0: 00146 cannam@0: 00148 float maxValue; cannam@0: 00149 cannam@0: 00151 int isQuantized; cannam@0: 00152 cannam@0: 00154 float quantizeStep; cannam@0: 00155 cannam@0: 00157 VampSampleType sampleType; cannam@0: 00158 cannam@0: 00161 float sampleRate; cannam@0: 00162 cannam@21: 00170 int hasDuration; cannam@21: 00171 cannam@21: 00172 } VampOutputDescriptor; cannam@21: 00173 cannam@21: 00174 typedef struct _VampFeature cannam@21: 00175 { cannam@21: 00177 int hasTimestamp; cannam@0: 00178 cannam@21: 00180 int sec; cannam@0: 00181 cannam@21: 00183 int nsec; cannam@0: 00184 cannam@21: 00186 unsigned int valueCount; cannam@21: 00187 cannam@21: 00189 float *values; cannam@21: 00190 cannam@21: 00192 char *label; cannam@21: 00193 cannam@21: 00194 } VampFeature; cannam@21: 00195 cannam@21: 00196 typedef struct _VampFeatureV2 cannam@21: 00197 { cannam@21: 00199 int hasDuration; cannam@21: 00200 cannam@21: 00202 int durationSec; cannam@0: 00203 cannam@21: 00205 int durationNsec; cannam@21: 00206 cannam@21: 00207 } VampFeatureV2; cannam@21: 00208 cannam@21: 00209 typedef union _VampFeatureUnion cannam@21: 00210 { cannam@21: 00211 // sizeof(featureV1) >= sizeof(featureV2) for backward compatibility cannam@21: 00212 VampFeature v1; cannam@21: 00213 VampFeatureV2 v2; cannam@21: 00214 cannam@21: 00215 } VampFeatureUnion; cannam@0: 00216 cannam@21: 00217 typedef struct _VampFeatureList cannam@21: 00218 { cannam@21: 00220 unsigned int featureCount; cannam@21: 00221 cannam@21: 00235 VampFeatureUnion *features; cannam@21: 00236 cannam@21: 00237 } VampFeatureList; cannam@21: 00238 cannam@21: 00239 typedef enum cannam@21: 00240 { cannam@21: 00241 vampTimeDomain, cannam@21: 00242 vampFrequencyDomain cannam@0: 00243 cannam@21: 00244 } VampInputDomain; cannam@21: 00245 cannam@21: 00246 typedef void *VampPluginHandle; cannam@0: 00247 cannam@21: 00248 typedef struct _VampPluginDescriptor cannam@21: 00249 { cannam@21: 00251 unsigned int vampApiVersion; cannam@21: 00252 cannam@21: 00254 const char *identifier; cannam@21: 00255 cannam@21: 00257 const char *name; cannam@21: 00258 cannam@21: 00260 const char *description; cannam@21: 00261 cannam@21: 00263 const char *maker; cannam@21: 00264 cannam@21: 00266 int pluginVersion; cannam@21: 00267 cannam@21: 00269 const char *copyright; cannam@21: 00270 cannam@21: 00272 unsigned int parameterCount; cannam@21: 00273 cannam@21: 00275 const VampParameterDescriptor **parameters; cannam@21: 00276 cannam@21: 00278 unsigned int programCount; cannam@21: 00279 cannam@21: 00281 const char **programs; cannam@21: 00282 cannam@21: 00284 VampInputDomain inputDomain; cannam@21: 00285 cannam@21: 00287 VampPluginHandle (*instantiate)(const struct _VampPluginDescriptor *, cannam@21: 00288 float inputSampleRate); cannam@21: 00289 cannam@21: 00291 void (*cleanup)(VampPluginHandle); cannam@21: 00292 cannam@21: 00294 int (*initialise)(VampPluginHandle, cannam@21: 00295 unsigned int inputChannels, cannam@21: 00296 unsigned int stepSize, cannam@21: 00297 unsigned int blockSize); cannam@21: 00298 cannam@21: 00300 void (*reset)(VampPluginHandle); cannam@21: 00301 cannam@21: 00303 float (*getParameter)(VampPluginHandle, int); cannam@21: 00304 cannam@21: 00306 void (*setParameter)(VampPluginHandle, int, float); cannam@21: 00307 cannam@21: 00309 unsigned int (*getCurrentProgram)(VampPluginHandle); cannam@21: 00310 cannam@21: 00312 void (*selectProgram)(VampPluginHandle, unsigned int); cannam@21: 00313 cannam@21: 00315 unsigned int (*getPreferredStepSize)(VampPluginHandle); cannam@21: 00316 cannam@21: 00318 unsigned int (*getPreferredBlockSize)(VampPluginHandle); cannam@21: 00319 cannam@21: 00321 unsigned int (*getMinChannelCount)(VampPluginHandle); cannam@21: 00322 cannam@21: 00324 unsigned int (*getMaxChannelCount)(VampPluginHandle); cannam@21: 00325 cannam@21: 00327 unsigned int (*getOutputCount)(VampPluginHandle); cannam@21: 00328 cannam@21: 00333 VampOutputDescriptor *(*getOutputDescriptor)(VampPluginHandle, cannam@21: 00334 unsigned int); cannam@21: 00335 cannam@21: 00337 void (*releaseOutputDescriptor)(VampOutputDescriptor *); cannam@21: 00338 cannam@21: 00344 VampFeatureList *(*process)(VampPluginHandle, cannam@21: 00345 const float *const *inputBuffers, cannam@21: 00346 int sec, cannam@21: 00347 int nsec); cannam@21: 00348 cannam@21: 00350 VampFeatureList *(*getRemainingFeatures)(VampPluginHandle); cannam@21: 00351 cannam@21: 00353 void (*releaseFeatureSet)(VampFeatureList *); cannam@21: 00354 cannam@21: 00355 } VampPluginDescriptor; cannam@21: 00356 cannam@21: 00357 cannam@21: 00376 const VampPluginDescriptor *vampGetPluginDescriptor cannam@21: 00377 (unsigned int hostApiVersion, unsigned int index); cannam@21: 00378 cannam@21: 00379 cannam@21: 00381 typedef const VampPluginDescriptor *(*VampGetPluginDescriptorFunction) cannam@21: 00382 (unsigned int, unsigned int); cannam@21: 00383 cannam@21: 00384 #ifdef __cplusplus cannam@21: 00385 } cannam@21: 00386 #endif cannam@21: 00387 cannam@21: 00388 #endif cannam@0: