Mercurial > hg > vamp-plugin-sdk
comparison src/doc-overview @ 239:cc467e52da4c
* Add platform README files
| author | cannam |
|---|---|
| date | Mon, 10 Nov 2008 12:39:19 +0000 |
| parents | 3451f7dfa2be |
| children | 7f3a806ed1df |
comparison
equal
deleted
inserted
replaced
| 238:4b5a3031cd08 | 239:cc467e52da4c |
|---|---|
| 24 single dynamic library. See plugins.cpp in the example plugins | 24 single dynamic library. See plugins.cpp in the example plugins |
| 25 directory for the sort of code that will need to accompany your plugin | 25 directory for the sort of code that will need to accompany your plugin |
| 26 class or classes, to make it possible for a host to look up your | 26 class or classes, to make it possible for a host to look up your |
| 27 plugins properly. | 27 plugins properly. |
| 28 | 28 |
| 29 You will also need to ensure that the entry point | 29 Please read the relevant README file for your platform found in the |
| 30 vampGetPluginDescriptor is properly exported (made public) from your | 30 Vamp SDK build/ directory, for details about how to ensure the |
| 31 shared library. The method to do this depends on your linker; for | 31 resulting dynamic library exports the correct linker symbols. |
| 32 example, when using the Windows Visual Studio linker, use the linker | |
| 33 flag "/EXPORT:vampGetPluginDescriptor". Exported symbols are the | |
| 34 default with most other current platforms' linkers. | |
| 35 | 32 |
| 36 The following example plugins are provided. You may legally reuse any | 33 The following example plugins are provided. You may legally reuse any |
| 37 amount of the code from these examples in any plugins you write, | 34 amount of the code from these examples in any plugins you write, |
| 38 whether proprietary or open-source. | 35 whether proprietary or open-source. |
| 39 | 36 |
| 49 - PercussionOnsetDetector estimates the locations of percussive | 46 - PercussionOnsetDetector estimates the locations of percussive |
| 50 onsets using a simple method described in "Drum Source Separation | 47 onsets using a simple method described in "Drum Source Separation |
| 51 using Percussive Feature Detection and Spectral Modulation" by Dan | 48 using Percussive Feature Detection and Spectral Modulation" by Dan |
| 52 Barry, Derry Fitzgerald, Eugene Coyle and Bob Lawlor, ISSC 2005. | 49 Barry, Derry Fitzgerald, Eugene Coyle and Bob Lawlor, ISSC 2005. |
| 53 | 50 |
| 54 - FixedTempoEstimator calculates a single bpm value which is an | 51 - FixedTempoEstimator calculates a single beats-per-minute value |
| 55 estimate of the tempo of a piece of music that is assumed to be of | 52 which is an estimate of the tempo of a piece of music that is assumed |
| 56 fixed tempo, using autocorrelation of a frequency domain energy rise | 53 to be of fixed tempo, using autocorrelation of a frequency domain |
| 57 metric. It has several outputs that return intermediate results used | 54 energy rise metric. It has several outputs that return intermediate |
| 58 in the calculation, and may be a useful example of a plugin having | 55 results used in the calculation, and may be a useful example of a |
| 59 several outputs with varying feature structures. | 56 plugin having several outputs with varying feature structures. |
| 60 | 57 |
| 61 \section hosts For Hosts | 58 \section hosts For Hosts |
| 62 | 59 |
| 63 Hosts will normally use a Vamp::PluginHostAdapter to convert each | 60 Hosts will normally use a Vamp::PluginHostAdapter to convert each |
| 64 plugin's exposed C API back into a useful Vamp::Plugin C++ object. | 61 plugin's exposed C API back into a useful Vamp::Plugin C++ object. |
| 65 | 62 |
| 66 Starting with version 1.1 of the Vamp SDK, there are several classes | 63 The Vamp::HostExt namespace contains several additional C++ classes to |
| 67 in the Vamp::HostExt namespace that aim to make the host's life as | 64 do this work for them, and make the host's life easier: |
| 68 easy as possible: | |
| 69 | 65 |
| 70 - Vamp::HostExt::PluginLoader provides a very simple interface for a | 66 - Vamp::HostExt::PluginLoader provides a very easy interface for a |
| 71 host to discover, load, and find out category information about the | 67 host to discover, load, and find out category information about the |
| 72 available plugins. Most "casual" Vamp hosts will probably want to | 68 available plugins. Most Vamp hosts will probably want to use this |
| 73 use this class. | 69 class. |
| 74 | 70 |
| 75 - Vamp::HostExt::PluginInputDomainAdapter provides a simple means for | 71 - Vamp::HostExt::PluginInputDomainAdapter provides a simple means for |
| 76 hosts to handle plugins that expect frequency-domain input, without | 72 hosts to handle plugins that want frequency-domain input, without |
| 77 having to convert the input themselves. | 73 having to convert the input themselves. |
| 78 | 74 |
| 79 - Vamp::HostExt::PluginChannelAdapter provides a simple means for | 75 - Vamp::HostExt::PluginChannelAdapter provides a simple means for |
| 80 hosts to use plugins that do not necessarily support the same number | 76 hosts to use plugins that do not necessarily support the same number |
| 81 of audio channels as they have available, without having to apply a | 77 of audio channels as they have available, without having to apply a |
| 82 channel management / mixdown policy themselves. | 78 channel management / mixdown policy themselves. |
| 83 | 79 |
| 84 - Vamp::HostExt::PluginBufferingAdapter (new in version 1.2) provides | 80 - Vamp::HostExt::PluginBufferingAdapter provides a means for hosts to |
| 85 a means for hosts to avoid having to negotiate the input step and | 81 avoid having to negotiate the input step and block size, instead |
| 86 block size, instead permitting the host to use any block size they | 82 permitting the host to use any block size they desire (and a step |
| 87 desire (and a step size equal to it). This is particularly useful | 83 size equal to it). This is particularly useful for "streaming" hosts |
| 88 for "streaming" hosts that cannot seek backwards in the input audio | 84 that cannot seek backwards in the input audio stream and so would |
| 89 stream and so would otherwise need to implement an additional buffer | 85 otherwise need to implement an additional buffer to support step |
| 90 to support step sizes smaller than the block size. | 86 sizes smaller than the block size. |
| 91 | 87 |
| 92 - Vamp::HostExt::PluginSummarisingAdapter (new in version 2.0) | 88 - Vamp::HostExt::PluginSummarisingAdapter provides summarisation |
| 93 provides summarisation methods such as mean and median averages of | 89 methods such as mean and median averages of output features, for use |
| 94 output features, for use in any context where an available plugin | 90 in any context where an available plugin produces individual values |
| 95 produces individual values but the result that is actually needed | 91 but the result that is actually needed is some sort of aggregate. |
| 96 is some sort of aggregate. | |
| 97 | 92 |
| 98 The PluginLoader class can also use the input domain, channel, and | 93 The PluginLoader class can also use the input domain, channel, and |
| 99 buffering adapters automatically to make these conversions transparent | 94 buffering adapters automatically to make these conversions transparent |
| 100 to the host if required. | 95 to the host if required. |
| 96 | |
| 97 Host authors should also refer to the example host code in the host | |
| 98 directory of the SDK. | |
| 101 | 99 |
| 102 Hosts should link with -lvamp-hostsdk. | 100 Hosts should link with -lvamp-hostsdk. |
| 103 | 101 |
| 104 (The following notes in this section are mostly relevant for | 102 (The following notes in this section are mostly relevant for |
| 105 developers that are not using the HostExt classes, or that wish to | 103 developers that are not using the HostExt classes, or that wish to |
| 106 know more about the policy they implement.) | 104 know more about the policy they implement.) |
| 107 | 105 |
| 108 The Vamp API does not officially specify how to load plugin libraries | 106 The Vamp API does not officially specify how to load plugin libraries |
| 109 or where to find them. However, the SDK does include a function | 107 or where to find them. However, the SDK does include a function |
| 110 (Vamp::PluginHostAdapter::getPluginPath()) that returns a recommended | 108 (Vamp::PluginHostAdapter::getPluginPath()) that returns a recommended |
| 111 directory search path that hosts may use for plugin libraries. | 109 directory search path that hosts may use for plugin libraries, and a |
| 110 class (Vamp::HostExt::PluginLoader) that implements a sensible | |
| 111 cross-platform lookup policy using this path. We recommend using this | |
| 112 class in your host unless you have a good reason not to want to. This | |
| 113 implementation also permits the user to set the environment variable | |
| 114 VAMP_PATH to override the default path if desired. | |
| 112 | 115 |
| 113 Our suggestion for a host is to search each directory in this path for | 116 The policy used by Vamp::HostExt::PluginLoader -- and our |
| 114 .DLL (on Windows), .so (on Linux, Solaris, BSD etc) or .dylib (on | 117 recommendation for any host -- is to search each directory in this |
| 115 OS/X) files, then to load each one and perform a dynamic name lookup | 118 path for .DLL (on Windows), .so (on Linux, Solaris, BSD etc) or .dylib |
| 116 on the vampGetPluginDescriptor function to enumerate the plugins in | 119 (on OS/X) files, then to load each one and perform a dynamic name |
| 117 the library. The example host has some code that may help, but this | 120 lookup on the vampGetPluginDescriptor function to enumerate the |
| 118 operation will necessarily be system-dependent. | 121 plugins in the library. The example host has some code that may help, |
| 122 but this operation will necessarily be system-dependent. | |
| 119 | 123 |
| 120 Vamp also has an informal convention for sorting plugins into | 124 Vamp also has an informal convention for sorting plugins into |
| 121 functional categories. In addition to the library file itself, a | 125 functional categories. In addition to the library file itself, a |
| 122 plugin library may install a category file with the same name as the | 126 plugin library may install a category file with the same name as the |
| 123 library but .cat extension. The existence and format of this file are | 127 library but .cat extension. The existence and format of this file are |
| 130 | 134 |
| 131 which a host may read and use to assign plugins a location within a | 135 which a host may read and use to assign plugins a location within a |
| 132 category tree for display to the user. The expectation is that | 136 category tree for display to the user. The expectation is that |
| 133 advanced users may also choose to set up their own preferred category | 137 advanced users may also choose to set up their own preferred category |
| 134 trees, which is why this information is not queried as part of the | 138 trees, which is why this information is not queried as part of the |
| 135 Vamp API itself. | 139 Vamp plugin's API itself. The Vamp::HostExt::PluginLoader class also |
| 136 | 140 provides support for plugin category lookup using this scheme. |
| 137 There is an example host in the "host" directory from which code may | |
| 138 be drawn. | |
| 139 | 141 |
| 140 \section license License | 142 \section license License |
| 141 | 143 |
| 142 This plugin SDK is freely redistributable under a "new-style BSD" | 144 This plugin SDK is freely redistributable under a "new-style BSD" |
| 143 licence. See the file COPYING for more details. In short, you may | 145 licence. See the file COPYING for more details. In short, you may |
