annotate README @ 27:44ec6c633113

* Permit plugins to vary the number of values per output based on the number of channels, step size, and block size passed to initialise().
author cannam
date Wed, 10 May 2006 16:30:39 +0000
parents b4043af42278
children 0e7aa8fabd76
rev   line source
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