Mercurial > hg > sv-dependency-builds
comparison src/vamp-plugin-sdk-2.5/README @ 23:619f715526df sv_v2.1
Update Vamp plugin SDK to 2.5
author | Chris Cannam |
---|---|
date | Thu, 09 May 2013 10:52:46 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
22:b07fe9e906dc | 23:619f715526df |
---|---|
1 | |
2 Vamp | |
3 ==== | |
4 | |
5 An API for audio analysis and feature extraction plugins. | |
6 | |
7 http://www.vamp-plugins.org/ | |
8 | |
9 Vamp is an API for C and C++ plugins that process sampled audio data | |
10 to produce descriptive output (measurements or semantic observations). | |
11 | |
12 This is version 2.5 of the Vamp plugin Software Development Kit. | |
13 | |
14 Plugins and hosts built with this SDK are binary compatible with those | |
15 built using version 1.0 of the SDK, with certain restrictions. See | |
16 the file README.compat for more details. | |
17 | |
18 See the file CHANGELOG for a list of the changes in this release. | |
19 | |
20 A documentation guide to writing plugins using the Vamp SDK can be | |
21 found at http://www.vamp-plugins.org/guide.pdf . | |
22 | |
23 | |
24 Compiling and Installing the SDK and Examples | |
25 ============================================= | |
26 | |
27 This SDK is intended for use on Windows, OS/X, Linux, and other POSIX | |
28 and GNU platforms. | |
29 | |
30 Please see the platform-specific README file (README.msvc, README.osx, | |
31 README.linux) in the build/ directory for details about how to compile | |
32 and install the SDK, how to build plugin libraries using it, and how | |
33 to install the example plugins so you can use them in a host. | |
34 | |
35 | |
36 What's In This SDK | |
37 ================== | |
38 | |
39 This SDK contains the following: | |
40 | |
41 | |
42 vamp/vamp.h | |
43 ----------- | |
44 | |
45 The formal C language plugin API for Vamp plugins. | |
46 | |
47 A Vamp plugin is a dynamic library (.so, .dll or .dylib depending on | |
48 platform) exposing one C-linkage entry point (vampGetPluginDescriptor) | |
49 which returns data defined in the rest of this C header. | |
50 | |
51 Although the C API is the official API for Vamp, we don't recommend | |
52 that you program directly to it. The C++ abstractions found in the | |
53 vamp-sdk and vamp-hostsdk directories (below) are preferable for most | |
54 purposes and are more thoroughly documented. | |
55 | |
56 | |
57 vamp-sdk | |
58 -------- | |
59 | |
60 C++ classes for implementing Vamp plugins. | |
61 | |
62 Plugins should subclass Vamp::Plugin and then use Vamp::PluginAdapter | |
63 to expose the correct C API for the plugin. Plugin authors should | |
64 read vamp-sdk/PluginBase.h and Plugin.h for code documentation. | |
65 | |
66 See "examples" below for details of the example plugins in the SDK, | |
67 from which you are welcome to take code and inspiration. | |
68 | |
69 Plugins should link with -lvamp-sdk. | |
70 | |
71 | |
72 vamp-hostsdk | |
73 ------------ | |
74 | |
75 C++ classes for implementing Vamp hosts. | |
76 | |
77 Hosts will normally use a Vamp::PluginHostAdapter to convert each | |
78 plugin's exposed C API back into a useful Vamp::Plugin C++ object. | |
79 | |
80 The Vamp::HostExt namespace contains several additional C++ classes to | |
81 do this work for them, and make the host's life easier: | |
82 | |
83 - Vamp::HostExt::PluginLoader provides a very easy interface for a | |
84 host to discover, load, and find out category information about the | |
85 available plugins. Most Vamp hosts will probably want to use this | |
86 class. | |
87 | |
88 - Vamp::HostExt::PluginInputDomainAdapter provides a simple means for | |
89 hosts to handle plugins that want frequency-domain input, without | |
90 having to convert the input themselves. | |
91 | |
92 - Vamp::HostExt::PluginChannelAdapter provides a simple means for | |
93 hosts to use plugins that do not necessarily support the same number | |
94 of audio channels as they have available, without having to apply a | |
95 channel management / mixdown policy themselves. | |
96 | |
97 - Vamp::HostExt::PluginBufferingAdapter provides a means for hosts to | |
98 avoid having to negotiate the input step and block size, instead | |
99 permitting the host to use any block size they desire (and a step | |
100 size equal to it). This is particularly useful for "streaming" hosts | |
101 that cannot seek backwards in the input audio stream and so would | |
102 otherwise need to implement an additional buffer to support step | |
103 sizes smaller than the block size. | |
104 | |
105 - Vamp::HostExt::PluginSummarisingAdapter provides summarisation | |
106 methods such as mean and median averages of output features, for use | |
107 in any context where an available plugin produces individual values | |
108 but the result that is actually needed is some sort of aggregate. | |
109 | |
110 The PluginLoader class can also use the input domain, channel, and | |
111 buffering adapters automatically to make these conversions transparent | |
112 to the host if required. | |
113 | |
114 Host authors should also refer to the example host code in the host | |
115 directory of the SDK. | |
116 | |
117 Hosts should link with -lvamp-hostsdk. | |
118 | |
119 | |
120 examples | |
121 -------- | |
122 | |
123 Example plugins implemented using the C++ classes. | |
124 | |
125 These plugins are intended to be useful examples you can draw code | |
126 from in order to provide the basic shape and structure of a Vamp | |
127 plugin. They are also intended to be correct and useful, if simple. | |
128 | |
129 - ZeroCrossing calculates the positions and density of zero-crossing | |
130 points in an audio waveform. | |
131 | |
132 - SpectralCentroid calculates the centre of gravity of the frequency | |
133 domain representation of each block of audio. | |
134 | |
135 - PowerSpectrum calculates a power spectrum from the input audio. | |
136 Actually, it doesn't do any work except calculating power from a | |
137 cartesian complex FFT output. The work of calculating this frequency | |
138 domain output is done for it by the host or host SDK; the plugin just | |
139 needs to declare that it wants frequency domain input. This is the | |
140 simplest of the example plugins. | |
141 | |
142 - AmplitudeFollower is a simple implementation of SuperCollider's | |
143 amplitude-follower algorithm. | |
144 | |
145 - PercussionOnsetDetector estimates the locations of percussive | |
146 onsets using a simple method described in "Drum Source Separation | |
147 using Percussive Feature Detection and Spectral Modulation" by Dan | |
148 Barry, Derry Fitzgerald, Eugene Coyle and Bob Lawlor, ISSC 2005. | |
149 | |
150 - FixedTempoEstimator calculates a single beats-per-minute value | |
151 which is an estimate of the tempo of a piece of music that is assumed | |
152 to be of fixed tempo, using autocorrelation of a frequency domain | |
153 energy rise metric. It has several outputs that return intermediate | |
154 results used in the calculation, and may be a useful example of a | |
155 plugin having several outputs with varying feature structures. | |
156 | |
157 | |
158 skeleton | |
159 -------- | |
160 | |
161 Skeleton code that could be used as a template for your new plugin | |
162 implementation. | |
163 | |
164 | |
165 host | |
166 ---- | |
167 | |
168 A simple command-line Vamp host, capable of loading a plugin and using | |
169 it to process a complete audio file, with its default parameters. | |
170 | |
171 This host also contains a number of options for listing the installed | |
172 plugins and their properties in various formats. For that reason, it | |
173 isn't really as simple as one might hope. The core of the code is | |
174 still reasonably straightforward, however. | |
175 | |
176 | |
177 Plugin Lookup and Categorisation | |
178 ================================ | |
179 | |
180 The Vamp API does not officially specify how to load plugin libraries | |
181 or where to find them. However, the SDK does include a function | |
182 (Vamp::PluginHostAdapter::getPluginPath()) that returns a recommended | |
183 directory search path that hosts may use for plugin libraries, and a | |
184 class (Vamp::HostExt::PluginLoader) that implements a sensible | |
185 cross-platform lookup policy using this path. We recommend using this | |
186 class in your host unless you have a good reason not to want to. This | |
187 implementation also permits the user to set the environment variable | |
188 VAMP_PATH to override the default path if desired. | |
189 | |
190 The policy used by Vamp::HostExt::PluginLoader -- and our | |
191 recommendation for any host -- is to search each directory in the path | |
192 returned by getPluginPath for .DLL (on Windows), .so (on Linux, | |
193 Solaris, BSD etc) or .dylib (on OS/X) files, then to load each one and | |
194 perform a dynamic name lookup on the vampGetPluginDescriptor function | |
195 to enumerate the plugins in the library. This operation will | |
196 necessarily be system-dependent. | |
197 | |
198 Vamp also has an informal convention for sorting plugins into | |
199 functional categories. In addition to the library file itself, a | |
200 plugin library may install a category file with the same name as the | |
201 library but .cat extension. The existence and format of this file are | |
202 not specified by the Vamp API, but by convention the file may contain | |
203 lines of the format | |
204 | |
205 vamp:pluginlibrary:pluginname::General Category > Specific Category | |
206 | |
207 which a host may read and use to assign plugins a location within a | |
208 category tree for display to the user. The expectation is that | |
209 advanced users may also choose to set up their own preferred category | |
210 trees, which is why this information is not queried as part of the | |
211 Vamp plugin's API itself. The Vamp::HostExt::PluginLoader class also | |
212 provides support for plugin category lookup using this scheme. | |
213 | |
214 | |
215 Licensing | |
216 ========= | |
217 | |
218 This plugin SDK is freely redistributable under a "new-style BSD" | |
219 licence. See the file COPYING for more details. In short, you may | |
220 modify and redistribute the SDK and example plugins within any | |
221 commercial or non-commercial, proprietary or open-source plugin or | |
222 application under almost any conditions, with no obligation to provide | |
223 source code, provided you retain the original copyright note. | |
224 | |
225 | |
226 See Also | |
227 ======== | |
228 | |
229 Sonic Visualiser, an interactive open-source graphical audio | |
230 inspection, analysis and visualisation tool supporting Vamp plugins. | |
231 http://www.sonicvisualiser.org/ | |
232 | |
233 | |
234 Authors | |
235 ======= | |
236 | |
237 Vamp and the Vamp SDK were designed and made at the Centre for Digital | |
238 Music at Queen Mary, University of London. | |
239 | |
240 The SDK was written by Chris Cannam, copyright (c) 2005-2009 | |
241 Chris Cannam and QMUL. | |
242 | |
243 Mark Sandler and Christian Landone provided ideas and direction, and | |
244 Mark Levy, Dan Stowell, Martin Gasser and Craig Sapp provided testing | |
245 and other input for the 1.0 API and SDK. The API also uses some ideas | |
246 from prior plugin systems, notably DSSI (http://dssi.sourceforge.net) | |
247 and FEAPI (http://feapi.sourceforge.net). | |
248 |