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 20KB

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
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
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
12 years ago
12 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685
  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
  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 CustomDataTypes Custom Data types
  90. *
  91. * The type defines how the \param value in CustomData is stored.
  92. *
  93. * Types are valid URIs.\n
  94. * Any non-string, non-simple type (not integral) is saved in a base64 encoded format.
  95. */
  96. const char* const CUSTOM_DATA_INVALID = nullptr; //!< Null/Invalid data.
  97. const char* const CUSTOM_DATA_CHUNK = "http://kxstudio.sf.net/ns/carla/chunk"; //!< Carla Chunk
  98. const char* const CUSTOM_DATA_STRING = "http://kxstudio.sf.net/ns/carla/string"; //!< Carla String
  99. /**@}*/
  100. #if 0
  101. /*!
  102. * @defgroup BridgeMessages Bridge Messages
  103. *
  104. * Various bridge related messages, used as configure(<message>, value).
  105. * \note This is for internal use only.
  106. *
  107. * TODO: Review these, may not be needed anymore
  108. * @{
  109. */
  110. const char* const CARLA_BRIDGE_MSG_HIDE_GUI = "CarlaBridgeHideGUI"; //!< Plugin -> Host call, tells host GUI is now hidden
  111. const char* const CARLA_BRIDGE_MSG_SAVED = "CarlaBridgeSaved"; //!< Plugin -> Host call, tells host state is saved
  112. const char* const CARLA_BRIDGE_MSG_SAVE_NOW = "CarlaBridgeSaveNow"; //!< Host -> Plugin call, tells plugin to save state now
  113. const char* const CARLA_BRIDGE_MSG_SET_CHUNK = "CarlaBridgeSetChunk"; //!< Host -> Plugin call, tells plugin to set chunk in file \a value
  114. 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.
  115. /**@}*/
  116. #endif
  117. /*!
  118. * The binary type of a plugin.
  119. */
  120. enum BinaryType {
  121. BINARY_NONE = 0, //!< Null binary type.
  122. BINARY_POSIX32 = 1, //!< POSIX 32bit.
  123. BINARY_POSIX64 = 2, //!< POSIX 64bit.
  124. BINARY_WIN32 = 3, //!< Windows 32bit.
  125. BINARY_WIN64 = 4, //!< Windows 64bit.
  126. BINARY_OTHER = 5 //!< Other.
  127. };
  128. /*!
  129. * All the available plugin types, as provided by subclasses of CarlaPlugin.\n
  130. * Some plugin classes might provide more than 1 plugin type.
  131. */
  132. enum PluginType {
  133. PLUGIN_NONE = 0, //!< Null plugin type.
  134. PLUGIN_INTERNAL = 1, //!< Internal plugin.\see NativePlugin
  135. PLUGIN_LADSPA = 2, //!< LADSPA plugin.\see LadspaPlugin
  136. PLUGIN_DSSI = 3, //!< DSSI plugin.\see DssiPlugin
  137. PLUGIN_LV2 = 4, //!< LV2 plugin.\see Lv2Plugin
  138. PLUGIN_VST = 5, //!< VST plugin.\see VstPlugin
  139. PLUGIN_GIG = 6, //!< GIG sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin
  140. PLUGIN_SF2 = 7, //!< SF2 sound kit (aka SoundFont), implemented via FluidSynth.\see FluidSynthPlugin
  141. PLUGIN_SFZ = 8 //!< SFZ sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin
  142. };
  143. /*!
  144. * Plugin category, describing the funtionality of a plugin.\n
  145. * When a plugin fails to tell his own category, one is atributted to it based on its name.
  146. */
  147. enum PluginCategory {
  148. PLUGIN_CATEGORY_NONE = 0, //!< Null plugin category.
  149. PLUGIN_CATEGORY_SYNTH = 1, //!< A synthesizer or generator.
  150. PLUGIN_CATEGORY_DELAY = 2, //!< A delay or reverberator.
  151. PLUGIN_CATEGORY_EQ = 3, //!< An equalizer.
  152. PLUGIN_CATEGORY_FILTER = 4, //!< A filter.
  153. PLUGIN_CATEGORY_DYNAMICS = 5, //!< A 'dynamic' plugin (amplifier, compressor, gate, etc).
  154. PLUGIN_CATEGORY_MODULATOR = 6, //!< A 'modulator' plugin (chorus, flanger, phaser, etc).
  155. PLUGIN_CATEGORY_UTILITY = 7, //!< An 'utility' plugin (analyzer, converter, mixer, etc).
  156. PLUGIN_CATEGORY_OTHER = 8 //!< Misc plugin (used to check if the plugin has a category).
  157. };
  158. /*!
  159. * Plugin parameter type.
  160. */
  161. enum ParameterType {
  162. PARAMETER_UNKNOWN = 0, //!< Null parameter type.
  163. PARAMETER_INPUT = 1, //!< Input parameter.
  164. PARAMETER_OUTPUT = 2, //!< Ouput parameter.
  165. PARAMETER_LATENCY = 3, //!< Special latency parameter, used in LADSPA, DSSI and LV2 plugins.
  166. PARAMETER_SAMPLE_RATE = 4, //!< Special sample-rate parameter, used in LADSPA, DSSI and LV2 plugins.
  167. #ifdef WANT_LV2
  168. PARAMETER_LV2_FREEWHEEL = 5, //!< Special LV2 Plugin parameter used to report freewheel (offline) mode.
  169. PARAMETER_LV2_TIME = 6 //!< Special LV2 Plugin parameter used to report time information.
  170. #endif
  171. };
  172. /*!
  173. * Internal parameter indexes.\n
  174. * These are special parameters used internally, plugins do not know about their existence.
  175. */
  176. enum InternalParametersIndex {
  177. PARAMETER_NULL = -1, //!< Null parameter.
  178. PARAMETER_ACTIVE = -2, //!< Active parameter, can only be 'true' or 'false'; default is 'false'.
  179. PARAMETER_DRYWET = -3, //!< Dry/Wet parameter, range 0.0...1.0; default is 1.0.
  180. PARAMETER_VOLUME = -4, //!< Volume parameter, range 0.0...1.27; default is 1.0.
  181. PARAMETER_BALANCE_LEFT = -5, //!< Stereo Balance-Left parameter, range -1.0...1.0; default is -1.0.
  182. PARAMETER_BALANCE_RIGHT = -6, //!< Stereo Balance-Right parameter, range -1.0...1.0; default is 1.0.
  183. PARAMETER_PANNING = -7, //!< Mono Panning parameter, range -1.0...1.0; default is 0.0.
  184. PARAMETER_CTRL_CHANNEL = -8, //!< MIDI Control channel
  185. PARAMETER_MAX = -9 //!< Max value, defined for convenience
  186. };
  187. /*!
  188. * Options used in the CarlaEngine::setOption() and set_option() calls.\n
  189. * These options must be set before initiliazing or after closing the engine.
  190. */
  191. enum OptionsType {
  192. /*!
  193. * Try to set the current process name.
  194. * \note Not available on all platforms.
  195. */
  196. OPTION_PROCESS_NAME = 0,
  197. /*!
  198. * Set the engine processing mode.\n
  199. * Default is PROCESS_MODE_CONTINUOUS_RACK.
  200. * \see ProcessMode
  201. */
  202. OPTION_PROCESS_MODE = 1,
  203. /*!
  204. * Set the engine transport mode.\n
  205. * Default is TRANSPORT_MODE_INTERNAL.
  206. * \see TransportMode
  207. */
  208. OPTION_TRANSPORT_MODE = 2,
  209. /*!
  210. * Force mono plugins as stereo, by running 2 instances at the same time.
  211. * \note Not supported by all plugins.
  212. */
  213. OPTION_FORCE_STEREO = 3,
  214. /*!
  215. * Use plugin bridges whenever possible.\n
  216. * Default is no, and not recommended at this point!.
  217. * EXPERIMENTAL AND INCOMPLETE!
  218. */
  219. OPTION_PREFER_PLUGIN_BRIDGES = 4,
  220. /*!
  221. * Use OSC-UI bridges whenever possible, otherwise UIs will be handled in the main thread.\n
  222. * Default is yes.
  223. */
  224. OPTION_PREFER_UI_BRIDGES = 5,
  225. #ifdef WANT_DSSI
  226. /*!
  227. * Use (unofficial) dssi-vst chunks feature.\n
  228. * Default is no.
  229. */
  230. OPTION_USE_DSSI_VST_CHUNKS = 6,
  231. #endif
  232. /*!
  233. * Maximum number of parameters allowed.\n
  234. * Default is MAX_DEFAULT_PARAMETERS.
  235. */
  236. OPTION_MAX_PARAMETERS = 7,
  237. /*!
  238. * Timeout value in ms for how much to wait for OSC-Bridges to respond.\n
  239. * Default is 4000 (4 secs).
  240. */
  241. OPTION_OSC_UI_TIMEOUT = 8,
  242. /*!
  243. * Prefered buffer size.
  244. */
  245. OPTION_PREFERRED_BUFFER_SIZE = 9,
  246. /*!
  247. * Prefered sample rate.
  248. */
  249. OPTION_PREFERRED_SAMPLE_RATE = 10,
  250. #ifndef BUILD_BRIDGE
  251. /*!
  252. * Set path to the native plugin bridge executable.\n
  253. * Default unset.
  254. */
  255. OPTION_PATH_BRIDGE_NATIVE = 11,
  256. /*!
  257. * Set path to the POSIX 32bit plugin bridge executable.\n
  258. * Default unset.
  259. */
  260. OPTION_PATH_BRIDGE_POSIX32 = 12,
  261. /*!
  262. * Set path to the POSIX 64bit plugin bridge executable.\n
  263. * Default unset.
  264. */
  265. OPTION_PATH_BRIDGE_POSIX64 = 13,
  266. /*!
  267. * Set path to the Windows 32bit plugin bridge executable.\n
  268. * Default unset.
  269. */
  270. OPTION_PATH_BRIDGE_WIN32 = 14,
  271. /*!
  272. * Set path to the Windows 64bit plugin bridge executable.\n
  273. * Default unset.
  274. */
  275. OPTION_PATH_BRIDGE_WIN64 = 15,
  276. #endif
  277. #ifdef WANT_LV2
  278. /*!
  279. * Set path to the LV2 Gtk2 UI bridge executable.\n
  280. * Default unset.
  281. */
  282. OPTION_PATH_BRIDGE_LV2_GTK2 = 16,
  283. /*!
  284. * Set path to the LV2 Gtk3 UI bridge executable.\n
  285. * Default unset.
  286. */
  287. OPTION_PATH_BRIDGE_LV2_GTK3 = 17,
  288. /*!
  289. * Set path to the LV2 Qt4 UI bridge executable.\n
  290. * Default unset.
  291. */
  292. OPTION_PATH_BRIDGE_LV2_QT4 = 18,
  293. /*!
  294. * Set path to the LV2 Qt5 UI bridge executable.\n
  295. * Default unset.
  296. */
  297. OPTION_PATH_BRIDGE_LV2_QT5 = 19,
  298. /*!
  299. * Set path to the LV2 Cocoa UI bridge executable.\n
  300. * Default unset.
  301. */
  302. OPTION_PATH_BRIDGE_LV2_COCOA = 20,
  303. /*!
  304. * Set path to the LV2 Windows UI bridge executable.\n
  305. * Default unset.
  306. */
  307. OPTION_PATH_BRIDGE_LV2_WINDOWS = 21,
  308. /*!
  309. * Set path to the LV2 X11 UI bridge executable.\n
  310. * Default unset.
  311. */
  312. OPTION_PATH_BRIDGE_LV2_X11 = 22,
  313. #endif
  314. #ifdef WANT_VST
  315. /*!
  316. * Set path to the VST Cocoa UI bridge executable.\n
  317. * Default unset.
  318. */
  319. OPTION_PATH_BRIDGE_VST_COCOA = 23,
  320. /*!
  321. * Set path to the VST HWND UI bridge executable.\n
  322. * Default unset.
  323. */
  324. OPTION_PATH_BRIDGE_VST_HWND = 24,
  325. /*!
  326. * Set path to the VST X11 UI bridge executable.\n
  327. * Default unset.
  328. */
  329. OPTION_PATH_BRIDGE_VST_X11 = 25
  330. #endif
  331. };
  332. /*!
  333. * Opcodes sent from the engine callback to the GUI, as defined by CallbackFunc.
  334. *
  335. * \see CarlaEngine::setCallback()
  336. * \see set_callback_function()
  337. */
  338. enum CallbackType {
  339. /*!
  340. * Debug.\n
  341. * This opcode is undefined and used only for testing purposes.
  342. */
  343. CALLBACK_DEBUG = 0,
  344. /*!
  345. * A plugin has been added.
  346. */
  347. CALLBACK_PLUGIN_ADDED = 1,
  348. /*!
  349. * A plugin has been removed.
  350. */
  351. CALLBACK_PLUGIN_REMOVED = 2,
  352. /*!
  353. * A parameter value has been changed.
  354. *
  355. * \param value1 Parameter index
  356. * \param value3 Value
  357. */
  358. CALLBACK_PARAMETER_VALUE_CHANGED = 3,
  359. /*!
  360. * A parameter default has been changed.
  361. *
  362. * \param value1 Parameter index
  363. * \param value3 Default value
  364. */
  365. CALLBACK_PARAMETER_DEFAULT_CHANGED = 4,
  366. /*!
  367. * A parameter's MIDI channel has been changed.
  368. *
  369. * \param value1 Parameter index
  370. * \param value2 MIDI channel
  371. */
  372. CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED = 5,
  373. /*!
  374. * A parameter's MIDI CC has been changed.
  375. *
  376. * \param value1 Parameter index
  377. * \param value2 MIDI CC
  378. */
  379. CALLBACK_PARAMETER_MIDI_CC_CHANGED = 6,
  380. /*!
  381. * The current program has has been changed.
  382. *
  383. * \param value1 Program index
  384. */
  385. CALLBACK_PROGRAM_CHANGED = 7,
  386. /*!
  387. * The current MIDI program has been changed.
  388. *
  389. * \param value1 MIDI bank
  390. * \param value2 MIDI program
  391. */
  392. CALLBACK_MIDI_PROGRAM_CHANGED = 8,
  393. /*!
  394. * A note has been pressed.
  395. *
  396. * \param value1 Channel
  397. * \param value2 Note
  398. * \param value3 Velocity
  399. */
  400. CALLBACK_NOTE_ON = 9,
  401. /*!
  402. * A note has been released.
  403. *
  404. * \param value1 Channel
  405. * \param value2 Note
  406. */
  407. CALLBACK_NOTE_OFF = 10,
  408. /*!
  409. * The plugin's custom GUI state has changed.
  410. *
  411. * \param value1 State, as follows:.\n
  412. * 0: GUI has been closed or hidden\n
  413. * 1: GUI has been shown\n
  414. * -1: GUI has crashed and should not be shown again
  415. */
  416. CALLBACK_SHOW_GUI = 11,
  417. /*!
  418. * The plugin needs update.
  419. */
  420. CALLBACK_UPDATE = 12,
  421. /*!
  422. * The plugin's data/information has changed.
  423. */
  424. CALLBACK_RELOAD_INFO = 13,
  425. /*!
  426. * The plugin's parameters have changed.
  427. */
  428. CALLBACK_RELOAD_PARAMETERS = 14,
  429. /*!
  430. * The plugin's programs have changed.
  431. */
  432. CALLBACK_RELOAD_PROGRAMS = 15,
  433. /*!
  434. * The plugin's state has changed.
  435. */
  436. CALLBACK_RELOAD_ALL = 16,
  437. /*!
  438. * Non-Session-Manager Announce message.
  439. */
  440. CALLBACK_NSM_ANNOUNCE = 17,
  441. /*!
  442. * Non-Session-Manager Open message #1.
  443. */
  444. CALLBACK_NSM_OPEN1 = 18,
  445. /*!
  446. * Non-Session-Manager Open message #2.
  447. */
  448. CALLBACK_NSM_OPEN2 = 19,
  449. /*!
  450. * Non-Session-Manager Save message.
  451. */
  452. CALLBACK_NSM_SAVE = 20,
  453. /*!
  454. * An error occurred, show last error to user.
  455. */
  456. CALLBACK_ERROR = 21,
  457. /*!
  458. * The engine has crashed or malfunctioned and will no longer work.
  459. */
  460. CALLBACK_QUIT = 22
  461. };
  462. /*!
  463. * Engine process mode.
  464. *
  465. * \see OPTION_PROCESS_MODE
  466. */
  467. enum ProcessMode {
  468. PROCESS_MODE_SINGLE_CLIENT = 0, //!< Single client mode (dynamic input/outputs as needed by plugins)
  469. PROCESS_MODE_MULTIPLE_CLIENTS = 1, //!< Multiple client mode (1 master client + 1 client per plugin)
  470. PROCESS_MODE_CONTINUOUS_RACK = 2, //!< Single client, 'rack' mode. Processes plugins in order of id, with forced stereo.
  471. PROCESS_MODE_PATCHBAY = 3, //!< Single client, 'patchbay' mode.
  472. PROCESS_MODE_BRIDGE = 4 //!< Special mode, used in plugin-bridges only. RT buffers come from shared memory in a separate host app.
  473. };
  474. /*!
  475. * All the available transport modes
  476. */
  477. enum TransportMode {
  478. TRANSPORT_MODE_INTERNAL = 0, //!< Internal transport mode.
  479. TRANSPORT_MODE_JACK = 1, //!< JACK transport, only available if driver name is "JACK"
  480. };
  481. /*!
  482. * Callback function the engine will call when something interesting happens.
  483. *
  484. * \see CallbackType and set_callback_function()
  485. */
  486. typedef void (*CallbackFunc)(void* ptr, CallbackType action, unsigned int pluginId, int value1, int value2, float value3, const char* valueStr);
  487. /*!
  488. * Parameter data
  489. */
  490. struct ParameterData {
  491. ParameterType type;
  492. int32_t index;
  493. int32_t rindex;
  494. uint32_t hints;
  495. uint8_t midiChannel;
  496. int16_t midiCC;
  497. ParameterData()
  498. : type(PARAMETER_UNKNOWN),
  499. index(-1),
  500. rindex(-1),
  501. hints(0x0),
  502. midiChannel(0),
  503. midiCC(-1) {}
  504. };
  505. /*!
  506. * Parameter ranges
  507. */
  508. struct ParameterRanges {
  509. float def;
  510. float min;
  511. float max;
  512. float step;
  513. float stepSmall;
  514. float stepLarge;
  515. ParameterRanges()
  516. : def(0.0f),
  517. min(0.0f),
  518. max(1.0f),
  519. step(0.01f),
  520. stepSmall(0.0001f),
  521. stepLarge(0.1f) {}
  522. void fixDefault()
  523. {
  524. fixValue(def);
  525. }
  526. void fixValue(float& value) const
  527. {
  528. if (value < min)
  529. value = min;
  530. else if (value > max)
  531. value = max;
  532. }
  533. float fixValue(const float& value) const
  534. {
  535. if (value < min)
  536. return min;
  537. else if (value > max)
  538. return max;
  539. return value;
  540. }
  541. float normalizeValue(const float& value) const
  542. {
  543. return (value - min) / (max - min);
  544. }
  545. float unnormalizeValue(const float& value) const
  546. {
  547. return value * (max - min) + min;
  548. }
  549. };
  550. /*!
  551. * MIDI Program data
  552. */
  553. struct MidiProgramData {
  554. uint32_t bank;
  555. uint32_t program;
  556. const char* name;
  557. MidiProgramData()
  558. : bank(0),
  559. program(0),
  560. name(nullptr) {}
  561. ~MidiProgramData()
  562. {
  563. if (name != nullptr)
  564. delete[] name;
  565. }
  566. };
  567. /*!
  568. * Custom data, saving key:value 'dictionaries'.
  569. * \a type is an URI which defines the \a value type.
  570. *
  571. * \see CustomDataTypes
  572. */
  573. struct CustomData {
  574. const char* type;
  575. const char* key;
  576. const char* value;
  577. CustomData()
  578. : type(nullptr),
  579. key(nullptr),
  580. value(nullptr) {}
  581. ~CustomData()
  582. {
  583. if (type != nullptr)
  584. delete[] type;
  585. if (key != nullptr)
  586. delete[] key;
  587. if (value != nullptr)
  588. delete[] value;
  589. }
  590. };
  591. /**@}*/
  592. // forward declarations of commonly used Carla classes
  593. class CarlaEngine;
  594. class CarlaPlugin;
  595. CARLA_BACKEND_END_NAMESPACE
  596. #endif // __CARLA_BACKEND_HPP__