cannam@14
|
1
|
cannam@14
|
2 Vamp
|
cannam@14
|
3 ====
|
cannam@35
|
4 http://www.sonicvisualiser.org/vamp.html
|
cannam@14
|
5
|
cannam@14
|
6 An API for audio analysis and feature extraction plugins.
|
cannam@14
|
7
|
cannam@14
|
8 Vamp is an API for C and C++ plugins that process sampled audio data
|
cannam@18
|
9 to produce descriptive output (measurements or semantic observations).
|
cannam@14
|
10
|
cannam@14
|
11 The principal differences between Vamp and a real-time audio
|
cannam@14
|
12 processing plugin system such as VST are:
|
cannam@14
|
13
|
cannam@14
|
14 * Vamp plugins may output complex multidimensional data with labels.
|
cannam@14
|
15 As a consequence, they are likely to work best when the output
|
cannam@14
|
16 data has a much lower sampling rate than the input. (This also
|
cannam@14
|
17 means it is usually desirable to implement them in C++ using the
|
cannam@14
|
18 high-level base class provided rather than use the raw C API.)
|
cannam@14
|
19
|
cannam@14
|
20 * While Vamp plugins receive data block-by-block, they are not
|
cannam@14
|
21 required to return output immediately on receiving the input.
|
cannam@14
|
22 A Vamp plugin may be non-causal, preferring to store up data
|
cannam@14
|
23 based on its input until the end of a processing run and then
|
cannam@14
|
24 return all results at once.
|
cannam@14
|
25
|
cannam@14
|
26 * Vamp plugins have more control over their inputs than a typical
|
cannam@14
|
27 real-time processing plugin. For example, they can indicate to
|
cannam@18
|
28 the host their preferred processing block and step sizes, and these
|
cannam@18
|
29 may differ.
|
cannam@18
|
30
|
cannam@18
|
31 * Vamp plugins may ask to receive data in the frequency domain
|
cannam@18
|
32 instead of the time domain. The host takes the responsibility
|
cannam@18
|
33 for converting the input data using an FFT of windowed frames.
|
cannam@18
|
34 This simplifies plugins that do straightforward frequency-domain
|
cannam@18
|
35 processing and permits the host to cache frequency-domain data
|
cannam@18
|
36 when possible.
|
cannam@14
|
37
|
cannam@14
|
38 * A Vamp plugin is configured once before each processing run, and
|
cannam@14
|
39 receives no further parameter changes during use -- unlike real
|
cannam@14
|
40 time plugin APIs in which the input parameters may change at any
|
cannam@14
|
41 time. This also means that fundamental properties such as the
|
cannam@14
|
42 number of values per output or the preferred processing block
|
cannam@18
|
43 size may depend on the input parameters.
|
cannam@14
|
44
|
cannam@38
|
45 * Vamp plugins do not have to be able to run in real time.
|
cannam@38
|
46
|
cannam@31
|
47 Vamp reuses some ideas from several existing systems, notably DSSI
|
cannam@31
|
48 (http://dssi.sourceforge.net) and FEAPI (http://feapi.sourceforge.net).
|
cannam@31
|
49
|
cannam@14
|
50
|
cannam@14
|
51 About this SDK
|
cannam@14
|
52 ==============
|
cannam@14
|
53
|
cannam@14
|
54 This Software Development Kit contains the following:
|
cannam@14
|
55
|
cannam@14
|
56 * vamp/vamp.h
|
cannam@14
|
57
|
cannam@14
|
58 The formal C language plugin API for Vamp plugins.
|
cannam@14
|
59
|
cannam@14
|
60 A Vamp plugin is a dynamic library (.so, .dll or .dylib depending on
|
cannam@14
|
61 platform) exposing one C-linkage entry point (vampGetPluginDescriptor)
|
cannam@14
|
62 which returns data defined in the rest of this C header.
|
cannam@14
|
63
|
cannam@14
|
64 Although this is the official API for Vamp, we don't recommend that
|
cannam@14
|
65 you program directly to it. The C++ abstraction in the SDK directory
|
cannam@18
|
66 (below) is likely to be preferable for most purposes, and is better
|
cannam@14
|
67 documented.
|
cannam@14
|
68
|
cannam@14
|
69 * vamp-sdk
|
cannam@14
|
70
|
cannam@14
|
71 C++ classes for straightforwardly implementing Vamp plugins and hosts.
|
cannam@18
|
72
|
cannam@18
|
73 Plugins should subclass Vamp::Plugin and then use a
|
cannam@18
|
74 Vamp::PluginAdapter to expose the correct C API for the plugin. Read
|
cannam@18
|
75 vamp-sdk/PluginBase.h and Plugin.h for code documentation.
|
cannam@18
|
76
|
cannam@14
|
77 Hosts may use the Vamp::PluginHostAdapter to convert the loaded
|
cannam@14
|
78 plugin's C API back into a Vamp::Plugin object.
|
cannam@14
|
79
|
cannam@14
|
80 * examples
|
cannam@14
|
81
|
cannam@14
|
82 Example plugins implemented using the C++ classes. ZeroCrossing
|
cannam@14
|
83 calculates the positions and density of zero-crossing points in an
|
cannam@35
|
84 audio waveform. SpectralCentroid calculates the centre of gravity of
|
cannam@14
|
85 the frequency domain representation of each block of audio.
|
cannam@35
|
86 PercussionOnsetDetector estimates the locations of percussive onsets
|
cannam@35
|
87 using a simple method described in "Drum Source Separation using
|
cannam@35
|
88 Percussive Feature Detection and Spectral Modulation" by Dan Barry,
|
cannam@35
|
89 Derry Fitzgerald, Eugene Coyle and Bob Lawlor, ISSC 2005.
|
cannam@14
|
90
|
cannam@14
|
91 * host
|
cannam@14
|
92
|
cannam@16
|
93 A simple command-line Vamp host, capable of loading a plugin and using
|
cannam@16
|
94 it to process a complete audio file, with its default parameters.
|
cannam@16
|
95 Requires libsndfile.
|
cannam@14
|
96
|
cannam@32
|
97 The Vamp API doesn't officially specify how to load plugin libraries
|
cannam@32
|
98 or where to find them. However, good practice for a host is to use
|
cannam@32
|
99 the Vamp path returned by Vamp::PluginHostAdapter::getPluginPath() and
|
cannam@32
|
100 search each directory in this path for .so, .dll or .dylib files
|
cannam@32
|
101 (depending on platform), loading each one and testing for the
|
cannam@32
|
102 vampGetPluginDescriptor function to enumerate the plugins in this
|
cannam@32
|
103 object. The example host has some code that may help.
|
cannam@32
|
104
|
cannam@14
|
105
|
cannam@14
|
106 Building the SDK
|
cannam@14
|
107 ================
|
cannam@14
|
108
|
cannam@18
|
109 Edit the Makefile to suit your platform according to the comments in
|
cannam@18
|
110 it. Type "make".
|
cannam@14
|
111
|
cannam@14
|
112
|
cannam@14
|
113 Licensing
|
cannam@14
|
114 =========
|
cannam@14
|
115
|
cannam@18
|
116 This plugin SDK is freely redistributable under a "new-style BSD"
|
cannam@18
|
117 licence. See the file COPYING for more details. In short, you are
|
cannam@18
|
118 permitted to reuse the SDK and example plugins in any commercial or
|
cannam@18
|
119 non-commercial, proprietary or open-source application or plugin under
|
cannam@18
|
120 almost any conditions provided you retain the original copyright note.
|
cannam@14
|
121
|
cannam@14
|
122
|
cannam@14
|
123 See Also
|
cannam@14
|
124 ========
|
cannam@14
|
125
|
cannam@14
|
126 Sonic Visualiser, an interactive open-source graphical audio
|
cannam@14
|
127 inspection, analysis and visualisation tool supporting Vamp plugins.
|
cannam@35
|
128 http://www.sonicvisualiser.org/
|
cannam@14
|
129
|
cannam@14
|
130
|
cannam@14
|
131 Chris Cannam
|
cannam@14
|
132 Centre for Digital Music
|
cannam@14
|
133 Queen Mary, University of London
|