annotate src/vamp-plugin-sdk-2.4/src/doc-overview @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents efb4b8187266
children
rev   line source
cannam@97 1
cannam@97 2 /** \mainpage Vamp Plugin SDK
cannam@97 3
cannam@97 4 \section about About Vamp
cannam@97 5
cannam@97 6 Vamp is an API for C and C++ plugins that process sampled audio data
cannam@97 7 to produce descriptive output (measurements or semantic observations).
cannam@97 8 Find more information at http://www.vamp-plugins.org/ .
cannam@97 9
cannam@97 10 Although the official API for Vamp plugins is defined in C for maximum
cannam@97 11 binary compatibility, we strongly recommend using the provided C++
cannam@97 12 classes in the SDK to implement your own plugins and hosts.
cannam@97 13
cannam@97 14 \section plugins For Plugins
cannam@97 15
cannam@97 16 Plugins should subclass Vamp::Plugin, and then use a
cannam@97 17 Vamp::PluginAdapter to expose the correct C API for the plugin. Read
cannam@97 18 the documentation for Vamp::PluginBase and Vamp::Plugin before
cannam@97 19 starting.
cannam@97 20
cannam@97 21 Plugins should be compiled and linked into dynamic libraries using the
cannam@97 22 usual convention for your platform, and should link (preferably
cannam@97 23 statically) with -lvamp-sdk. Any number of plugins can reside in a
cannam@97 24 single dynamic library. See plugins.cpp in the example plugins
cannam@97 25 directory for the sort of code that will need to accompany your plugin
cannam@97 26 class or classes, to make it possible for a host to look up your
cannam@97 27 plugins properly.
cannam@97 28
cannam@97 29 Please read the relevant README file for your platform found in the
cannam@97 30 Vamp SDK build/ directory, for details about how to ensure the
cannam@97 31 resulting dynamic library exports the correct linker symbols.
cannam@97 32
cannam@97 33 The following example plugins are provided. You may legally reuse any
cannam@97 34 amount of the code from these examples in any plugins you write,
cannam@97 35 whether proprietary or open-source.
cannam@97 36
cannam@97 37 - ZeroCrossing calculates the positions and density of zero-crossing
cannam@97 38 points in an audio waveform.
cannam@97 39
cannam@97 40 - SpectralCentroid calculates the centre of gravity of the frequency
cannam@97 41 domain representation of each block of audio.
cannam@97 42
cannam@97 43 - PowerSpectrum calculates a power spectrum from the input audio.
cannam@97 44 Actually, it doesn't do any work except calculating power from a
cannam@97 45 cartesian complex FFT output. The work of calculating this frequency
cannam@97 46 domain output is done for it by the host or host SDK; the plugin just
cannam@97 47 needs to declare that it wants frequency domain input. This is the
cannam@97 48 simplest of the example plugins.
cannam@97 49
cannam@97 50 - AmplitudeFollower is a simple implementation of SuperCollider's
cannam@97 51 amplitude-follower algorithm.
cannam@97 52
cannam@97 53 - PercussionOnsetDetector estimates the locations of percussive
cannam@97 54 onsets using a simple method described in "Drum Source Separation
cannam@97 55 using Percussive Feature Detection and Spectral Modulation" by Dan
cannam@97 56 Barry, Derry Fitzgerald, Eugene Coyle and Bob Lawlor, ISSC 2005.
cannam@97 57
cannam@97 58 - FixedTempoEstimator calculates a single beats-per-minute value
cannam@97 59 which is an estimate of the tempo of a piece of music that is assumed
cannam@97 60 to be of fixed tempo, using autocorrelation of a frequency domain
cannam@97 61 energy rise metric. It has several outputs that return intermediate
cannam@97 62 results used in the calculation, and may be a useful example of a
cannam@97 63 plugin having several outputs with varying feature structures.
cannam@97 64
cannam@97 65 Plugin authors should also read the Programmer's Guide at
cannam@97 66 http://vamp-plugins.org/guide.pdf .
cannam@97 67
cannam@97 68 \section hosts For Hosts
cannam@97 69
cannam@97 70 Hosts will normally use a Vamp::PluginHostAdapter to convert each
cannam@97 71 plugin's exposed C API back into a useful Vamp::Plugin C++ object.
cannam@97 72
cannam@97 73 The Vamp::HostExt namespace contains several additional C++ classes to
cannam@97 74 do this work for them, and make the host's life easier:
cannam@97 75
cannam@97 76 - Vamp::HostExt::PluginLoader provides a very easy interface for a
cannam@97 77 host to discover, load, and find out category information about the
cannam@97 78 available plugins. Most Vamp hosts will probably want to use this
cannam@97 79 class.
cannam@97 80
cannam@97 81 - Vamp::HostExt::PluginInputDomainAdapter provides a simple means for
cannam@97 82 hosts to handle plugins that want frequency-domain input, without
cannam@97 83 having to convert the input themselves.
cannam@97 84
cannam@97 85 - Vamp::HostExt::PluginChannelAdapter provides a simple means for
cannam@97 86 hosts to use plugins that do not necessarily support the same number
cannam@97 87 of audio channels as they have available, without having to apply a
cannam@97 88 channel management / mixdown policy themselves.
cannam@97 89
cannam@97 90 - Vamp::HostExt::PluginBufferingAdapter provides a means for hosts to
cannam@97 91 avoid having to negotiate the input step and block size, instead
cannam@97 92 permitting the host to use any block size they desire (and a step
cannam@97 93 size equal to it). This is particularly useful for "streaming" hosts
cannam@97 94 that cannot seek backwards in the input audio stream and so would
cannam@97 95 otherwise need to implement an additional buffer to support step
cannam@97 96 sizes smaller than the block size.
cannam@97 97
cannam@97 98 - Vamp::HostExt::PluginSummarisingAdapter provides summarisation
cannam@97 99 methods such as mean and median averages of output features, for use
cannam@97 100 in any context where an available plugin produces individual values
cannam@97 101 but the result that is actually needed is some sort of aggregate.
cannam@97 102
cannam@97 103 The PluginLoader class can also use the input domain, channel, and
cannam@97 104 buffering adapters automatically to make these conversions transparent
cannam@97 105 to the host if required.
cannam@97 106
cannam@97 107 Host authors should also refer to the example host code in the host
cannam@97 108 directory of the SDK.
cannam@97 109
cannam@97 110 Hosts should link with -lvamp-hostsdk.
cannam@97 111
cannam@97 112 (The following notes in this section are mostly relevant for
cannam@97 113 developers that are not using the HostExt classes, or that wish to
cannam@97 114 know more about the policy they implement.)
cannam@97 115
cannam@97 116 The Vamp API does not officially specify how to load plugin libraries
cannam@97 117 or where to find them. However, the SDK does include a function
cannam@97 118 (Vamp::PluginHostAdapter::getPluginPath()) that returns a recommended
cannam@97 119 directory search path that hosts may use for plugin libraries, and a
cannam@97 120 class (Vamp::HostExt::PluginLoader) that implements a sensible
cannam@97 121 cross-platform lookup policy using this path. We recommend using this
cannam@97 122 class in your host unless you have a good reason not to want to. This
cannam@97 123 implementation also permits the user to set the environment variable
cannam@97 124 VAMP_PATH to override the default path if desired.
cannam@97 125
cannam@97 126 The policy used by Vamp::HostExt::PluginLoader -- and our
cannam@97 127 recommendation for any host -- is to search each directory in this
cannam@97 128 path for .DLL (on Windows), .so (on Linux, Solaris, BSD etc) or .dylib
cannam@97 129 (on OS/X) files, then to load each one and perform a dynamic name
cannam@97 130 lookup on the vampGetPluginDescriptor function to enumerate the
cannam@97 131 plugins in the library. The example host has some code that may help,
cannam@97 132 but this operation will necessarily be system-dependent.
cannam@97 133
cannam@97 134 Vamp also has an informal convention for sorting plugins into
cannam@97 135 functional categories. In addition to the library file itself, a
cannam@97 136 plugin library may install a category file with the same name as the
cannam@97 137 library but .cat extension. The existence and format of this file are
cannam@97 138 not specified by the Vamp API, but by convention the file may contain
cannam@97 139 lines of the format
cannam@97 140
cannam@97 141 \code
cannam@97 142 vamp:pluginlibrary:pluginname::General Category > Specific Category
cannam@97 143 \endcode
cannam@97 144
cannam@97 145 which a host may read and use to assign plugins a location within a
cannam@97 146 category tree for display to the user. The expectation is that
cannam@97 147 advanced users may also choose to set up their own preferred category
cannam@97 148 trees, which is why this information is not queried as part of the
cannam@97 149 Vamp plugin's API itself. The Vamp::HostExt::PluginLoader class also
cannam@97 150 provides support for plugin category lookup using this scheme.
cannam@97 151
cannam@97 152 \section license License
cannam@97 153
cannam@97 154 This plugin SDK is freely redistributable under a "new-style BSD"
cannam@97 155 licence. See the file COPYING for more details. In short, you may
cannam@97 156 modify and redistribute the SDK and example plugins within any
cannam@97 157 commercial or non-commercial, proprietary or open-source plugin or
cannam@97 158 application under almost any conditions, with no obligation to provide
cannam@97 159 source code, provided you retain the original copyright note.
cannam@97 160
cannam@97 161
cannam@97 162 */