annotate README @ 31:0e7aa8fabd76

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