To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / src / doc-overview

History | View | Annotate | Download (7.22 KB)

1

    
2
/** \mainpage Vamp Plugin SDK
3

    
4
\section about About Vamp
5

    
6
Vamp is an API for C and C++ plugins that process sampled audio data
7
to produce descriptive output (measurements or semantic observations).
8
Find more information at http://www.vamp-plugins.org/ .
9

    
10
Although the official API for Vamp plugins is defined in C for maximum
11
binary compatibility, we strongly recommend using the provided C++
12
classes in the SDK to implement your own plugins and hosts.
13

    
14
\section plugins For Plugins
15

    
16
Plugins should subclass Vamp::Plugin, and then use a
17
Vamp::PluginAdapter to expose the correct C API for the plugin.  Read
18
the documentation for Vamp::PluginBase and Vamp::Plugin before
19
starting.
20

    
21
Plugins should be compiled and linked into dynamic libraries using the
22
usual convention for your platform, and should link (preferably
23
statically) with -lvamp-sdk.  Any number of plugins can reside in a
24
single dynamic library.  See plugins.cpp in the example plugins
25
directory for the sort of code that will need to accompany your plugin
26
class or classes, to make it possible for a host to look up your
27
plugins properly.
28

    
29
Please read the relevant README file for your platform found in the
30
Vamp SDK build/ directory, for details about how to ensure the
31
resulting dynamic library exports the correct linker symbols.
32

    
33
The following example plugins are provided.  You may legally reuse any
34
amount of the code from these examples in any plugins you write,
35
whether proprietary or open-source.
36

    
37
 - ZeroCrossing calculates the positions and density of zero-crossing
38
 points in an audio waveform.
39

    
40
 - SpectralCentroid calculates the centre of gravity of the frequency
41
 domain representation of each block of audio.
42

    
43
 - PowerSpectrum calculates a power spectrum from the input audio.
44
 Actually, it doesn't do any work except calculating power from a
45
 cartesian complex FFT output.  The work of calculating this frequency
46
 domain output is done for it by the host or host SDK; the plugin just
47
 needs to declare that it wants frequency domain input.  This is the
48
 simplest of the example plugins.
49

    
50
 - AmplitudeFollower is a simple implementation of SuperCollider's
51
 amplitude-follower algorithm.
52

    
53
 - PercussionOnsetDetector estimates the locations of percussive
54
 onsets using a simple method described in "Drum Source Separation
55
 using Percussive Feature Detection and Spectral Modulation" by Dan
56
 Barry, Derry Fitzgerald, Eugene Coyle and Bob Lawlor, ISSC 2005.
57

    
58
 - FixedTempoEstimator calculates a single beats-per-minute value
59
 which is an estimate of the tempo of a piece of music that is assumed
60
 to be of fixed tempo, using autocorrelation of a frequency domain
61
 energy rise metric.  It has several outputs that return intermediate
62
 results used in the calculation, and may be a useful example of a
63
 plugin having several outputs with varying feature structures.
64

    
65
Plugin authors should also read the Programmer's Guide at
66
http://vamp-plugins.org/guide.pdf .
67

    
68
\section hosts For Hosts
69

    
70
Hosts will normally use a Vamp::PluginHostAdapter to convert each
71
plugin's exposed C API back into a useful Vamp::Plugin C++ object.
72

    
73
The Vamp::HostExt namespace contains several additional C++ classes to
74
do this work for them, and make the host's life easier:
75

    
76
 - Vamp::HostExt::PluginLoader provides a very easy interface for a
77
 host to discover, load, and find out category information about the
78
 available plugins.  Most Vamp hosts will probably want to use this
79
 class.
80

    
81
 - Vamp::HostExt::PluginInputDomainAdapter provides a simple means for
82
 hosts to handle plugins that want frequency-domain input, without
83
 having to convert the input themselves.
84

    
85
 - Vamp::HostExt::PluginChannelAdapter provides a simple means for
86
 hosts to use plugins that do not necessarily support the same number
87
 of audio channels as they have available, without having to apply a
88
 channel management / mixdown policy themselves.
89

    
90
 - Vamp::HostExt::PluginBufferingAdapter provides a means for hosts to
91
 avoid having to negotiate the input step and block size, instead
92
 permitting the host to use any block size they desire (and a step
93
 size equal to it).  This is particularly useful for "streaming" hosts
94
 that cannot seek backwards in the input audio stream and so would
95
 otherwise need to implement an additional buffer to support step
96
 sizes smaller than the block size.
97

    
98
 - Vamp::HostExt::PluginSummarisingAdapter provides summarisation
99
 methods such as mean and median averages of output features, for use
100
 in any context where an available plugin produces individual values
101
 but the result that is actually needed is some sort of aggregate.
102

    
103
The PluginLoader class can also use the input domain, channel, and
104
buffering adapters automatically to make these conversions transparent
105
to the host if required.
106

    
107
Host authors should also refer to the example host code in the host
108
directory of the SDK.
109

    
110
Hosts should link with -lvamp-hostsdk.
111

    
112
(The following notes in this section are mostly relevant for
113
developers that are not using the HostExt classes, or that wish to
114
know more about the policy they implement.)
115

    
116
The Vamp API does not officially specify how to load plugin libraries
117
or where to find them.  However, the SDK does include a function
118
(Vamp::PluginHostAdapter::getPluginPath()) that returns a recommended
119
directory search path that hosts may use for plugin libraries, and a
120
class (Vamp::HostExt::PluginLoader) that implements a sensible
121
cross-platform lookup policy using this path.  We recommend using this
122
class in your host unless you have a good reason not to want to.  This
123
implementation also permits the user to set the environment variable
124
VAMP_PATH to override the default path if desired.
125

    
126
The policy used by Vamp::HostExt::PluginLoader -- and our
127
recommendation for any host -- is to search each directory in this
128
path for .DLL (on Windows), .so (on Linux, Solaris, BSD etc) or .dylib
129
(on OS/X) files, then to load each one and perform a dynamic name
130
lookup on the vampGetPluginDescriptor function to enumerate the
131
plugins in the library.  The example host has some code that may help,
132
but this operation will necessarily be system-dependent.
133

    
134
Vamp also has an informal convention for sorting plugins into
135
functional categories.  In addition to the library file itself, a
136
plugin library may install a category file with the same name as the
137
library but .cat extension.  The existence and format of this file are
138
not specified by the Vamp API, but by convention the file may contain
139
lines of the format
140

    
141
\code
142
vamp:pluginlibrary:pluginname::General Category > Specific Category
143
\endcode
144

    
145
which a host may read and use to assign plugins a location within a
146
category tree for display to the user.  The expectation is that
147
advanced users may also choose to set up their own preferred category
148
trees, which is why this information is not queried as part of the
149
Vamp plugin's API itself.  The Vamp::HostExt::PluginLoader class also
150
provides support for plugin category lookup using this scheme.
151

    
152
\section license License
153

    
154
This plugin SDK is freely redistributable under a "new-style BSD"
155
licence.  See the file COPYING for more details.  In short, you may
156
modify and redistribute the SDK and example plugins within any
157
commercial or non-commercial, proprietary or open-source plugin or
158
application under almost any conditions, with no obligation to provide
159
source code, provided you retain the original copyright note.
160

    
161

    
162
*/