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@14
|
44
|
cannam@14
|
45 About this SDK
|
cannam@14
|
46 ==============
|
cannam@14
|
47
|
cannam@14
|
48 This Software Development Kit contains the following:
|
cannam@14
|
49
|
cannam@14
|
50 * vamp/vamp.h
|
cannam@14
|
51
|
cannam@14
|
52 The formal C language plugin API for Vamp plugins.
|
cannam@14
|
53
|
cannam@14
|
54 A Vamp plugin is a dynamic library (.so, .dll or .dylib depending on
|
cannam@14
|
55 platform) exposing one C-linkage entry point (vampGetPluginDescriptor)
|
cannam@14
|
56 which returns data defined in the rest of this C header.
|
cannam@14
|
57
|
cannam@14
|
58 Although this is the official API for Vamp, we don't recommend that
|
cannam@14
|
59 you program directly to it. The C++ abstraction in the SDK directory
|
cannam@18
|
60 (below) is likely to be preferable for most purposes, and is better
|
cannam@14
|
61 documented.
|
cannam@14
|
62
|
cannam@14
|
63 * vamp-sdk
|
cannam@14
|
64
|
cannam@14
|
65 C++ classes for straightforwardly implementing Vamp plugins and hosts.
|
cannam@18
|
66
|
cannam@18
|
67 Plugins should subclass Vamp::Plugin and then use a
|
cannam@18
|
68 Vamp::PluginAdapter to expose the correct C API for the plugin. Read
|
cannam@18
|
69 vamp-sdk/PluginBase.h and Plugin.h for code documentation.
|
cannam@18
|
70
|
cannam@14
|
71 Hosts may use the Vamp::PluginHostAdapter to convert the loaded
|
cannam@14
|
72 plugin's C API back into a Vamp::Plugin object.
|
cannam@14
|
73
|
cannam@14
|
74 * examples
|
cannam@14
|
75
|
cannam@14
|
76 Example plugins implemented using the C++ classes. ZeroCrossing
|
cannam@14
|
77 calculates the positions and density of zero-crossing points in an
|
cannam@14
|
78 audio waveform; SpectralCentroid calculates the centre of gravity of
|
cannam@14
|
79 the frequency domain representation of each block of audio.
|
cannam@14
|
80
|
cannam@14
|
81 * host
|
cannam@14
|
82
|
cannam@16
|
83 A simple command-line Vamp host, capable of loading a plugin and using
|
cannam@16
|
84 it to process a complete audio file, with its default parameters.
|
cannam@16
|
85 Requires libsndfile.
|
cannam@14
|
86
|
cannam@14
|
87
|
cannam@14
|
88 Building the SDK
|
cannam@14
|
89 ================
|
cannam@14
|
90
|
cannam@18
|
91 Edit the Makefile to suit your platform according to the comments in
|
cannam@18
|
92 it. Type "make".
|
cannam@14
|
93
|
cannam@14
|
94
|
cannam@14
|
95 Licensing
|
cannam@14
|
96 =========
|
cannam@14
|
97
|
cannam@18
|
98 This plugin SDK is freely redistributable under a "new-style BSD"
|
cannam@18
|
99 licence. See the file COPYING for more details. In short, you are
|
cannam@18
|
100 permitted to reuse the SDK and example plugins in any commercial or
|
cannam@18
|
101 non-commercial, proprietary or open-source application or plugin under
|
cannam@18
|
102 almost any conditions provided you retain the original copyright note.
|
cannam@14
|
103
|
cannam@14
|
104
|
cannam@14
|
105 See Also
|
cannam@14
|
106 ========
|
cannam@14
|
107
|
cannam@14
|
108 Sonic Visualiser, an interactive open-source graphical audio
|
cannam@14
|
109 inspection, analysis and visualisation tool supporting Vamp plugins.
|
cannam@14
|
110
|
cannam@14
|
111
|
cannam@14
|
112 Chris Cannam
|
cannam@14
|
113 Centre for Digital Music
|
cannam@14
|
114 Queen Mary, University of London
|