annotate vamp-sdk/doc-overview @ 98:896a97349ac5

* Add a static wrapper object to wrap the static instance pointer, so that it can be properly deleted on program exit instead of showing up in certain tools as leaked
author cannam
date Mon, 03 Dec 2007 12:57:27 +0000
parents 0f8524203677
children 7a27dbdd663a
rev   line source
cannam@54 1
cannam@54 2 /** \mainpage Vamp Plugin SDK
cannam@54 3
cannam@54 4 \section about About Vamp
cannam@54 5
cannam@54 6 Vamp is an API for C and C++ plugins that process sampled audio data
cannam@54 7 to produce descriptive output (measurements or semantic observations).
cannam@54 8 Find more information at http://www.vamp-plugins.org/ .
cannam@54 9
cannam@54 10 Although the official API for Vamp plugins is defined in C for maximum
cannam@54 11 binary compatibility, we strongly recommend using the provided C++
cannam@54 12 classes in the SDK to implement your own plugins and hosts.
cannam@54 13
cannam@54 14 \section plugins For Plugins
cannam@54 15
cannam@54 16 Plugins should subclass Vamp::Plugin, and then use a
cannam@54 17 Vamp::PluginAdapter to expose the correct C API for the plugin. Read
cannam@54 18 the documentation for Vamp::PluginBase and Vamp::Plugin before
cannam@54 19 starting.
cannam@54 20
cannam@54 21 Plugins should be compiled and linked into dynamic libraries using the
cannam@54 22 usual convention for your platform, and should link (preferably
cannam@54 23 statically) with -lvamp-sdk. Any number of plugins can reside in a
cannam@54 24 single dynamic library. See plugins.cpp in the example plugins
cannam@54 25 directory for the sort of code that will need to accompany your plugin
cannam@54 26 class or classes, to make it possible for a host to look up your
cannam@54 27 plugins properly.
cannam@54 28
cannam@54 29 The following example plugins are provided:
cannam@54 30
cannam@54 31 - ZeroCrossing calculates the positions and density of zero-crossing
cannam@54 32 points in an audio waveform.
cannam@54 33
cannam@54 34 - SpectralCentroid calculates the centre of gravity of the frequency
cannam@54 35 domain representation of each block of audio.
cannam@54 36
cannam@54 37 - AmplitudeFollower is an implementation of SuperCollider's
cannam@54 38 amplitude-follower algorithm as a simple Vamp plugin.
cannam@54 39
cannam@54 40 - PercussionOnsetDetector estimates the locations of percussive
cannam@54 41 onsets using a simple method described in "Drum Source Separation
cannam@54 42 using Percussive Feature Detection and Spectral Modulation" by Dan
cannam@54 43 Barry, Derry Fitzgerald, Eugene Coyle and Bob Lawlor, ISSC 2005.
cannam@54 44
cannam@54 45 \section hosts For Hosts
cannam@54 46
cannam@75 47 Hosts will normally use a Vamp::PluginHostAdapter to convert each
cannam@75 48 plugin's exposed C API back into a useful Vamp::Plugin C++ object.
cannam@75 49
cannam@75 50 Starting with version 1.1 of the Vamp SDK, there are several classes
cannam@75 51 in the Vamp::HostExt namespace that aim to make the host's life as
cannam@75 52 easy as possible:
cannam@75 53
cannam@75 54 - Vamp::HostExt::PluginLoader provides a very simple interface for a
cannam@75 55 host to discover, load, and find out category information about the
cannam@75 56 available plugins. Most "casual" Vamp hosts will probably want to
cannam@75 57 use this class.
cannam@75 58
cannam@75 59 - Vamp::HostExt::PluginInputDomainAdapter provides a simple means for
cannam@75 60 hosts to handle plugins that expect frequency-domain input, without
cannam@75 61 having to convert the input themselves.
cannam@75 62
cannam@75 63 - Vamp::HostExt::PluginChannelAdapter provides a simple means for
cannam@75 64 hosts to use plugins that do not necessarily support the same number
cannam@75 65 of audio channels as they have available, without having to apply a
cannam@75 66 channel management / mixdown policy themselves.
cannam@75 67
cannam@75 68 The PluginLoader class can also use the input domain and channel
cannam@75 69 adapters automatically to make the entire conversion process
cannam@75 70 transparent to the host if required.
cannam@54 71
cannam@54 72 Hosts should link with -lvamp-hostsdk.
cannam@54 73
cannam@75 74 (The following notes in this section are mostly relevant for
cannam@75 75 developers that are not using the HostExt classes, or that wish to
cannam@75 76 know more about the policy they implement.)
cannam@75 77
cannam@54 78 The Vamp API does not officially specify how to load plugin libraries
cannam@54 79 or where to find them. However, the SDK does include a function
cannam@54 80 (Vamp::PluginHostAdapter::getPluginPath()) that returns a recommended
cannam@54 81 directory search path that hosts may use for plugin libraries.
cannam@54 82
cannam@54 83 Our suggestion for a host is to search each directory in this path for
cannam@54 84 .DLL (on Windows), .so (on Linux, Solaris, BSD etc) or .dylib (on
cannam@54 85 OS/X) files, then to load each one and perform a dynamic name lookup
cannam@54 86 on the vampGetPluginDescriptor function to enumerate the plugins in
cannam@54 87 the library. The example host has some code that may help, but this
cannam@54 88 operation will necessarily be system-dependent.
cannam@54 89
cannam@54 90 Vamp also has an informal convention for sorting plugins into
cannam@54 91 functional categories. In addition to the library file itself, a
cannam@54 92 plugin library may install a category file with the same name as the
cannam@54 93 library but .cat extension. The existence and format of this file are
cannam@54 94 not specified by the Vamp API, but by convention the file may contain
cannam@54 95 lines of the format
cannam@54 96
cannam@54 97 \code
cannam@54 98 vamp:pluginlibrary:pluginname::General Category > Specific Category
cannam@54 99 \endcode
cannam@54 100
cannam@54 101 which a host may read and use to assign plugins a location within a
cannam@54 102 category tree for display to the user. The expectation is that
cannam@54 103 advanced users may also choose to set up their own preferred category
cannam@54 104 trees, which is why this information is not queried as part of the
cannam@54 105 Vamp API itself.
cannam@54 106
cannam@75 107 There is an example host in the "host" directory from which code may
cannam@75 108 be drawn.
cannam@54 109
cannam@54 110 \section license License
cannam@54 111
cannam@54 112 This plugin SDK is freely redistributable under a "new-style BSD"
cannam@54 113 licence. See the file COPYING for more details. In short, you may
cannam@54 114 modify and redistribute the SDK and example plugins within any
cannam@54 115 commercial or non-commercial, proprietary or open-source plugin or
cannam@54 116 application under almost any conditions, with no obligation to provide
cannam@54 117 source code, provided you retain the original copyright note.
cannam@54 118
cannam@54 119
cannam@54 120 */