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@14
|
8 to produce descriptive output, such as measurements of particular
|
cannam@14
|
9 features of the audio or semantic output based on them.
|
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@14
|
28 the host the permitted range of processing block sizes, and can
|
cannam@14
|
29 request input data in the frequency domain instead of the time
|
cannam@14
|
30 domain.
|
cannam@14
|
31
|
cannam@14
|
32 * A Vamp plugin is configured once before each processing run, and
|
cannam@14
|
33 receives no further parameter changes during use -- unlike real
|
cannam@14
|
34 time plugin APIs in which the input parameters may change at any
|
cannam@14
|
35 time. This also means that fundamental properties such as the
|
cannam@14
|
36 number of values per output or the preferred processing block
|
cannam@14
|
37 size can depend on the input parameters.
|
cannam@14
|
38
|
cannam@14
|
39
|
cannam@14
|
40 About this SDK
|
cannam@14
|
41 ==============
|
cannam@14
|
42
|
cannam@14
|
43 This Software Development Kit contains the following:
|
cannam@14
|
44
|
cannam@14
|
45 * vamp/vamp.h
|
cannam@14
|
46
|
cannam@14
|
47 The formal C language plugin API for Vamp plugins.
|
cannam@14
|
48
|
cannam@14
|
49 A Vamp plugin is a dynamic library (.so, .dll or .dylib depending on
|
cannam@14
|
50 platform) exposing one C-linkage entry point (vampGetPluginDescriptor)
|
cannam@14
|
51 which returns data defined in the rest of this C header.
|
cannam@14
|
52
|
cannam@14
|
53 Although this is the official API for Vamp, we don't recommend that
|
cannam@14
|
54 you program directly to it. The C++ abstraction in the SDK directory
|
cannam@14
|
55 (below) is likely to be preferable for most purposes and also better
|
cannam@14
|
56 documented.
|
cannam@14
|
57
|
cannam@14
|
58 * vamp-sdk
|
cannam@14
|
59
|
cannam@14
|
60 C++ classes for straightforwardly implementing Vamp plugins and hosts.
|
cannam@14
|
61 Plugins should subclass Vamp::Plugin (in vamp-sdk/Plugin.h) and then
|
cannam@14
|
62 use a Vamp::PluginAdapter to expose the correct C API for the plugin.
|
cannam@14
|
63 Hosts may use the Vamp::PluginHostAdapter to convert the loaded
|
cannam@14
|
64 plugin's C API back into a Vamp::Plugin object.
|
cannam@14
|
65
|
cannam@14
|
66 * examples
|
cannam@14
|
67
|
cannam@14
|
68 Example plugins implemented using the C++ classes. ZeroCrossing
|
cannam@14
|
69 calculates the positions and density of zero-crossing points in an
|
cannam@14
|
70 audio waveform; SpectralCentroid calculates the centre of gravity of
|
cannam@14
|
71 the frequency domain representation of each block of audio.
|
cannam@14
|
72
|
cannam@14
|
73 * host
|
cannam@14
|
74
|
cannam@16
|
75 A simple command-line Vamp host, capable of loading a plugin and using
|
cannam@16
|
76 it to process a complete audio file, with its default parameters.
|
cannam@16
|
77 Requires libsndfile.
|
cannam@14
|
78
|
cannam@14
|
79
|
cannam@14
|
80 Building the SDK
|
cannam@14
|
81 ================
|
cannam@14
|
82
|
cannam@14
|
83 Edit the Makefile for your platform according to the comments in it.
|
cannam@14
|
84 Type "make".
|
cannam@14
|
85
|
cannam@14
|
86
|
cannam@14
|
87 Licensing
|
cannam@14
|
88 =========
|
cannam@14
|
89
|
cannam@14
|
90 This plugin SDK is freely redistributable under the "new BSD" licence.
|
cannam@14
|
91 See the file COPYING for more details. In short, you are permitted to
|
cannam@14
|
92 reuse the SDK and example plugins in any commercial or non-commercial,
|
cannam@14
|
93 proprietary or open-source application under almost any conditions.
|
cannam@14
|
94
|
cannam@14
|
95
|
cannam@14
|
96 See Also
|
cannam@14
|
97 ========
|
cannam@14
|
98
|
cannam@14
|
99 Sonic Visualiser, an interactive open-source graphical audio
|
cannam@14
|
100 inspection, analysis and visualisation tool supporting Vamp plugins.
|
cannam@14
|
101
|
cannam@14
|
102
|
cannam@14
|
103 Chris Cannam
|
cannam@14
|
104 Centre for Digital Music
|
cannam@14
|
105 Queen Mary, University of London
|