comparison README @ 239:cc467e52da4c

* Add platform README files
author cannam
date Mon, 10 Nov 2008 12:39:19 +0000
parents 3ad28b1e2150
children 7f3a806ed1df
comparison
equal deleted inserted replaced
238:4b5a3031cd08 239:cc467e52da4c
7 http://www.vamp-plugins.org/ 7 http://www.vamp-plugins.org/
8 8
9 Vamp is an API for C and C++ plugins that process sampled audio data 9 Vamp is an API for C and C++ plugins that process sampled audio data
10 to produce descriptive output (measurements or semantic observations). 10 to produce descriptive output (measurements or semantic observations).
11 11
12 The principal differences between Vamp and a real-time audio
13 processing plugin system such as VST are:
14
15 * Vamp plugins may output complex multidimensional data with labels.
16 As a consequence, they are likely to work best when the output
17 data has a much lower sampling rate than the input. (This also
18 means it is usually desirable to implement them in C++ using the
19 high-level base class provided rather than use the raw C API.)
20
21 * While Vamp plugins receive data block-by-block, they are not
22 required to return output immediately on receiving the input.
23 A Vamp plugin may be non-causal, preferring to store up data
24 based on its input until the end of a processing run and then
25 return all results at once.
26
27 * Vamp plugins have more control over their inputs than a typical
28 real-time processing plugin. For example, they can indicate to
29 the host their preferred processing block and step sizes, and these
30 may differ.
31
32 * Vamp plugins may ask to receive data in the frequency domain
33 instead of the time domain. The host takes the responsibility
34 for converting the input data using an FFT of windowed frames.
35 This simplifies plugins that do straightforward frequency-domain
36 processing and permits the host to cache frequency-domain data
37 when possible.
38
39 * A Vamp plugin is configured once before each processing run, and
40 receives no further parameter changes during use -- unlike real-
41 time plugin APIs in which the input parameters may change at any
42 time. This also means that fundamental properties such as the
43 number of values per output or the preferred processing block
44 size may depend on the input parameters.
45
46 * Vamp plugins do not have to be able to run in real time.
47
48
49 About this SDK
50 ==============
51
52 This is version 2.0 of the Vamp plugin Software Development Kit. 12 This is version 2.0 of the Vamp plugin Software Development Kit.
53
54 Plugins and hosts built with this SDK are binary compatible with those 13 Plugins and hosts built with this SDK are binary compatible with those
55 built using version 1.0 of the SDK. 14 built using version 1.0 of the SDK. See CHANGELOG for a list of the
15 changes in this release.
56 16
57 A documentation guide to writing plugins using the Vamp SDK can be 17 A documentation guide to writing plugins using the Vamp SDK can be
58 found at http://www.vamp-plugins.org/guide.pdf . 18 found at http://www.vamp-plugins.org/guide.pdf .
59 19
20
21 Compiling and Installing the SDK and Examples
22 =============================================
23
24 This SDK is intended for use on Windows, OS/X, Linux, and other POSIX
25 and GNU platforms.
26
27 Please see the platform-specific README file (README.msvc, README.osx,
28 README.linux) in the build/ directory for details about how to compile
29 and install the SDK, how to build plugin libraries using it, and how
30 to install the example plugins so you can use them in a host.
31
32
33 What's In This SDK
34 ==================
35
60 This SDK contains the following: 36 This SDK contains the following:
61 37
62 * vamp/vamp.h 38
39 vamp/vamp.h
40 -----------
63 41
64 The formal C language plugin API for Vamp plugins. 42 The formal C language plugin API for Vamp plugins.
65 43
66 A Vamp plugin is a dynamic library (.so, .dll or .dylib depending on 44 A Vamp plugin is a dynamic library (.so, .dll or .dylib depending on
67 platform) exposing one C-linkage entry point (vampGetPluginDescriptor) 45 platform) exposing one C-linkage entry point (vampGetPluginDescriptor)
68 which returns data defined in the rest of this C header. 46 which returns data defined in the rest of this C header.
69 47
70 Although the C API is the official API for Vamp, we don't recommend 48 Although the C API is the official API for Vamp, we don't recommend
71 that you program directly to it. The C++ abstraction found in the 49 that you program directly to it. The C++ abstractions found in the
72 vamp-sdk directory (below) is preferable for most purposes and is 50 vamp-sdk and vamp-hostsdk directories (below) are preferable for most
73 more thoroughly documented. 51 purposes and are more thoroughly documented.
74 52
75 * vamp-sdk 53
54 vamp-sdk
55 --------
76 56
77 C++ classes for implementing Vamp plugins. 57 C++ classes for implementing Vamp plugins.
78 58
79 Plugins should subclass Vamp::Plugin and then use Vamp::PluginAdapter 59 Plugins should subclass Vamp::Plugin and then use Vamp::PluginAdapter
80 to expose the correct C API for the plugin. Plugin authors should 60 to expose the correct C API for the plugin. Plugin authors should
81 read vamp-sdk/PluginBase.h and Plugin.h for code documentation, and 61 read vamp-sdk/PluginBase.h and Plugin.h for code documentation.
82 refer to the example plugin code in the examples directory. Plugins 62
83 should link with -lvamp-sdk. 63 See "examples" below for details of the example plugins in the SDK,
84 64 from which you are welcome to take code and inspiration.
85 * vamp-hostsdk 65
66 Plugins should link with -lvamp-sdk.
67
68
69 vamp-hostsdk
70 ------------
86 71
87 C++ classes for implementing Vamp hosts. 72 C++ classes for implementing Vamp hosts.
88 73
89 Hosts can use the Vamp::PluginHostAdapter to convert the loaded 74 Hosts will normally use a Vamp::PluginHostAdapter to convert each
90 plugin's C API back into a Vamp::Plugin object. 75 plugin's exposed C API back into a useful Vamp::Plugin C++ object.
91
92 Host authors should refer to the example host code in the host
93 directory. Hosts should link with -lvamp-hostsdk.
94 76
95 The Vamp::HostExt namespace contains several additional C++ classes to 77 The Vamp::HostExt namespace contains several additional C++ classes to
96 make a host's life easier: 78 do this work for them, and make the host's life easier:
97 79
98 Vamp::HostExt::PluginLoader provides a very easy interface for a host 80 - Vamp::HostExt::PluginLoader provides a very easy interface for a
99 to discover, load, and find out category information about the 81 host to discover, load, and find out category information about the
100 available plugins. Most "casual" Vamp hosts will probably want to use 82 available plugins. Most Vamp hosts will probably want to use this
101 this class. 83 class.
102 84
103 Vamp::HostExt::PluginInputDomainAdapter provides a means for hosts to 85 - Vamp::HostExt::PluginInputDomainAdapter provides a simple means for
104 handle plugins that expect frequency-domain input, without having to 86 hosts to handle plugins that want frequency-domain input, without
105 convert the input themselves. 87 having to convert the input themselves.
106 88
107 Vamp::HostExt::PluginChannelAdapter provides a means for hosts to use 89 - Vamp::HostExt::PluginChannelAdapter provides a simple means for
108 plugins that do not necessarily support the same number of audio 90 hosts to use plugins that do not necessarily support the same number
109 channels as they have available, without having to worry about 91 of audio channels as they have available, without having to apply a
110 applying a channel management / mixdown policy themselves. 92 channel management / mixdown policy themselves.
111 93
112 Vamp::HostExt::PluginBufferingAdapter provides a means for hosts to 94 - Vamp::HostExt::PluginBufferingAdapter provides a means for hosts to
113 avoid having to negotiate the input step and block size, instead 95 avoid having to negotiate the input step and block size, instead
114 permitting the host to use any block size they desire (and a step size 96 permitting the host to use any block size they desire (and a step
115 equal to it). This is particularly useful for "streaming" hosts that 97 size equal to it). This is particularly useful for "streaming" hosts
116 cannot seek backwards in the input audio stream and so would otherwise 98 that cannot seek backwards in the input audio stream and so would
117 need to implement an additional buffer to support step sizes smaller 99 otherwise need to implement an additional buffer to support step
118 than the block size. 100 sizes smaller than the block size.
119 101
120 The PluginLoader class can also use the input domain and channel 102 - Vamp::HostExt::PluginSummarisingAdapter provides summarisation
121 adapters automatically to make the entire conversion process 103 methods such as mean and median averages of output features, for use
122 transparent to the host if required. 104 in any context where an available plugin produces individual values
123 105 but the result that is actually needed is some sort of aggregate.
124 * examples 106
125 107 The PluginLoader class can also use the input domain, channel, and
126 Example plugins implemented using the C++ classes. ZeroCrossing 108 buffering adapters automatically to make these conversions transparent
127 calculates the positions and density of zero-crossing points in an 109 to the host if required.
128 audio waveform. SpectralCentroid calculates the centre of gravity of 110
129 the frequency domain representation of each block of audio. 111 Host authors should also refer to the example host code in the host
130 AmplitudeFollower tracks the amplitude of a signal based on a method 112 directory of the SDK.
131 from the SuperCollider real-time audio system. 113
132 PercussionOnsetDetector estimates the locations of percussive onsets 114 Hosts should link with -lvamp-hostsdk.
133 using a simple method described in "Drum Source Separation using 115
134 Percussive Feature Detection and Spectral Modulation" by Dan Barry, 116
135 Derry Fitzgerald, Eugene Coyle and Bob Lawlor, ISSC 2005. 117 examples
136 118 --------
137 * host 119
120 Example plugins implemented using the C++ classes.
121
122 These plugins are intended to be useful examples you can draw code
123 from in order to provide the basic shape and structure of a Vamp
124 plugin. They are also intended to be correct and useful, if simple.
125
126 - ZeroCrossing calculates the positions and density of zero-crossing
127 points in an audio waveform.
128
129 - SpectralCentroid calculates the centre of gravity of the frequency
130 domain representation of each block of audio.
131
132 - AmplitudeFollower is a simple implementation of SuperCollider's
133 amplitude-follower algorithm.
134
135 - PercussionOnsetDetector estimates the locations of percussive
136 onsets using a simple method described in "Drum Source Separation
137 using Percussive Feature Detection and Spectral Modulation" by Dan
138 Barry, Derry Fitzgerald, Eugene Coyle and Bob Lawlor, ISSC 2005.
139
140 - FixedTempoEstimator calculates a single beats-per-minute value
141 which is an estimate of the tempo of a piece of music that is assumed
142 to be of fixed tempo, using autocorrelation of a frequency domain
143 energy rise metric. It has several outputs that return intermediate
144 results used in the calculation, and may be a useful example of a
145 plugin having several outputs with varying feature structures.
146
147
148 host
149 ----
138 150
139 A simple command-line Vamp host, capable of loading a plugin and using 151 A simple command-line Vamp host, capable of loading a plugin and using
140 it to process a complete audio file, with its default parameters. 152 it to process a complete audio file, with its default parameters.
141 Requires libsndfile (http://www.mega-nerd.com/libsndfile/).
142
143 If you don't have libsndfile, you may want to edit the Makefile to
144 change the default build target from "all" to "sdk", so as to compile
145 only the SDK and not the host.
146 153
147 154
148 Plugin Lookup and Categorisation 155 Plugin Lookup and Categorisation
149 ================================ 156 ================================
150 157
181 trees, which is why this information is not queried as part of the 188 trees, which is why this information is not queried as part of the
182 Vamp plugin's API itself. The Vamp::HostExt::PluginLoader class also 189 Vamp plugin's API itself. The Vamp::HostExt::PluginLoader class also
183 provides support for plugin category lookup using this scheme. 190 provides support for plugin category lookup using this scheme.
184 191
185 192
186 Compiling the SDK and Examples
187 ==============================
188
189 This SDK is intended for use on Windows, OS/X, Linux, and other POSIX
190 platforms.
191
192 * Windows
193
194 Two Visual C++ project files are included:
195
196 VampPluginSDK.vcproj -- builds the SDK into a single static
197 library, but does not build the example plugins or host
198
199 VampExamplePlugins.vcproj -- builds the example plugins DLL, but
200 does not build the library or host
201
202 Alternatively, when using Visual Studio or another IDE to build a
203 plugin or host using the SDK, you may prefer to simply add the .h and
204 .cpp files in the vamp-sdk and vamp-sdk/hostext directories to your
205 existing project.
206
207 As the command-line host has additional library dependencies (namely
208 libsndfile), no pre-packaged project is included to build it.
209
210 When using Visual C++ to build plugins, you will need to ensure that
211 the plugin entry point (vampGetPluginDescriptor) is exported from the
212 DLL so that the plugins can be loaded. One way to achieve this is to
213 add the linker option /EXPORT:vampGetPluginDescriptor to your project.
214 The included VampExamplePlugins.vcproj does this.
215
216 If you are using a Cygwin or MinGW GNU toolchain, use the included
217 Makefile (see Linux and other POSIX platforms below).
218
219 * OS/X
220
221 Run "make -f Makefile.osx" to build the SDK, example plugins, and
222 command-line host.
223
224 Note that the host requires that you have libsndfile
225 (http://www.mega-nerd.com/libsndfile/) installed. To build only the
226 SDK and examples, "make -f Makefile.osx sdk examples".
227
228 If you are using an IDE, you may prefer to simply add the .h and .cpp
229 files in the vamp-sdk and vamp-sdk/hostext directories to your
230 existing project.
231
232 * Linux and other Unixesque platforms
233
234 To build the SDK, example plugins, and command-line host, edit the
235 Makefile to suit your platform according to the comments in it, then
236 run "make".
237
238 Note that the host requires that you have libsndfile
239 (http://www.mega-nerd.com/libsndfile/) installed. To build only the
240 SDK and examples, edit the Makefile then run "make sdk examples".
241
242
243 Installing the Example Plugins
244 ==============================
245
246 Installing the example plugins so that they can be found by other Vamp
247 hosts depends on your platform:
248
249 * Windows: copy the files
250 examples/vamp-example-plugins.dll
251 examples/vamp-example-plugins.cat
252 to
253 C:\Program Files\Vamp Plugins
254
255 * Linux: copy the files
256 examples/vamp-example-plugins.so
257 examples/vamp-example-plugins.cat
258 to
259 /usr/local/lib/vamp/
260
261 * OS/X: copy the files
262 examples/vamp-example-plugins.dylib
263 examples/vamp-example-plugins.cat
264 to
265 /Library/Audio/Plug-Ins/Vamp
266
267
268 Licensing 193 Licensing
269 ========= 194 =========
270 195
271 This plugin SDK is freely redistributable under a "new-style BSD" 196 This plugin SDK is freely redistributable under a "new-style BSD"
272 licence. See the file COPYING for more details. In short, you may 197 licence. See the file COPYING for more details. In short, you may