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.

CarlaBackend.hpp 22KB

11 years ago
12 years ago
11 years ago
11 years ago
11 years ago
12 years ago
12 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
12 years ago
11 years ago
11 years ago
11 years ago
12 years ago
12 years ago
11 years ago
11 years ago
11 years ago
12 years ago
11 years ago
11 years ago
11 years ago
12 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
12 years ago
12 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
12 years ago
11 years ago
11 years ago
12 years ago
12 years ago
12 years ago
11 years ago
11 years ago
12 years ago
12 years ago
12 years ago
12 years ago
11 years ago
12 years ago
12 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756
  1. /*
  2. * Carla Backend API
  3. * Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU General Public License as
  7. * published by the Free Software Foundation; either version 2 of
  8. * the License, or any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * For a full copy of the GNU General Public License see the GPL.txt file
  16. */
  17. #ifndef __CARLA_BACKEND_HPP__
  18. #define __CARLA_BACKEND_HPP__
  19. #include "CarlaDefines.hpp"
  20. #include <cstdint>
  21. #define CARLA_BACKEND_START_NAMESPACE namespace CarlaBackend {
  22. #define CARLA_BACKEND_END_NAMESPACE }
  23. #define CARLA_BACKEND_USE_NAMESPACE using namespace CarlaBackend;
  24. #define STR_MAX 0xFF+1
  25. CARLA_BACKEND_START_NAMESPACE
  26. /*!
  27. * @defgroup CarlaBackendAPI Carla Backend API
  28. *
  29. * The Carla Backend API
  30. *
  31. * @{
  32. */
  33. const unsigned int MAX_DEFAULT_PLUGINS = 99; //!< Maximum default number of loadable plugins
  34. const unsigned int MAX_RACK_PLUGINS = 16; //!< Maximum number of loadable plugins in rack mode
  35. const unsigned int MAX_PATCHBAY_PLUGINS = 999; //!< Maximum number of loadable plugins in patchbay mode
  36. const unsigned int MAX_DEFAULT_PARAMETERS = 200; //!< Maximum default number of parameters allowed.\see OPTION_MAX_PARAMETERS
  37. /*!
  38. * @defgroup PluginHints Plugin Hints
  39. *
  40. * Various plugin hints.
  41. * \see CarlaPlugin::hints()
  42. * @{
  43. */
  44. const unsigned int PLUGIN_IS_BRIDGE = 0x001; //!< Plugin is a bridge (ie, BridgePlugin). This hint is required because "bridge" itself is not a plugin type.
  45. const unsigned int PLUGIN_IS_RTSAFE = 0x002; //!< Plugin is hard real-time safe.
  46. const unsigned int PLUGIN_IS_SYNTH = 0x004; //!< Plugin is a synthesizer (produces sound).
  47. const unsigned int PLUGIN_HAS_GUI = 0x010; //!< Plugin has its own custom GUI.
  48. const unsigned int PLUGIN_HAS_SINGLE_THREAD = 0x020; //!< Plugin needs a single thread for both DSP and UI events.
  49. const unsigned int PLUGIN_CAN_DRYWET = 0x100; //!< Plugin can make use of Dry/Wet controls.
  50. const unsigned int PLUGIN_CAN_VOLUME = 0x200; //!< Plugin can make use of Volume controls.
  51. const unsigned int PLUGIN_CAN_BALANCE = 0x400; //!< Plugin can make use of Left & Right Balance controls.
  52. const unsigned int PLUGIN_CAN_PANNING = 0x800; //!< Plugin can make use of Panning controls.
  53. /**@}*/
  54. /*!
  55. * @defgroup PluginOptions Plugin Options
  56. *
  57. * Various plugin options.\n
  58. * ON or OFF defines the default plugin value.
  59. * \see CarlaPlugin::options()
  60. * @{
  61. */
  62. const unsigned int PLUGIN_OPTION_FIXED_BUFFER = 0x001; //!< Use a constant, fixed-size audio buffer
  63. const unsigned int PLUGIN_OPTION_FORCE_STEREO = 0x002; //!< Force mono plugin as stereo
  64. const unsigned int PLUGIN_OPTION_MAP_PROGRAM_CHANGES = 0x004; //!< Map MIDI-Programs to plugin programs
  65. const unsigned int PLUGIN_OPTION_USE_CHUNKS = 0x008; //!< Use chunks to save data
  66. const unsigned int PLUGIN_OPTION_SEND_CONTROL_CHANGES = 0x010; //!< Send MIDI CC events
  67. const unsigned int PLUGIN_OPTION_SEND_CHANNEL_PRESSURE = 0x020; //!< Send MIDI channel pressure events
  68. const unsigned int PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH = 0x040; //!< Send MIDI note aftertouch events
  69. const unsigned int PLUGIN_OPTION_SEND_PITCHBEND = 0x080; //!< Send MIDI pitchbend events
  70. const unsigned int PLUGIN_OPTION_SEND_ALL_SOUND_OFF = 0x100; //!< Send MIDI ALL_SOUND_OFF / ALL_NOTES_OFF events
  71. /**@}*/
  72. /*!
  73. * @defgroup ParameterHints Parameter Hints
  74. *
  75. * Various parameter hints.
  76. * \see CarlaPlugin::parameterData()
  77. * @{
  78. */
  79. const unsigned int PARAMETER_IS_BOOLEAN = 0x01; //!< Parameter value is always a boolean (always at minimum or maximum range).
  80. const unsigned int PARAMETER_IS_INTEGER = 0x02; //!< Parameter value is always an integer.
  81. const unsigned int PARAMETER_IS_LOGARITHMIC = 0x04; //!< Parameter is logarithmic.
  82. const unsigned int PARAMETER_IS_ENABLED = 0x08; //!< Parameter is enabled and will be shown in the host built-in editor.
  83. const unsigned int PARAMETER_IS_AUTOMABLE = 0x10; //!< Parameter is automable (realtime safe)
  84. const unsigned int PARAMETER_USES_SAMPLERATE = 0x20; //!< Parameter needs sample rate to work (value and ranges are multiplied by SR, and must be divided by SR on save).
  85. const unsigned int PARAMETER_USES_SCALEPOINTS = 0x40; //!< Parameter uses scalepoints to define internal values in a meaninful way.
  86. const unsigned int PARAMETER_USES_CUSTOM_TEXT = 0x80; //!< Parameter uses custom text for displaying its value.\see CarlaPlugin::getParameterText()
  87. /**@}*/
  88. /*!
  89. * @defgroup PatchbayPortHints Patchbay Port Hints
  90. *
  91. * Various patchbay port hints.
  92. * @{
  93. */
  94. const unsigned int PATCHBAY_PORT_IS_INPUT = 0x1; //!< Patchbay port is input.
  95. const unsigned int PATCHBAY_PORT_IS_OUTPUT = 0x2; //!< Patchbay port is output.
  96. const unsigned int PATCHBAY_PORT_IS_AUDIO = 0x4; //!< Patchbay port is of Audio type.
  97. const unsigned int PATCHBAY_PORT_IS_MIDI = 0x8; //!< Patchbay port is of MIDI type.
  98. /**@}*/
  99. /*!
  100. * @defgroup CustomDataTypes Custom Data types
  101. *
  102. * The type defines how the \param value in CustomData is stored.
  103. *
  104. * Types are valid URIs.\n
  105. * Any non-string, non-simple type (not integral) is saved in a base64 encoded format.
  106. */
  107. const char* const CUSTOM_DATA_INVALID = nullptr; //!< Null/Invalid data.
  108. const char* const CUSTOM_DATA_CHUNK = "http://kxstudio.sf.net/ns/carla/chunk"; //!< Carla Chunk
  109. const char* const CUSTOM_DATA_STRING = "http://kxstudio.sf.net/ns/carla/string"; //!< Carla String
  110. /**@}*/
  111. #if 0
  112. /*!
  113. * @defgroup BridgeMessages Bridge Messages
  114. *
  115. * Various bridge related messages, used as configure(<message>, value).
  116. * \note This is for internal use only.
  117. *
  118. * TODO: Review these, may not be needed anymore
  119. * @{
  120. */
  121. const char* const CARLA_BRIDGE_MSG_HIDE_GUI = "CarlaBridgeHideGUI"; //!< Plugin -> Host call, tells host GUI is now hidden
  122. const char* const CARLA_BRIDGE_MSG_SAVED = "CarlaBridgeSaved"; //!< Plugin -> Host call, tells host state is saved
  123. const char* const CARLA_BRIDGE_MSG_SAVE_NOW = "CarlaBridgeSaveNow"; //!< Host -> Plugin call, tells plugin to save state now
  124. const char* const CARLA_BRIDGE_MSG_SET_CHUNK = "CarlaBridgeSetChunk"; //!< Host -> Plugin call, tells plugin to set chunk in file \a value
  125. const char* const CARLA_BRIDGE_MSG_SET_CUSTOM = "CarlaBridgeSetCustom"; //!< Host -> Plugin call, tells plugin to set a custom data set using \a value ("type·key·rvalue").\n If \a type is 'chunk' or 'binary' \a rvalue refers to chunk file.
  126. /**@}*/
  127. #endif
  128. /*!
  129. * The binary type of a plugin.
  130. */
  131. enum BinaryType {
  132. BINARY_NONE = 0, //!< Null binary type.
  133. BINARY_POSIX32 = 1, //!< POSIX 32bit.
  134. BINARY_POSIX64 = 2, //!< POSIX 64bit.
  135. BINARY_WIN32 = 3, //!< Windows 32bit.
  136. BINARY_WIN64 = 4, //!< Windows 64bit.
  137. BINARY_OTHER = 5 //!< Other.
  138. };
  139. /*!
  140. * All the available plugin types, as provided by subclasses of CarlaPlugin.\n
  141. * Some plugin classes might provide more than 1 plugin type.
  142. */
  143. enum PluginType {
  144. PLUGIN_NONE = 0, //!< Null plugin type.
  145. PLUGIN_INTERNAL = 1, //!< Internal plugin.\see NativePlugin
  146. PLUGIN_LADSPA = 2, //!< LADSPA plugin.\see LadspaPlugin
  147. PLUGIN_DSSI = 3, //!< DSSI plugin.\see DssiPlugin
  148. PLUGIN_LV2 = 4, //!< LV2 plugin.\see Lv2Plugin
  149. PLUGIN_VST = 5, //!< VST1/2 plugin.\see VstPlugin
  150. PLUGIN_VST3 = 6, //!< VST3 plugin.\see VstPlugin
  151. PLUGIN_GIG = 7, //!< GIG sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin
  152. PLUGIN_SF2 = 8, //!< SF2 sound kit (aka SoundFont), implemented via FluidSynth.\see FluidSynthPlugin
  153. PLUGIN_SFZ = 9 //!< SFZ sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin
  154. };
  155. /*!
  156. * Plugin category, describing the funtionality of a plugin.\n
  157. * When a plugin fails to tell his own category, one is atributted to it based on its name.
  158. */
  159. enum PluginCategory {
  160. PLUGIN_CATEGORY_NONE = 0, //!< Null plugin category.
  161. PLUGIN_CATEGORY_SYNTH = 1, //!< A synthesizer or generator.
  162. PLUGIN_CATEGORY_DELAY = 2, //!< A delay or reverberator.
  163. PLUGIN_CATEGORY_EQ = 3, //!< An equalizer.
  164. PLUGIN_CATEGORY_FILTER = 4, //!< A filter.
  165. PLUGIN_CATEGORY_DYNAMICS = 5, //!< A 'dynamic' plugin (amplifier, compressor, gate, etc).
  166. PLUGIN_CATEGORY_MODULATOR = 6, //!< A 'modulator' plugin (chorus, flanger, phaser, etc).
  167. PLUGIN_CATEGORY_UTILITY = 7, //!< An 'utility' plugin (analyzer, converter, mixer, etc).
  168. PLUGIN_CATEGORY_OTHER = 8 //!< Misc plugin (used to check if the plugin has a category).
  169. };
  170. /*!
  171. * Plugin parameter type.
  172. */
  173. enum ParameterType {
  174. PARAMETER_UNKNOWN = 0, //!< Null parameter type.
  175. PARAMETER_INPUT = 1, //!< Input parameter.
  176. PARAMETER_OUTPUT = 2, //!< Ouput parameter.
  177. PARAMETER_LATENCY = 3, //!< Special latency parameter, used in LADSPA, DSSI and LV2 plugins.
  178. PARAMETER_SAMPLE_RATE = 4, //!< Special sample-rate parameter, used in LADSPA, DSSI and LV2 plugins.
  179. #ifdef WANT_LV2
  180. PARAMETER_LV2_FREEWHEEL = 5, //!< Special LV2 Plugin parameter used to report freewheel (offline) mode.
  181. PARAMETER_LV2_TIME = 6 //!< Special LV2 Plugin parameter used to report time information.
  182. #endif
  183. };
  184. /*!
  185. * Internal parameter indexes.\n
  186. * These are special parameters used internally, plugins do not know about their existence.
  187. */
  188. enum InternalParametersIndex {
  189. PARAMETER_NULL = -1, //!< Null parameter.
  190. PARAMETER_ACTIVE = -2, //!< Active parameter, can only be 'true' or 'false'; default is 'false'.
  191. PARAMETER_DRYWET = -3, //!< Dry/Wet parameter, range 0.0...1.0; default is 1.0.
  192. PARAMETER_VOLUME = -4, //!< Volume parameter, range 0.0...1.27; default is 1.0.
  193. PARAMETER_BALANCE_LEFT = -5, //!< Stereo Balance-Left parameter, range -1.0...1.0; default is -1.0.
  194. PARAMETER_BALANCE_RIGHT = -6, //!< Stereo Balance-Right parameter, range -1.0...1.0; default is 1.0.
  195. PARAMETER_PANNING = -7, //!< Mono Panning parameter, range -1.0...1.0; default is 0.0.
  196. PARAMETER_CTRL_CHANNEL = -8, //!< MIDI Control channel
  197. PARAMETER_MAX = -9 //!< Max value, defined for convenience
  198. };
  199. /*!
  200. * Options used in the CarlaEngine::setOption() and set_option() calls.\n
  201. * These options must be set before initiliazing or after closing the engine.
  202. */
  203. enum OptionsType {
  204. /*!
  205. * Try to set the current process name.
  206. * \note Not available on all platforms.
  207. */
  208. OPTION_PROCESS_NAME = 0,
  209. /*!
  210. * Set the engine processing mode.\n
  211. * Default is PROCESS_MODE_CONTINUOUS_RACK.
  212. * \see ProcessMode
  213. */
  214. OPTION_PROCESS_MODE = 1,
  215. /*!
  216. * Set the engine transport mode.\n
  217. * Default is TRANSPORT_MODE_INTERNAL.
  218. * \see TransportMode
  219. */
  220. OPTION_TRANSPORT_MODE = 2,
  221. /*!
  222. * Force mono plugins as stereo, by running 2 instances at the same time.
  223. * \note Not supported by all plugins.
  224. */
  225. OPTION_FORCE_STEREO = 3,
  226. /*!
  227. * Use plugin bridges whenever possible.\n
  228. * Default is no, and not recommended at this point!.
  229. * EXPERIMENTAL AND INCOMPLETE!
  230. */
  231. OPTION_PREFER_PLUGIN_BRIDGES = 4,
  232. /*!
  233. * Use OSC-UI bridges whenever possible, otherwise UIs will be handled in the main thread.\n
  234. * Default is yes.
  235. */
  236. OPTION_PREFER_UI_BRIDGES = 5,
  237. #ifdef WANT_DSSI
  238. /*!
  239. * Use (unofficial) dssi-vst chunks feature.\n
  240. * Default is no.
  241. */
  242. OPTION_USE_DSSI_VST_CHUNKS = 6,
  243. #endif
  244. /*!
  245. * Maximum number of parameters allowed.\n
  246. * Default is MAX_DEFAULT_PARAMETERS.
  247. */
  248. OPTION_MAX_PARAMETERS = 7,
  249. /*!
  250. * Timeout value in ms for how much to wait for OSC-Bridges to respond.\n
  251. * Default is 4000 (4 secs).
  252. */
  253. OPTION_OSC_UI_TIMEOUT = 8,
  254. /*!
  255. * Prefered buffer size.
  256. */
  257. OPTION_PREFERRED_BUFFER_SIZE = 9,
  258. /*!
  259. * Prefered sample rate.
  260. */
  261. OPTION_PREFERRED_SAMPLE_RATE = 10,
  262. #ifndef BUILD_BRIDGE
  263. /*!
  264. * Set path to the native plugin bridge executable.\n
  265. * Default unset.
  266. */
  267. OPTION_PATH_BRIDGE_NATIVE = 11,
  268. /*!
  269. * Set path to the POSIX 32bit plugin bridge executable.\n
  270. * Default unset.
  271. */
  272. OPTION_PATH_BRIDGE_POSIX32 = 12,
  273. /*!
  274. * Set path to the POSIX 64bit plugin bridge executable.\n
  275. * Default unset.
  276. */
  277. OPTION_PATH_BRIDGE_POSIX64 = 13,
  278. /*!
  279. * Set path to the Windows 32bit plugin bridge executable.\n
  280. * Default unset.
  281. */
  282. OPTION_PATH_BRIDGE_WIN32 = 14,
  283. /*!
  284. * Set path to the Windows 64bit plugin bridge executable.\n
  285. * Default unset.
  286. */
  287. OPTION_PATH_BRIDGE_WIN64 = 15,
  288. #endif
  289. #ifdef WANT_LV2
  290. /*!
  291. * Set path to the LV2 Gtk2 UI bridge executable.\n
  292. * Default unset.
  293. */
  294. OPTION_PATH_BRIDGE_LV2_GTK2 = 16,
  295. /*!
  296. * Set path to the LV2 Gtk3 UI bridge executable.\n
  297. * Default unset.
  298. */
  299. OPTION_PATH_BRIDGE_LV2_GTK3 = 17,
  300. /*!
  301. * Set path to the LV2 Qt4 UI bridge executable.\n
  302. * Default unset.
  303. */
  304. OPTION_PATH_BRIDGE_LV2_QT4 = 18,
  305. /*!
  306. * Set path to the LV2 Qt5 UI bridge executable.\n
  307. * Default unset.
  308. */
  309. OPTION_PATH_BRIDGE_LV2_QT5 = 19,
  310. /*!
  311. * Set path to the LV2 Cocoa UI bridge executable.\n
  312. * Default unset.
  313. */
  314. OPTION_PATH_BRIDGE_LV2_COCOA = 20,
  315. /*!
  316. * Set path to the LV2 Windows UI bridge executable.\n
  317. * Default unset.
  318. */
  319. OPTION_PATH_BRIDGE_LV2_WINDOWS = 21,
  320. /*!
  321. * Set path to the LV2 X11 UI bridge executable.\n
  322. * Default unset.
  323. */
  324. OPTION_PATH_BRIDGE_LV2_X11 = 22,
  325. #endif
  326. #ifdef WANT_VST
  327. /*!
  328. * Set path to the VST Cocoa UI bridge executable.\n
  329. * Default unset.
  330. */
  331. OPTION_PATH_BRIDGE_VST_COCOA = 23,
  332. /*!
  333. * Set path to the VST HWND UI bridge executable.\n
  334. * Default unset.
  335. */
  336. OPTION_PATH_BRIDGE_VST_HWND = 24,
  337. /*!
  338. * Set path to the VST X11 UI bridge executable.\n
  339. * Default unset.
  340. */
  341. OPTION_PATH_BRIDGE_VST_X11 = 25
  342. #endif
  343. };
  344. /*!
  345. * Opcodes sent from the engine callback to the GUI, as defined by CallbackFunc.
  346. *
  347. * \see CarlaEngine::setCallback()
  348. * \see set_callback_function()
  349. */
  350. enum CallbackType {
  351. /*!
  352. * Debug.\n
  353. * This opcode is undefined and used only for testing purposes.
  354. */
  355. CALLBACK_DEBUG = 0,
  356. /*!
  357. * A plugin has been added.
  358. */
  359. CALLBACK_PLUGIN_ADDED = 1,
  360. /*!
  361. * A plugin has been removed.
  362. */
  363. CALLBACK_PLUGIN_REMOVED = 2,
  364. /*!
  365. * A plugin has been renamed.
  366. */
  367. CALLBACK_PLUGIN_RENAMED = 3,
  368. /*!
  369. * A parameter value has been changed.
  370. *
  371. * \param value1 Parameter index
  372. * \param value3 Value
  373. */
  374. CALLBACK_PARAMETER_VALUE_CHANGED = 4,
  375. /*!
  376. * A parameter default has been changed.
  377. *
  378. * \param value1 Parameter index
  379. * \param value3 Default value
  380. */
  381. CALLBACK_PARAMETER_DEFAULT_CHANGED = 5,
  382. /*!
  383. * A parameter's MIDI channel has been changed.
  384. *
  385. * \param value1 Parameter index
  386. * \param value2 MIDI channel
  387. */
  388. CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED = 6,
  389. /*!
  390. * A parameter's MIDI CC has been changed.
  391. *
  392. * \param value1 Parameter index
  393. * \param value2 MIDI CC
  394. */
  395. CALLBACK_PARAMETER_MIDI_CC_CHANGED = 7,
  396. /*!
  397. * The current program has has been changed.
  398. *
  399. * \param value1 Program index
  400. */
  401. CALLBACK_PROGRAM_CHANGED = 8,
  402. /*!
  403. * The current MIDI program has been changed.
  404. *
  405. * \param value1 MIDI bank
  406. * \param value2 MIDI program
  407. */
  408. CALLBACK_MIDI_PROGRAM_CHANGED = 9,
  409. /*!
  410. * A note has been pressed.
  411. *
  412. * \param value1 Channel
  413. * \param value2 Note
  414. * \param value3 Velocity
  415. */
  416. CALLBACK_NOTE_ON = 10,
  417. /*!
  418. * A note has been released.
  419. *
  420. * \param value1 Channel
  421. * \param value2 Note
  422. */
  423. CALLBACK_NOTE_OFF = 11,
  424. /*!
  425. * The plugin's custom GUI state has changed.
  426. *
  427. * \param value1 State, as follows:.\n
  428. * 0: GUI has been closed or hidden\n
  429. * 1: GUI has been shown\n
  430. * -1: GUI has crashed and should not be shown again
  431. */
  432. CALLBACK_SHOW_GUI = 12,
  433. /*!
  434. * The plugin needs update.
  435. */
  436. CALLBACK_UPDATE = 13,
  437. /*!
  438. * The plugin's data/information has changed.
  439. */
  440. CALLBACK_RELOAD_INFO = 14,
  441. /*!
  442. * The plugin's parameters have changed.
  443. */
  444. CALLBACK_RELOAD_PARAMETERS = 15,
  445. /*!
  446. * The plugin's programs have changed.
  447. */
  448. CALLBACK_RELOAD_PROGRAMS = 16,
  449. /*!
  450. * The plugin's state has changed.
  451. */
  452. CALLBACK_RELOAD_ALL = 17,
  453. /*!
  454. * Canvas client added
  455. *
  456. * \param value1 Client ID
  457. * \param valueStr Client Name
  458. */
  459. CALLBACK_PATCHBAY_CLIENT_ADDED = 18,
  460. /*!
  461. * Canvas client removed
  462. *
  463. * \param value1 Client ID
  464. */
  465. CALLBACK_PATCHBAY_CLIENT_REMOVED = 19,
  466. /*!
  467. * Canvas client renamed
  468. *
  469. * \param value1 Client ID
  470. * \param valueStr New Client name
  471. */
  472. CALLBACK_PATCHBAY_CLIENT_RENAMED = 20,
  473. /*!
  474. * Canvas port added
  475. *
  476. * \param value1 Client ID
  477. * \param value2 Port ID
  478. * \param valueStr Port name
  479. */
  480. CALLBACK_PATCHBAY_PORT_ADDED = 21,
  481. /*!
  482. * Canvas port remvoed
  483. *
  484. * \param value1 Port ID
  485. */
  486. CALLBACK_PATCHBAY_PORT_REMOVED = 22,
  487. /*!
  488. * Canvas port renamed
  489. *
  490. * \param value1 Port ID
  491. * \param valueStr New Port name
  492. */
  493. CALLBACK_PATCHBAY_PORT_RENAMED = 23,
  494. /*!
  495. * Canvas port connection added
  496. *
  497. * \param value1 Output port ID
  498. * \param value2 Input port ID
  499. */
  500. CALLBACK_PATCHBAY_CONNECTION_ADDED = 24,
  501. /*!
  502. * Canvas port connection removed
  503. *
  504. * \param value1 Output port ID
  505. * \param value2 Input port ID
  506. */
  507. CALLBACK_PATCHBAY_CONNECTION_REMOVED = 25,
  508. /*!
  509. * Non-Session-Manager Announce message.
  510. */
  511. CALLBACK_NSM_ANNOUNCE = 26,
  512. /*!
  513. * Non-Session-Manager Open message #1.
  514. */
  515. CALLBACK_NSM_OPEN1 = 27,
  516. /*!
  517. * Non-Session-Manager Open message #2.
  518. */
  519. CALLBACK_NSM_OPEN2 = 28,
  520. /*!
  521. * Non-Session-Manager Save message.
  522. */
  523. CALLBACK_NSM_SAVE = 29,
  524. /*!
  525. * An error occurred, show last error to user.
  526. */
  527. CALLBACK_ERROR = 30,
  528. /*!
  529. * The engine has crashed or malfunctioned and will no longer work.
  530. */
  531. CALLBACK_QUIT = 31
  532. };
  533. /*!
  534. * Engine process mode.
  535. *
  536. * \see OPTION_PROCESS_MODE
  537. */
  538. enum ProcessMode {
  539. PROCESS_MODE_SINGLE_CLIENT = 0, //!< Single client mode (dynamic input/outputs as needed by plugins)
  540. PROCESS_MODE_MULTIPLE_CLIENTS = 1, //!< Multiple client mode (1 master client + 1 client per plugin)
  541. PROCESS_MODE_CONTINUOUS_RACK = 2, //!< Single client, 'rack' mode. Processes plugins in order of id, with forced stereo.
  542. PROCESS_MODE_PATCHBAY = 3, //!< Single client, 'patchbay' mode.
  543. PROCESS_MODE_BRIDGE = 4 //!< Special mode, used in plugin-bridges only. RT buffers come from shared memory in a separate host app.
  544. };
  545. /*!
  546. * All the available transport modes
  547. */
  548. enum TransportMode {
  549. TRANSPORT_MODE_INTERNAL = 0, //!< Internal transport mode.
  550. TRANSPORT_MODE_JACK = 1 //!< JACK transport, only available if driver name is "JACK"
  551. };
  552. /*!
  553. * Callback function the engine will call when something interesting happens.
  554. *
  555. * \see CallbackType and set_callback_function()
  556. */
  557. typedef void (*CallbackFunc)(void* ptr, CallbackType action, unsigned int pluginId, int value1, int value2, float value3, const char* valueStr);
  558. /*!
  559. * Parameter data
  560. */
  561. struct ParameterData {
  562. ParameterType type;
  563. int32_t index;
  564. int32_t rindex;
  565. uint32_t hints;
  566. uint8_t midiChannel;
  567. int16_t midiCC;
  568. ParameterData()
  569. : type(PARAMETER_UNKNOWN),
  570. index(-1),
  571. rindex(-1),
  572. hints(0x0),
  573. midiChannel(0),
  574. midiCC(-1) {}
  575. };
  576. /*!
  577. * Parameter ranges
  578. */
  579. struct ParameterRanges {
  580. float def;
  581. float min;
  582. float max;
  583. float step;
  584. float stepSmall;
  585. float stepLarge;
  586. ParameterRanges()
  587. : def(0.0f),
  588. min(0.0f),
  589. max(1.0f),
  590. step(0.01f),
  591. stepSmall(0.0001f),
  592. stepLarge(0.1f) {}
  593. void fixDefault()
  594. {
  595. fixValue(def);
  596. }
  597. void fixValue(float& value) const
  598. {
  599. if (value < min)
  600. value = min;
  601. else if (value > max)
  602. value = max;
  603. }
  604. float fixValue(const float& value) const
  605. {
  606. if (value < min)
  607. return min;
  608. else if (value > max)
  609. return max;
  610. return value;
  611. }
  612. float normalizeValue(const float& value) const
  613. {
  614. return (value - min) / (max - min);
  615. }
  616. float unnormalizeValue(const float& value) const
  617. {
  618. return value * (max - min) + min;
  619. }
  620. };
  621. /*!
  622. * MIDI Program data
  623. */
  624. struct MidiProgramData {
  625. uint32_t bank;
  626. uint32_t program;
  627. const char* name;
  628. MidiProgramData()
  629. : bank(0),
  630. program(0),
  631. name(nullptr) {}
  632. ~MidiProgramData()
  633. {
  634. if (name != nullptr)
  635. delete[] name;
  636. }
  637. };
  638. /*!
  639. * Custom data, saving key:value 'dictionaries'.
  640. * \a type is an URI which defines the \a value type.
  641. *
  642. * \see CustomDataTypes
  643. */
  644. struct CustomData {
  645. const char* type;
  646. const char* key;
  647. const char* value;
  648. CustomData()
  649. : type(nullptr),
  650. key(nullptr),
  651. value(nullptr) {}
  652. };
  653. /**@}*/
  654. // forward declarations of commonly used Carla classes
  655. class CarlaEngine;
  656. class CarlaPlugin;
  657. CARLA_BACKEND_END_NAMESPACE
  658. #endif // __CARLA_BACKEND_HPP__