| cannam@54 | 1 | 
| cannam@54 | 2 /** \mainpage Vamp Plugin SDK | 
| cannam@54 | 3 | 
| cannam@54 | 4 \section about About Vamp | 
| cannam@54 | 5 | 
| cannam@54 | 6 Vamp is an API for C and C++ plugins that process sampled audio data | 
| cannam@54 | 7 to produce descriptive output (measurements or semantic observations). | 
| cannam@54 | 8 Find more information at http://www.vamp-plugins.org/ . | 
| cannam@54 | 9 | 
| cannam@54 | 10 Although the official API for Vamp plugins is defined in C for maximum | 
| cannam@54 | 11 binary compatibility, we strongly recommend using the provided C++ | 
| cannam@54 | 12 classes in the SDK to implement your own plugins and hosts. | 
| cannam@54 | 13 | 
| cannam@54 | 14 \section plugins For Plugins | 
| cannam@54 | 15 | 
| cannam@54 | 16 Plugins should subclass Vamp::Plugin, and then use a | 
| cannam@54 | 17 Vamp::PluginAdapter to expose the correct C API for the plugin.  Read | 
| cannam@54 | 18 the documentation for Vamp::PluginBase and Vamp::Plugin before | 
| cannam@54 | 19 starting. | 
| cannam@54 | 20 | 
| cannam@54 | 21 Plugins should be compiled and linked into dynamic libraries using the | 
| cannam@54 | 22 usual convention for your platform, and should link (preferably | 
| cannam@54 | 23 statically) with -lvamp-sdk.  Any number of plugins can reside in a | 
| cannam@54 | 24 single dynamic library.  See plugins.cpp in the example plugins | 
| cannam@54 | 25 directory for the sort of code that will need to accompany your plugin | 
| cannam@54 | 26 class or classes, to make it possible for a host to look up your | 
| cannam@54 | 27 plugins properly. | 
| cannam@54 | 28 | 
| cannam@54 | 29 The following example plugins are provided: | 
| cannam@54 | 30 | 
| cannam@54 | 31  - ZeroCrossing calculates the positions and density of zero-crossing | 
| cannam@54 | 32  points in an audio waveform. | 
| cannam@54 | 33 | 
| cannam@54 | 34  - SpectralCentroid calculates the centre of gravity of the frequency | 
| cannam@54 | 35  domain representation of each block of audio. | 
| cannam@54 | 36 | 
| cannam@54 | 37  - AmplitudeFollower is an implementation of SuperCollider's | 
| cannam@54 | 38  amplitude-follower algorithm as a simple Vamp plugin. | 
| cannam@54 | 39 | 
| cannam@54 | 40  - PercussionOnsetDetector estimates the locations of percussive | 
| cannam@54 | 41  onsets using a simple method described in "Drum Source Separation | 
| cannam@54 | 42  using Percussive Feature Detection and Spectral Modulation" by Dan | 
| cannam@54 | 43  Barry, Derry Fitzgerald, Eugene Coyle and Bob Lawlor, ISSC 2005. | 
| cannam@54 | 44 | 
| cannam@54 | 45 \section hosts For Hosts | 
| cannam@54 | 46 | 
| cannam@54 | 47 Hosts will usually want to use a Vamp::PluginHostAdapter to convert | 
| cannam@54 | 48 each plugin's exposed C API back into a useful Vamp::Plugin object. | 
| cannam@54 | 49 | 
| cannam@54 | 50 Hosts should link with -lvamp-hostsdk. | 
| cannam@54 | 51 | 
| cannam@54 | 52 The Vamp API does not officially specify how to load plugin libraries | 
| cannam@54 | 53 or where to find them.  However, the SDK does include a function | 
| cannam@54 | 54 (Vamp::PluginHostAdapter::getPluginPath()) that returns a recommended | 
| cannam@54 | 55 directory search path that hosts may use for plugin libraries. | 
| cannam@54 | 56 | 
| cannam@54 | 57 Our suggestion for a host is to search each directory in this path for | 
| cannam@54 | 58 .DLL (on Windows), .so (on Linux, Solaris, BSD etc) or .dylib (on | 
| cannam@54 | 59 OS/X) files, then to load each one and perform a dynamic name lookup | 
| cannam@54 | 60 on the vampGetPluginDescriptor function to enumerate the plugins in | 
| cannam@54 | 61 the library.  The example host has some code that may help, but this | 
| cannam@54 | 62 operation will necessarily be system-dependent. | 
| cannam@54 | 63 | 
| cannam@54 | 64 Vamp also has an informal convention for sorting plugins into | 
| cannam@54 | 65 functional categories.  In addition to the library file itself, a | 
| cannam@54 | 66 plugin library may install a category file with the same name as the | 
| cannam@54 | 67 library but .cat extension.  The existence and format of this file are | 
| cannam@54 | 68 not specified by the Vamp API, but by convention the file may contain | 
| cannam@54 | 69 lines of the format | 
| cannam@54 | 70 | 
| cannam@54 | 71 \code | 
| cannam@54 | 72 vamp:pluginlibrary:pluginname::General Category > Specific Category | 
| cannam@54 | 73 \endcode | 
| cannam@54 | 74 | 
| cannam@54 | 75 which a host may read and use to assign plugins a location within a | 
| cannam@54 | 76 category tree for display to the user.  The expectation is that | 
| cannam@54 | 77 advanced users may also choose to set up their own preferred category | 
| cannam@54 | 78 trees, which is why this information is not queried as part of the | 
| cannam@54 | 79 Vamp API itself. | 
| cannam@54 | 80 | 
| cannam@54 | 81 There is an example host in the "host" directory from | 
| cannam@54 | 82 which code may be drawn. | 
| cannam@54 | 83 | 
| cannam@54 | 84 \section license License | 
| cannam@54 | 85 | 
| cannam@54 | 86 This plugin SDK is freely redistributable under a "new-style BSD" | 
| cannam@54 | 87 licence.  See the file COPYING for more details.  In short, you may | 
| cannam@54 | 88 modify and redistribute the SDK and example plugins within any | 
| cannam@54 | 89 commercial or non-commercial, proprietary or open-source plugin or | 
| cannam@54 | 90 application under almost any conditions, with no obligation to provide | 
| cannam@54 | 91 source code, provided you retain the original copyright note. | 
| cannam@54 | 92 | 
| cannam@54 | 93 | 
| cannam@54 | 94 */ |