Collection of tools useful for audio production
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

453 lines
19KB

  1. /*
  2. LV2 - An audio plugin interface specification.
  3. Copyright 2006-2012 Steve Harris, David Robillard.
  4. Based on LADSPA, Copyright 2000-2002 Richard W.E. Furse,
  5. Paul Barton-Davis, Stefan Westerfeld.
  6. Permission to use, copy, modify, and/or distribute this software for any
  7. purpose with or without fee is hereby granted, provided that the above
  8. copyright notice and this permission notice appear in all copies.
  9. THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  10. WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  11. MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  12. ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  13. WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  14. ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  15. OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  16. */
  17. /**
  18. @file lv2.h
  19. API for the LV2 specification <http://lv2plug.in/ns/lv2core>.
  20. Revision: 6.5
  21. */
  22. #ifndef LV2_H_INCLUDED
  23. #define LV2_H_INCLUDED
  24. #include <stdint.h>
  25. #define LV2_CORE_URI "http://lv2plug.in/ns/lv2core"
  26. #define LV2_CORE_PREFIX LV2_CORE_URI "#"
  27. #define LV2_CORE__AllpassPlugin LV2_CORE_PREFIX "AllpassPlugin"
  28. #define LV2_CORE__AmplifierPlugin LV2_CORE_PREFIX "AmplifierPlugin"
  29. #define LV2_CORE__AnalyserPlugin LV2_CORE_PREFIX "AnalyserPlugin"
  30. #define LV2_CORE__AudioPort LV2_CORE_PREFIX "AudioPort"
  31. #define LV2_CORE__BandpassPlugin LV2_CORE_PREFIX "BandpassPlugin"
  32. #define LV2_CORE__CVPort LV2_CORE_PREFIX "CVPort"
  33. #define LV2_CORE__ChorusPlugin LV2_CORE_PREFIX "ChorusPlugin"
  34. #define LV2_CORE__CombPlugin LV2_CORE_PREFIX "CombPlugin"
  35. #define LV2_CORE__CompressorPlugin LV2_CORE_PREFIX "CompressorPlugin"
  36. #define LV2_CORE__ConstantPlugin LV2_CORE_PREFIX "ConstantPlugin"
  37. #define LV2_CORE__ControlPort LV2_CORE_PREFIX "ControlPort"
  38. #define LV2_CORE__ConverterPlugin LV2_CORE_PREFIX "ConverterPlugin"
  39. #define LV2_CORE__DelayPlugin LV2_CORE_PREFIX "DelayPlugin"
  40. #define LV2_CORE__DistortionPlugin LV2_CORE_PREFIX "DistortionPlugin"
  41. #define LV2_CORE__DynamicsPlugin LV2_CORE_PREFIX "DynamicsPlugin"
  42. #define LV2_CORE__EQPlugin LV2_CORE_PREFIX "EQPlugin"
  43. #define LV2_CORE__ExpanderPlugin LV2_CORE_PREFIX "ExpanderPlugin"
  44. #define LV2_CORE__ExtensionData LV2_CORE_PREFIX "ExtensionData"
  45. #define LV2_CORE__Feature LV2_CORE_PREFIX "Feature"
  46. #define LV2_CORE__FilterPlugin LV2_CORE_PREFIX "FilterPlugin"
  47. #define LV2_CORE__FlangerPlugin LV2_CORE_PREFIX "FlangerPlugin"
  48. #define LV2_CORE__FunctionPlugin LV2_CORE_PREFIX "FunctionPlugin"
  49. #define LV2_CORE__GatePlugin LV2_CORE_PREFIX "GatePlugin"
  50. #define LV2_CORE__GeneratorPlugin LV2_CORE_PREFIX "GeneratorPlugin"
  51. #define LV2_CORE__HighpassPlugin LV2_CORE_PREFIX "HighpassPlugin"
  52. #define LV2_CORE__InputPort LV2_CORE_PREFIX "InputPort"
  53. #define LV2_CORE__InstrumentPlugin LV2_CORE_PREFIX "InstrumentPlugin"
  54. #define LV2_CORE__LimiterPlugin LV2_CORE_PREFIX "LimiterPlugin"
  55. #define LV2_CORE__LowpassPlugin LV2_CORE_PREFIX "LowpassPlugin"
  56. #define LV2_CORE__MixerPlugin LV2_CORE_PREFIX "MixerPlugin"
  57. #define LV2_CORE__ModulatorPlugin LV2_CORE_PREFIX "ModulatorPlugin"
  58. #define LV2_CORE__MultiEQPlugin LV2_CORE_PREFIX "MultiEQPlugin"
  59. #define LV2_CORE__OscillatorPlugin LV2_CORE_PREFIX "OscillatorPlugin"
  60. #define LV2_CORE__OutputPort LV2_CORE_PREFIX "OutputPort"
  61. #define LV2_CORE__ParaEQPlugin LV2_CORE_PREFIX "ParaEQPlugin"
  62. #define LV2_CORE__PhaserPlugin LV2_CORE_PREFIX "PhaserPlugin"
  63. #define LV2_CORE__PitchPlugin LV2_CORE_PREFIX "PitchPlugin"
  64. #define LV2_CORE__Plugin LV2_CORE_PREFIX "Plugin"
  65. #define LV2_CORE__PluginBase LV2_CORE_PREFIX "PluginBase"
  66. #define LV2_CORE__Point LV2_CORE_PREFIX "Point"
  67. #define LV2_CORE__Port LV2_CORE_PREFIX "Port"
  68. #define LV2_CORE__PortProperty LV2_CORE_PREFIX "PortProperty"
  69. #define LV2_CORE__Resource LV2_CORE_PREFIX "Resource"
  70. #define LV2_CORE__ReverbPlugin LV2_CORE_PREFIX "ReverbPlugin"
  71. #define LV2_CORE__ScalePoint LV2_CORE_PREFIX "ScalePoint"
  72. #define LV2_CORE__SimulatorPlugin LV2_CORE_PREFIX "SimulatorPlugin"
  73. #define LV2_CORE__SpatialPlugin LV2_CORE_PREFIX "SpatialPlugin"
  74. #define LV2_CORE__Specification LV2_CORE_PREFIX "Specification"
  75. #define LV2_CORE__SpectralPlugin LV2_CORE_PREFIX "SpectralPlugin"
  76. #define LV2_CORE__UtilityPlugin LV2_CORE_PREFIX "UtilityPlugin"
  77. #define LV2_CORE__WaveshaperPlugin LV2_CORE_PREFIX "WaveshaperPlugin"
  78. #define LV2_CORE__appliesTo LV2_CORE_PREFIX "appliesTo"
  79. #define LV2_CORE__binary LV2_CORE_PREFIX "binary"
  80. #define LV2_CORE__connectionOptional LV2_CORE_PREFIX "connectionOptional"
  81. #define LV2_CORE__default LV2_CORE_PREFIX "default"
  82. #define LV2_CORE__designation LV2_CORE_PREFIX "designation"
  83. #define LV2_CORE__documentation LV2_CORE_PREFIX "documentation"
  84. #define LV2_CORE__enumeration LV2_CORE_PREFIX "enumeration"
  85. #define LV2_CORE__extensionData LV2_CORE_PREFIX "extensionData"
  86. #define LV2_CORE__freeWheeling LV2_CORE_PREFIX "freeWheeling"
  87. #define LV2_CORE__hardRTCapable LV2_CORE_PREFIX "hardRTCapable"
  88. #define LV2_CORE__inPlaceBroken LV2_CORE_PREFIX "inPlaceBroken"
  89. #define LV2_CORE__index LV2_CORE_PREFIX "index"
  90. #define LV2_CORE__integer LV2_CORE_PREFIX "integer"
  91. #define LV2_CORE__isLive LV2_CORE_PREFIX "isLive"
  92. #define LV2_CORE__latency LV2_CORE_PREFIX "latency"
  93. #define LV2_CORE__maximum LV2_CORE_PREFIX "maximum"
  94. #define LV2_CORE__microVersion LV2_CORE_PREFIX "microVersion"
  95. #define LV2_CORE__minimum LV2_CORE_PREFIX "minimum"
  96. #define LV2_CORE__minorVersion LV2_CORE_PREFIX "minorVersion"
  97. #define LV2_CORE__name LV2_CORE_PREFIX "name"
  98. #define LV2_CORE__optionalFeature LV2_CORE_PREFIX "optionalFeature"
  99. #define LV2_CORE__port LV2_CORE_PREFIX "port"
  100. #define LV2_CORE__portProperty LV2_CORE_PREFIX "portProperty"
  101. #define LV2_CORE__project LV2_CORE_PREFIX "project"
  102. #define LV2_CORE__reportsLatency LV2_CORE_PREFIX "reportsLatency"
  103. #define LV2_CORE__requiredFeature LV2_CORE_PREFIX "requiredFeature"
  104. #define LV2_CORE__sampleRate LV2_CORE_PREFIX "sampleRate"
  105. #define LV2_CORE__scalePoint LV2_CORE_PREFIX "scalePoint"
  106. #define LV2_CORE__symbol LV2_CORE_PREFIX "symbol"
  107. #define LV2_CORE__toggled LV2_CORE_PREFIX "toggled"
  108. #ifdef __cplusplus
  109. extern "C" {
  110. #endif
  111. /**
  112. Plugin Instance Handle.
  113. This is a handle for one particular instance of a plugin. It is valid to
  114. compare to NULL (or 0 for C++) but otherwise the host MUST NOT attempt to
  115. interpret it.
  116. */
  117. typedef void * LV2_Handle;
  118. /**
  119. Feature.
  120. Features allow hosts to make additional functionality available to plugins
  121. without requiring modification to the LV2 API. Extensions may define new
  122. features and specify the @ref URI and @ref data to be used if necessary.
  123. Some features, such as lv2:isLive, do not require the host to pass data.
  124. */
  125. typedef struct _LV2_Feature {
  126. /**
  127. A globally unique, case-sensitive identifier (URI) for this feature.
  128. This MUST be a valid URI string as defined by RFC 3986.
  129. */
  130. const char * URI;
  131. /**
  132. Pointer to arbitrary data.
  133. The format of this data is defined by the extension which describes the
  134. feature with the given @ref URI.
  135. */
  136. void * data;
  137. } LV2_Feature;
  138. /**
  139. Plugin Descriptor.
  140. This structure provides the core functions necessary to instantiate and use
  141. a plugin.
  142. */
  143. typedef struct _LV2_Descriptor {
  144. /**
  145. A globally unique, case-sensitive identifier for this plugin.
  146. This MUST be a valid URI string as defined by RFC 3986. All plugins with
  147. the same URI MUST be compatible to some degree, see
  148. http://lv2plug.in/ns/lv2core for details.
  149. */
  150. const char * URI;
  151. /**
  152. Instantiate the plugin.
  153. Note that instance initialisation should generally occur in activate()
  154. rather than here. If a host calls instantiate(), it MUST call cleanup()
  155. at some point in the future.
  156. @param descriptor Descriptor of the plugin to instantiate.
  157. @param sample_rate Sample rate, in Hz, for the new plugin instance.
  158. @param bundle_path Path to the LV2 bundle which contains this plugin
  159. binary. It MUST include the trailing directory separator (e.g. '/') so
  160. that simply appending a filename will yield the path to that file in the
  161. bundle.
  162. @param features A NULL terminated array of LV2_Feature structs which
  163. represent the features the host supports. Plugins may refuse to
  164. instantiate if required features are not found here. However, hosts MUST
  165. NOT use this as a discovery mechanism: instead, use the RDF data to
  166. determine which features are required and do not attempt to instantiate
  167. unsupported plugins at all. This parameter MUST NOT be NULL, i.e. a host
  168. that supports no features MUST pass a single element array containing
  169. NULL.
  170. @return A handle for the new plugin instance, or NULL if instantiation
  171. has failed.
  172. */
  173. LV2_Handle (*instantiate)(const struct _LV2_Descriptor * descriptor,
  174. double sample_rate,
  175. const char * bundle_path,
  176. const LV2_Feature *const * features);
  177. /**
  178. Connect a port on a plugin instance to a memory location.
  179. Plugin writers should be aware that the host may elect to use the same
  180. buffer for more than one port and even use the same buffer for both
  181. input and output (see lv2:inPlaceBroken in lv2.ttl).
  182. If the plugin has the feature lv2:hardRTCapable then there are various
  183. things that the plugin MUST NOT do within the connect_port() function;
  184. see lv2core.ttl for details.
  185. connect_port() MUST be called at least once for each port before run()
  186. is called, unless that port is lv2:connectionOptional. The plugin must
  187. pay careful attention to the block size passed to run() since the block
  188. allocated may only just be large enough to contain the data, and is not
  189. guaranteed to remain constant between run() calls.
  190. connect_port() may be called more than once for a plugin instance to
  191. allow the host to change the buffers that the plugin is reading or
  192. writing. These calls may be made before or after activate() or
  193. deactivate() calls.
  194. @param instance Plugin instance containing the port.
  195. @param port Index of the port to connect. The host MUST NOT try to
  196. connect a port index that is not defined in the plugin's RDF data. If
  197. it does, the plugin's behaviour is undefined (a crash is likely).
  198. @param data_location Pointer to data of the type defined by the port
  199. type in the plugin's RDF data (e.g. an array of float for an
  200. lv2:AudioPort). This pointer must be stored by the plugin instance and
  201. used to read/write data when run() is called. Data present at the time
  202. of the connect_port() call MUST NOT be considered meaningful.
  203. */
  204. void (*connect_port)(LV2_Handle instance,
  205. uint32_t port,
  206. void * data_location);
  207. /**
  208. Initialise a plugin instance and activate it for use.
  209. This is separated from instantiate() to aid real-time support and so
  210. that hosts can reinitialise a plugin instance by calling deactivate()
  211. and then activate(). In this case the plugin instance MUST reset all
  212. state information dependent on the history of the plugin instance except
  213. for any data locations provided by connect_port(). If there is nothing
  214. for activate() to do then this field may be NULL.
  215. When present, hosts MUST call this function once before run() is called
  216. for the first time. This call SHOULD be made as close to the run() call
  217. as possible and indicates to real-time plugins that they are now live,
  218. however plugins MUST NOT rely on a prompt call to run() after
  219. activate().
  220. The host MUST NOT call activate() again until deactivate() has been
  221. called first. If a host calls activate(), it MUST call deactivate() at
  222. some point in the future. Note that connect_port() may be called before
  223. or after activate().
  224. */
  225. void (*activate)(LV2_Handle instance);
  226. /**
  227. Run a plugin instance for a block.
  228. Note that if an activate() function exists then it must be called before
  229. run(). If deactivate() is called for a plugin instance then run() may
  230. not be called until activate() has been called again.
  231. If the plugin has the feature lv2:hardRTCapable then there are various
  232. things that the plugin MUST NOT do within the run() function (see
  233. lv2core.ttl for details).
  234. As a special case, when @p sample_count == 0, the plugin should update
  235. any output ports that represent a single instant in time (e.g. control
  236. ports, but not audio ports). This is particularly useful for latent
  237. plugins, which should update their latency output port so hosts can
  238. pre-roll plugins to compute latency. Plugins MUST NOT crash when
  239. @p sample_count == 0.
  240. @param instance Instance to be run.
  241. @param sample_count The block size (in samples) for which the plugin
  242. instance must run.
  243. */
  244. void (*run)(LV2_Handle instance,
  245. uint32_t sample_count);
  246. /**
  247. Deactivate a plugin instance (counterpart to activate()).
  248. Hosts MUST deactivate all activated instances after they have been run()
  249. for the last time. This call SHOULD be made as close to the last run()
  250. call as possible and indicates to real-time plugins that they are no
  251. longer live, however plugins MUST NOT rely on prompt deactivation. If
  252. there is nothing for deactivate() to do then this field may be NULL
  253. Deactivation is not similar to pausing since the plugin instance will be
  254. reinitialised by activate(). However, deactivate() itself MUST NOT fully
  255. reset plugin state. For example, the host may deactivate a plugin, then
  256. store its state (using some extension to do so).
  257. Hosts MUST NOT call deactivate() unless activate() was previously
  258. called. Note that connect_port() may be called before or after
  259. deactivate().
  260. */
  261. void (*deactivate)(LV2_Handle instance);
  262. /**
  263. Clean up a plugin instance (counterpart to instantiate()).
  264. Once an instance of a plugin has been finished with it must be deleted
  265. using this function. The instance handle passed ceases to be valid after
  266. this call.
  267. If activate() was called for a plugin instance then a corresponding call
  268. to deactivate() MUST be made before cleanup() is called. Hosts MUST NOT
  269. call cleanup() unless instantiate() was previously called.
  270. */
  271. void (*cleanup)(LV2_Handle instance);
  272. /**
  273. Return additional plugin data defined by some extenion.
  274. A typical use of this facility is to return a struct containing function
  275. pointers to extend the LV2_Descriptor API.
  276. The actual type and meaning of the returned object MUST be specified
  277. precisely by the extension. This function MUST return NULL for any
  278. unsupported URI. If a plugin does not support any extension data, this
  279. field may be NULL.
  280. The host is never responsible for freeing the returned value.
  281. */
  282. const void * (*extension_data)(const char * uri);
  283. } LV2_Descriptor;
  284. /**
  285. Put this (LV2_SYMBOL_EXPORT) before any functions that are to be loaded
  286. by the host as a symbol from the dynamic library.
  287. */
  288. #ifdef _WIN32
  289. # define LV2_SYMBOL_EXPORT __declspec(dllexport)
  290. #else
  291. # define LV2_SYMBOL_EXPORT
  292. #endif
  293. /**
  294. Prototype for plugin accessor function.
  295. This is part of the old discovery API, which has been replaced due to being
  296. inadequate for some plugins. It is limited because the bundle path is not
  297. available during discovery, and it relies on non-portable shared library
  298. constructors/destructors. However, this API is still supported and plugins
  299. are not required to migrate.
  300. Plugins are discovered by hosts using RDF data (not by loading libraries).
  301. See http://lv2plug.in for details on the discovery process, though most
  302. hosts should use an existing library to implement this functionality.
  303. A plugin library MUST include a function called "lv2_descriptor" with this
  304. prototype. This function MUST have C-style linkage (if you are using C++
  305. this is taken care of by the 'extern "C"' clause at the top of this file).
  306. When it is time to load a plugin (designated by its URI), the host loads the
  307. plugin's library, gets the lv2_descriptor() function from it, and uses this
  308. function to find the LV2_Descriptor for the desired plugin. Plugins are
  309. accessed by index using values from 0 upwards. This function MUST return
  310. NULL for out of range indices, so the host can enumerate plugins by
  311. increasing @p index until NULL is returned.
  312. Note that @p index has no meaning, hosts MUST NOT depend on it remaining
  313. consistent between loads of the plugin library.
  314. */
  315. LV2_SYMBOL_EXPORT
  316. const LV2_Descriptor * lv2_descriptor(uint32_t index);
  317. /**
  318. Type of the lv2_descriptor() function in a library (old discovery API).
  319. */
  320. typedef const LV2_Descriptor *
  321. (*LV2_Descriptor_Function)(uint32_t index);
  322. /**
  323. Handle for a library descriptor.
  324. */
  325. typedef void* LV2_Lib_Handle;
  326. /**
  327. Descriptor for a plugin library.
  328. To access a plugin library, the host creates an LV2_Lib_Descriptor via the
  329. lv2_lib_descriptor() function in the shared object.
  330. */
  331. typedef struct {
  332. /**
  333. Opaque library data which must be passed as the first parameter to all
  334. the methods of this struct.
  335. */
  336. LV2_Lib_Handle handle;
  337. /**
  338. The total size of this struct. This allows for this struct to be
  339. expanded in the future if necessary. This MUST be set by the library to
  340. sizeof(LV2_Lib_Descriptor). The host MUST NOT access any fields of this
  341. struct beyond get_plugin() unless this field indicates they are present.
  342. */
  343. uint32_t size;
  344. /**
  345. Destroy this library descriptor and free all related resources.
  346. */
  347. void (*cleanup)(LV2_Lib_Handle handle);
  348. /**
  349. Plugin accessor.
  350. Plugins are accessed by index using values from 0 upwards. Out of range
  351. indices MUST result in this function returning NULL, so the host can
  352. enumerate plugins by increasing @a index until NULL is returned.
  353. */
  354. const LV2_Descriptor * (*get_plugin)(LV2_Lib_Handle handle,
  355. uint32_t index);
  356. } LV2_Lib_Descriptor;
  357. /**
  358. Prototype for library accessor function.
  359. This is the entry point for a plugin library. Hosts load this symbol from
  360. the library and call this function to obtain a library descriptor which can
  361. be used to access all the contained plugins. The returned object must not
  362. be destroyed (using LV2_Lib_Descriptor::cleanup()) until all plugins loaded
  363. from that library have been destroyed.
  364. */
  365. const LV2_Lib_Descriptor *
  366. lv2_lib_descriptor(const char * bundle_path,
  367. const LV2_Feature *const * features);
  368. /**
  369. Type of the lv2_lib_descriptor() function in an LV2 library.
  370. */
  371. typedef const LV2_Lib_Descriptor *
  372. (*LV2_Lib_Descriptor_Function)(const char * bundle_path,
  373. const LV2_Feature *const * features);
  374. #ifdef __cplusplus
  375. }
  376. #endif
  377. #endif /* LV2_H_INCLUDED */