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