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 */
|