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@0: 00053 #define VAMP_API_VERSION 1 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@0: 00163 } VampOutputDescriptor; cannam@0: 00164 cannam@0: 00165 typedef struct _VampFeature cannam@0: 00166 { cannam@0: 00168 int hasTimestamp; cannam@0: 00169 cannam@0: 00171 int sec; cannam@0: 00172 cannam@0: 00174 int nsec; cannam@0: 00175 cannam@0: 00177 unsigned int valueCount; cannam@0: 00178 cannam@0: 00180 float *values; cannam@0: 00181 cannam@0: 00183 char *label; cannam@0: 00184 cannam@0: 00185 } VampFeature; cannam@0: 00186 cannam@0: 00187 typedef struct _VampFeatureList cannam@0: 00188 { cannam@0: 00190 unsigned int featureCount; cannam@0: 00191 cannam@0: 00193 VampFeature *features; cannam@0: 00194 cannam@0: 00195 } VampFeatureList; cannam@0: 00196 cannam@0: 00197 typedef enum cannam@0: 00198 { cannam@0: 00199 vampTimeDomain, cannam@0: 00200 vampFrequencyDomain cannam@0: 00201 cannam@0: 00202 } VampInputDomain; cannam@0: 00203 cannam@0: 00204 typedef void *VampPluginHandle; cannam@0: 00205 cannam@0: 00206 typedef struct _VampPluginDescriptor cannam@0: 00207 { cannam@0: 00209 unsigned int vampApiVersion; cannam@0: 00210 cannam@0: 00212 const char *identifier; cannam@0: 00213 cannam@0: 00215 const char *name; cannam@0: 00216 cannam@0: 00218 const char *description; cannam@0: 00219 cannam@0: 00221 const char *maker; cannam@0: 00222 cannam@0: 00224 int pluginVersion; cannam@0: 00225 cannam@0: 00227 const char *copyright; cannam@0: 00228 cannam@0: 00230 unsigned int parameterCount; cannam@0: 00231 cannam@0: 00233 const VampParameterDescriptor **parameters; cannam@0: 00234 cannam@0: 00236 unsigned int programCount; cannam@0: 00237 cannam@0: 00239 const char **programs; cannam@0: 00240 cannam@0: 00242 VampInputDomain inputDomain; cannam@0: 00243 cannam@0: 00245 VampPluginHandle (*instantiate)(const struct _VampPluginDescriptor *, cannam@0: 00246 float inputSampleRate); cannam@0: 00247 cannam@0: 00249 void (*cleanup)(VampPluginHandle); cannam@0: 00250 cannam@0: 00252 int (*initialise)(VampPluginHandle, cannam@0: 00253 unsigned int inputChannels, cannam@0: 00254 unsigned int stepSize, cannam@0: 00255 unsigned int blockSize); cannam@0: 00256 cannam@0: 00258 void (*reset)(VampPluginHandle); cannam@0: 00259 cannam@0: 00261 float (*getParameter)(VampPluginHandle, int); cannam@0: 00262 cannam@0: 00264 void (*setParameter)(VampPluginHandle, int, float); cannam@0: 00265 cannam@0: 00267 unsigned int (*getCurrentProgram)(VampPluginHandle); cannam@0: 00268 cannam@0: 00270 void (*selectProgram)(VampPluginHandle, unsigned int); cannam@0: 00271 cannam@0: 00273 unsigned int (*getPreferredStepSize)(VampPluginHandle); cannam@0: 00274 cannam@0: 00276 unsigned int (*getPreferredBlockSize)(VampPluginHandle); cannam@0: 00277 cannam@0: 00279 unsigned int (*getMinChannelCount)(VampPluginHandle); cannam@0: 00280 cannam@0: 00282 unsigned int (*getMaxChannelCount)(VampPluginHandle); cannam@0: 00283 cannam@0: 00285 unsigned int (*getOutputCount)(VampPluginHandle); cannam@0: 00286 cannam@0: 00291 VampOutputDescriptor *(*getOutputDescriptor)(VampPluginHandle, cannam@0: 00292 unsigned int); cannam@0: 00293 cannam@0: 00295 void (*releaseOutputDescriptor)(VampOutputDescriptor *); cannam@0: 00296 cannam@0: 00302 VampFeatureList *(*process)(VampPluginHandle, cannam@0: 00303 const float *const *inputBuffers, cannam@0: 00304 int sec, cannam@0: 00305 int nsec); cannam@0: 00306 cannam@0: 00308 VampFeatureList *(*getRemainingFeatures)(VampPluginHandle); cannam@0: 00309 cannam@0: 00311 void (*releaseFeatureSet)(VampFeatureList *); cannam@0: 00312 cannam@0: 00313 } VampPluginDescriptor; cannam@0: 00314 cannam@0: 00315 cannam@0: 00334 const VampPluginDescriptor *vampGetPluginDescriptor cannam@0: 00335 (unsigned int hostApiVersion, unsigned int index); cannam@0: 00336 cannam@0: 00337 cannam@0: 00339 typedef const VampPluginDescriptor *(*VampGetPluginDescriptorFunction) cannam@0: 00340 (unsigned int, unsigned int); cannam@0: 00341 cannam@0: 00342 #ifdef __cplusplus cannam@0: 00343 } cannam@0: 00344 #endif cannam@0: 00345 cannam@0: 00346 #endif cannam@0: