Audio plugin host https://kx.studio/carla
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.

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