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