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.h 29KB

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
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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371
  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 doc/GPL.txt file.
  16. */
  17. #ifndef CARLA_BACKEND_H_INCLUDED
  18. #define CARLA_BACKEND_H_INCLUDED
  19. #include "CarlaDefines.h"
  20. #ifdef CARLA_PROPER_CPP11_SUPPORT
  21. # include <cstdint>
  22. #else
  23. # include <stdint.h>
  24. #endif
  25. #define STR_MAX 0xFF
  26. #ifdef __cplusplus
  27. # define CARLA_BACKEND_START_NAMESPACE namespace CarlaBackend {
  28. # define CARLA_BACKEND_END_NAMESPACE }
  29. # define CARLA_BACKEND_USE_NAMESPACE using namespace CarlaBackend;
  30. /* Start namespace */
  31. CARLA_BACKEND_START_NAMESPACE
  32. #endif
  33. /*!
  34. * @defgroup CarlaBackendAPI Carla Backend API
  35. *
  36. * The Carla Backend API.
  37. *
  38. * These are the base definitions for everything in the Carla backend code.
  39. * @{
  40. */
  41. // ------------------------------------------------------------------------------------------------------------
  42. // Carla Backend API (base definitions)
  43. /*!
  44. * Maximum default number of loadable plugins.
  45. */
  46. const unsigned int MAX_DEFAULT_PLUGINS = 99;
  47. /*!
  48. * Maximum number of loadable plugins in rack mode.
  49. */
  50. const unsigned int MAX_RACK_PLUGINS = 16;
  51. /*!
  52. * Maximum number of loadable plugins in patchbay mode.
  53. */
  54. const unsigned int MAX_PATCHBAY_PLUGINS = 255;
  55. /*!
  56. * Maximum default number of parameters allowed.
  57. * @see ENGINE_OPTION_MAX_PARAMETERS
  58. */
  59. const unsigned int MAX_DEFAULT_PARAMETERS = 200;
  60. // ------------------------------------------------------------------------------------------------------------
  61. // Engine Driver Device Hints
  62. /*!
  63. * @defgroup EngineDriverHints Engine Driver Device Hints
  64. *
  65. * Various engine driver device hints.
  66. * @see CarlaEngine::getHints(), CarlaEngine::getDriverDeviceInfo() and carla_get_engine_driver_device_info()
  67. * @{
  68. */
  69. /*!
  70. * Engine driver device has custom control-panel.
  71. */
  72. const unsigned int ENGINE_DRIVER_DEVICE_HAS_CONTROL_PANEL = 0x1;
  73. /*!
  74. * Engine driver device can change buffer-size on the fly.
  75. * @see ENGINE_OPTION_AUDIO_BUFFER_SIZE
  76. */
  77. const unsigned int ENGINE_DRIVER_DEVICE_VARIABLE_BUFFER_SIZE = 0x2;
  78. /*!
  79. * Engine driver device can change sample-rate on the fly.
  80. * @see ENGINE_OPTION_AUDIO_SAMPLE_RATE
  81. */
  82. const unsigned int ENGINE_DRIVER_DEVICE_VARIABLE_SAMPLE_RATE = 0x4;
  83. /** @} */
  84. // ------------------------------------------------------------------------------------------------------------
  85. // Plugin Hints
  86. /*!
  87. * @defgroup PluginHints Plugin Hints
  88. *
  89. * Various plugin hints.
  90. * @see CarlaPlugin::getHints() and carla_get_plugin_info()
  91. * @{
  92. */
  93. /*!
  94. * Plugin is a bridge.\n
  95. * This hint is required because "bridge" itself is not a plugin type.
  96. */
  97. const unsigned int PLUGIN_IS_BRIDGE = 0x001;
  98. /*!
  99. * Plugin is hard real-time safe.
  100. */
  101. const unsigned int PLUGIN_IS_RTSAFE = 0x002;
  102. /*!
  103. * Plugin is a synth (produces sound).
  104. */
  105. const unsigned int PLUGIN_IS_SYNTH = 0x004;
  106. /*!
  107. * Plugin has its own custom UI.
  108. * @see CarlaPlugin::showCustomUI() and carla_show_custom_ui()
  109. */
  110. const unsigned int PLUGIN_HAS_CUSTOM_UI = 0x008;
  111. /*!
  112. * Plugin can use internal Dry/Wet control.
  113. */
  114. const unsigned int PLUGIN_CAN_DRYWET = 0x010;
  115. /*!
  116. * Plugin can use internal Volume control.
  117. */
  118. const unsigned int PLUGIN_CAN_VOLUME = 0x020;
  119. /*!
  120. * Plugin can use internal (Stereo) Balance controls.
  121. */
  122. const unsigned int PLUGIN_CAN_BALANCE = 0x040;
  123. /*!
  124. * Plugin can use internal (Mono) Panning control.
  125. */
  126. const unsigned int PLUGIN_CAN_PANNING = 0x080;
  127. /*!
  128. * Plugin needs a constant, fixed-size audio buffer.
  129. */
  130. const unsigned int PLUGIN_NEEDS_FIXED_BUFFERS = 0x100;
  131. /*!
  132. * Plugin needs all UI events in a single/main thread.
  133. */
  134. const unsigned int PLUGIN_NEEDS_SINGLE_THREAD = 0x200;
  135. /** @} */
  136. // ------------------------------------------------------------------------------------------------------------
  137. // Plugin Options
  138. /*!
  139. * @defgroup PluginOptions Plugin Options
  140. *
  141. * Various plugin options.
  142. * @see CarlaPlugin::getOptionsAvailable(), CarlaPlugin::getOptionsEnabled(), carla_get_plugin_info() and carla_set_option()
  143. * @{
  144. */
  145. /*!
  146. * Use constant/fixed-size audio buffers.
  147. */
  148. const unsigned int PLUGIN_OPTION_FIXED_BUFFERS = 0x001;
  149. /*!
  150. * Force mono plugin as stereo.
  151. */
  152. const unsigned int PLUGIN_OPTION_FORCE_STEREO = 0x002;
  153. /*!
  154. * Map MIDI programs to plugin programs.
  155. */
  156. const unsigned int PLUGIN_OPTION_MAP_PROGRAM_CHANGES = 0x004;
  157. /*!
  158. * Use chunks to save and restore data.
  159. */
  160. const unsigned int PLUGIN_OPTION_USE_CHUNKS = 0x008;
  161. /*!
  162. * Send MIDI control change events.
  163. */
  164. const unsigned int PLUGIN_OPTION_SEND_CONTROL_CHANGES = 0x010;
  165. /*!
  166. * Send MIDI channel pressure events.
  167. */
  168. const unsigned int PLUGIN_OPTION_SEND_CHANNEL_PRESSURE = 0x020;
  169. /*!
  170. * Send MIDI note after-touch events.
  171. */
  172. const unsigned int PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH = 0x040;
  173. /*!
  174. * Send MIDI pitch-bend events.
  175. */
  176. const unsigned int PLUGIN_OPTION_SEND_PITCHBEND = 0x080;
  177. /*!
  178. * Send MIDI all-sounds/notes-off events, single note-offs otherwise.
  179. */
  180. const unsigned int PLUGIN_OPTION_SEND_ALL_SOUND_OFF = 0x100;
  181. /** @} */
  182. // ------------------------------------------------------------------------------------------------------------
  183. // Parameter Hints
  184. /*!
  185. * @defgroup ParameterHints Parameter Hints
  186. *
  187. * Various parameter hints.
  188. * @see CarlaPlugin::getParameterData() and carla_get_parameter_data()
  189. * @{
  190. */
  191. /*!
  192. * Parameter value is boolean.
  193. * It's always at either minimum or maximum value.
  194. */
  195. const unsigned int PARAMETER_IS_BOOLEAN = 0x001;
  196. /*!
  197. * Parameter value is integer.
  198. */
  199. const unsigned int PARAMETER_IS_INTEGER = 0x002;
  200. /*!
  201. * Parameter value is logarithmic.
  202. */
  203. const unsigned int PARAMETER_IS_LOGARITHMIC = 0x004;
  204. /*!
  205. * Parameter is enabled.
  206. * It can be viewed, changed and stored.
  207. */
  208. const unsigned int PARAMETER_IS_ENABLED = 0x010;
  209. /*!
  210. * Parameter is automable (real-time safe).
  211. */
  212. const unsigned int PARAMETER_IS_AUTOMABLE = 0x020;
  213. /*!
  214. * Parameter is read-only.
  215. * It cannot be changed.
  216. */
  217. const unsigned int PARAMETER_IS_READ_ONLY = 0x040;
  218. /*!
  219. * Parameter needs sample rate to work.
  220. * Value and ranges are multiplied by sample rate on usage and divided by sample rate on save.
  221. */
  222. const unsigned int PARAMETER_USES_SAMPLERATE = 0x100;
  223. /*!
  224. * Parameter uses scale points to define internal values in a meaningful way.
  225. */
  226. const unsigned int PARAMETER_USES_SCALEPOINTS = 0x200;
  227. /*!
  228. * Parameter uses custom text for displaying its value.
  229. * @see CarlaPlugin::getParameterText() and carla_get_parameter_text()
  230. */
  231. const unsigned int PARAMETER_USES_CUSTOM_TEXT = 0x400;
  232. /** @} */
  233. // ------------------------------------------------------------------------------------------------------------
  234. // Patchbay Port Hints
  235. /*!
  236. * @defgroup PatchbayPortHints Patchbay Port Hints
  237. *
  238. * Various patchbay port hints.
  239. * @{
  240. */
  241. /*!
  242. * Patchbay port is input.\n
  243. * When this hint is not set, port is assumed to be output.
  244. */
  245. const unsigned int PATCHBAY_PORT_IS_INPUT = 0x1;
  246. /*!
  247. * Patchbay port is of Audio type.
  248. */
  249. const unsigned int PATCHBAY_PORT_TYPE_AUDIO = 0x2;
  250. /*!
  251. * Patchbay port is of CV type (Control Voltage).
  252. */
  253. const unsigned int PATCHBAY_PORT_TYPE_CV = 0x4;
  254. /*!
  255. * Patchbay port is of MIDI type.
  256. */
  257. const unsigned int PATCHBAY_PORT_TYPE_MIDI = 0x8;
  258. /** @} */
  259. // ------------------------------------------------------------------------------------------------------------
  260. // Custom Data Types
  261. /*!
  262. * @defgroup CustomDataTypes Custom Data Types
  263. *
  264. * These types define how the value in the CustomData struct is stored.
  265. * @see CustomData::type
  266. * @{
  267. */
  268. /*!
  269. * Boolean string type URI.\n
  270. * Only "true" and "false" are valid values.
  271. */
  272. const char* const CUSTOM_DATA_TYPE_BOOLEAN = "http://kxstudio.sf.net/ns/carla/boolean";
  273. /*!
  274. * Chunk type URI.
  275. */
  276. const char* const CUSTOM_DATA_TYPE_CHUNK = "http://kxstudio.sf.net/ns/carla/chunk";
  277. /*!
  278. * String type URI.
  279. */
  280. const char* const CUSTOM_DATA_TYPE_STRING = "http://kxstudio.sf.net/ns/carla/string";
  281. /** @} */
  282. // ------------------------------------------------------------------------------------------------------------
  283. // Custom Data Keys
  284. /*!
  285. * @defgroup CustomDataKeys Custom Data Keys
  286. *
  287. * Pre-defined keys used internally in Carla.
  288. * @see CustomData::key
  289. * @{
  290. */
  291. /*!
  292. * Plugin options key.
  293. */
  294. const char* const CUSTOM_DATA_KEY_PLUGIN_OPTIONS = "CarlaPluginOptions";
  295. /*!
  296. * UI position key.
  297. */
  298. const char* const CUSTOM_DATA_KEY_UI_POSITION = "CarlaUiPosition";
  299. /*!
  300. * UI size key.
  301. */
  302. const char* const CUSTOM_DATA_KEY_UI_SIZE = "CarlaUiSize";
  303. /*!
  304. * UI visible key.
  305. */
  306. const char* const CUSTOM_DATA_KEY_UI_VISIBLE = "CarlaUiVisible";
  307. /** @} */
  308. // ------------------------------------------------------------------------------------------------------------
  309. // Binary Type
  310. /*!
  311. * The binary type of a plugin.
  312. */
  313. typedef enum {
  314. /*!
  315. * Null binary type.
  316. */
  317. BINARY_NONE = 0,
  318. /*!
  319. * POSIX 32bit binary.
  320. */
  321. BINARY_POSIX32 = 1,
  322. /*!
  323. * POSIX 64bit binary.
  324. */
  325. BINARY_POSIX64 = 2,
  326. /*!
  327. * Windows 32bit binary.
  328. */
  329. BINARY_WIN32 = 3,
  330. /*!
  331. * Windows 64bit binary.
  332. */
  333. BINARY_WIN64 = 4,
  334. /*!
  335. * Other binary type.
  336. */
  337. BINARY_OTHER = 5
  338. } BinaryType;
  339. // ------------------------------------------------------------------------------------------------------------
  340. // Plugin Type
  341. /*!
  342. * Plugin type.
  343. * Some files are handled as if they were plugins.
  344. */
  345. typedef enum {
  346. /*!
  347. * Null plugin type.
  348. */
  349. PLUGIN_NONE = 0,
  350. /*!
  351. * Internal plugin.
  352. */
  353. PLUGIN_INTERNAL = 1,
  354. /*!
  355. * LADSPA plugin.
  356. */
  357. PLUGIN_LADSPA = 2,
  358. /*!
  359. * DSSI plugin.
  360. */
  361. PLUGIN_DSSI = 3,
  362. /*!
  363. * LV2 plugin.
  364. */
  365. PLUGIN_LV2 = 4,
  366. /*!
  367. * VST plugin.
  368. */
  369. PLUGIN_VST = 5,
  370. /*!
  371. * AU plugin.
  372. * @note MacOS only
  373. */
  374. PLUGIN_AU = 6,
  375. /*!
  376. * Csound file.
  377. */
  378. PLUGIN_CSOUND = 7,
  379. /*!
  380. * GIG file.
  381. */
  382. PLUGIN_GIG = 8,
  383. /*!
  384. * SF2 file (also known as SoundFont).
  385. */
  386. PLUGIN_SF2 = 9,
  387. /*!
  388. * SFZ file.
  389. */
  390. PLUGIN_SFZ = 10
  391. } PluginType;
  392. // ------------------------------------------------------------------------------------------------------------
  393. // Plugin Category
  394. /*!
  395. * Plugin category, which describes the functionality of a plugin.
  396. */
  397. typedef enum {
  398. /*!
  399. * Null plugin category.
  400. */
  401. PLUGIN_CATEGORY_NONE = 0,
  402. /*!
  403. * A synthesizer or generator.
  404. */
  405. PLUGIN_CATEGORY_SYNTH = 1,
  406. /*!
  407. * A delay or reverb.
  408. */
  409. PLUGIN_CATEGORY_DELAY = 2,
  410. /*!
  411. * An equalizer.
  412. */
  413. PLUGIN_CATEGORY_EQ = 3,
  414. /*!
  415. * A filter.
  416. */
  417. PLUGIN_CATEGORY_FILTER = 4,
  418. /*!
  419. * A distortion plugin.
  420. */
  421. PLUGIN_CATEGORY_DISTORTION = 5,
  422. /*!
  423. * A 'dynamic' plugin (amplifier, compressor, gate, etc).
  424. */
  425. PLUGIN_CATEGORY_DYNAMICS = 6,
  426. /*!
  427. * A 'modulator' plugin (chorus, flanger, phaser, etc).
  428. */
  429. PLUGIN_CATEGORY_MODULATOR = 7,
  430. /*!
  431. * An 'utility' plugin (analyzer, converter, mixer, etc).
  432. */
  433. PLUGIN_CATEGORY_UTILITY = 8,
  434. /*!
  435. * Miscellaneous plugin (used to check if the plugin has a category).
  436. */
  437. PLUGIN_CATEGORY_OTHER = 9
  438. } PluginCategory;
  439. // ------------------------------------------------------------------------------------------------------------
  440. // Parameter Type
  441. /*!
  442. * Plugin parameter type.
  443. */
  444. typedef enum {
  445. /*!
  446. * Null parameter type.
  447. */
  448. PARAMETER_UNKNOWN = 0,
  449. /*!
  450. * Input parameter.
  451. */
  452. PARAMETER_INPUT = 1,
  453. /*!
  454. * Ouput parameter.
  455. */
  456. PARAMETER_OUTPUT = 2,
  457. /*!
  458. * Special (hidden) parameter.
  459. */
  460. PARAMETER_SPECIAL = 3
  461. } ParameterType;
  462. // ------------------------------------------------------------------------------------------------------------
  463. // Internal Parameter Index
  464. /*!
  465. * Special parameters used internally in Carla.\n
  466. * Plugins do not know about their existence.
  467. */
  468. typedef enum {
  469. /*!
  470. * Null parameter.
  471. */
  472. PARAMETER_NULL = -1,
  473. /*!
  474. * Active parameter, boolean type.\n
  475. * Default is 'false'.
  476. */
  477. PARAMETER_ACTIVE = -2,
  478. /*!
  479. * Dry/Wet parameter.\n
  480. * Range 0.0...1.0; default is 1.0.
  481. */
  482. PARAMETER_DRYWET = -3,
  483. /*!
  484. * Volume parameter.\n
  485. * Range 0.0...1.27; default is 1.0.
  486. */
  487. PARAMETER_VOLUME = -4,
  488. /*!
  489. * Stereo Balance-Left parameter.\n
  490. * Range -1.0...1.0; default is -1.0.
  491. */
  492. PARAMETER_BALANCE_LEFT = -5,
  493. /*!
  494. * Stereo Balance-Right parameter.\n
  495. * Range -1.0...1.0; default is 1.0.
  496. */
  497. PARAMETER_BALANCE_RIGHT = -6,
  498. /*!
  499. * Mono Panning parameter.\n
  500. * Range -1.0...1.0; default is 0.0.
  501. */
  502. PARAMETER_PANNING = -7,
  503. /*!
  504. * MIDI Control channel, integer type.\n
  505. * Range -1...15 (-1 = off).
  506. */
  507. PARAMETER_CTRL_CHANNEL = -8,
  508. /*!
  509. * Max value, defined only for convenience.
  510. */
  511. PARAMETER_MAX = -9
  512. } InternalParameterIndex;
  513. // ------------------------------------------------------------------------------------------------------------
  514. // Engine Callback Opcode
  515. /*!
  516. * Engine callback opcodes.\n
  517. * Front-ends must never block indefinitely during a callback.
  518. * @see EngineCallbackFunc, CarlaEngine::setCallback() and carla_set_engine_callback()
  519. */
  520. typedef enum {
  521. /*!
  522. * Debug.\n
  523. * This opcode is undefined and used only for testing purposes.
  524. */
  525. ENGINE_CALLBACK_DEBUG = 0,
  526. /*!
  527. * A plugin has been added.
  528. * @param pluginId Plugin Id
  529. * @param valueStr Plugin name
  530. */
  531. ENGINE_CALLBACK_PLUGIN_ADDED = 1,
  532. /*!
  533. * A plugin has been removed.
  534. * @param pluginId Plugin Id
  535. */
  536. ENGINE_CALLBACK_PLUGIN_REMOVED = 2,
  537. /*!
  538. * A plugin has been renamed.
  539. * @param pluginId Plugin Id
  540. * @param valueStr New plugin name
  541. */
  542. ENGINE_CALLBACK_PLUGIN_RENAMED = 3,
  543. /*!
  544. * A plugin has become unavailable.
  545. * @param pluginId Plugin Id
  546. * @param valueStr Related error string
  547. */
  548. ENGINE_CALLBACK_PLUGIN_UNAVAILABLE = 4,
  549. /*!
  550. * A parameter value has changed.
  551. * @param pluginId Plugin Id
  552. * @param value1 Parameter index
  553. * @param value3 New parameter value
  554. */
  555. ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED = 5,
  556. /*!
  557. * A parameter default has changed.
  558. * @param pluginId Plugin Id
  559. * @param value1 Parameter index
  560. * @param value3 New default value
  561. */
  562. ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED = 6,
  563. /*!
  564. * A parameter's MIDI CC has changed.
  565. * @param pluginId Plugin Id
  566. * @param value1 Parameter index
  567. * @param value2 New MIDI CC
  568. */
  569. ENGINE_CALLBACK_PARAMETER_MIDI_CC_CHANGED = 7,
  570. /*!
  571. * A parameter's MIDI channel has changed.
  572. * @param pluginId Plugin Id
  573. * @param value1 Parameter index
  574. * @param value2 New MIDI channel
  575. */
  576. ENGINE_CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED = 8,
  577. /*!
  578. * The current program of a plugin has changed.
  579. * @param pluginId Plugin Id
  580. * @param value1 New program index
  581. */
  582. ENGINE_CALLBACK_PROGRAM_CHANGED = 9,
  583. /*!
  584. * The current MIDI program of a plugin has changed.
  585. * @param pluginId Plugin Id
  586. * @param value1 New MIDI program index
  587. */
  588. ENGINE_CALLBACK_MIDI_PROGRAM_CHANGED = 10,
  589. /*!
  590. * A plugin's custom UI state has changed.
  591. * @param pluginId Plugin Id
  592. * @param value1 New state, as follows:\n
  593. * 0: UI is now hidden\n
  594. * 1: UI is now visible\n
  595. * -1: UI has crashed and should not be shown again
  596. */
  597. ENGINE_CALLBACK_UI_STATE_CHANGED = 11,
  598. /*!
  599. * A note has been pressed.
  600. * @param pluginId Plugin Id
  601. * @param value1 Channel
  602. * @param value2 Note
  603. * @param value3 Velocity
  604. */
  605. ENGINE_CALLBACK_NOTE_ON = 12,
  606. /*!
  607. * A note has been released.
  608. * @param pluginId Plugin Id
  609. * @param value1 Channel
  610. * @param value2 Note
  611. */
  612. ENGINE_CALLBACK_NOTE_OFF = 13,
  613. /*!
  614. * A plugin needs update.
  615. * @param pluginId Plugin Id
  616. */
  617. ENGINE_CALLBACK_UPDATE = 14,
  618. /*!
  619. * A plugin's data/information has changed.
  620. * @param pluginId Plugin Id
  621. */
  622. ENGINE_CALLBACK_RELOAD_INFO = 15,
  623. /*!
  624. * A plugin's parameters have changed.
  625. * @param pluginId Plugin Id
  626. */
  627. ENGINE_CALLBACK_RELOAD_PARAMETERS = 16,
  628. /*!
  629. * A plugin's programs have changed.
  630. * @param pluginId Plugin Id
  631. */
  632. ENGINE_CALLBACK_RELOAD_PROGRAMS = 17,
  633. /*!
  634. * A plugin state has changed.
  635. * @param pluginId Plugin Id
  636. */
  637. ENGINE_CALLBACK_RELOAD_ALL = 18,
  638. /*!
  639. * A patchbay client has been added.
  640. * @param pluginId Client Id
  641. * @param value1 Client icon
  642. * @param valueStr Client name
  643. * @see PatchbayIcon
  644. */
  645. ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED = 19,
  646. /*!
  647. * A patchbay client has been removed.
  648. * @param pluginId Client Id
  649. */
  650. ENGINE_CALLBACK_PATCHBAY_CLIENT_REMOVED = 20,
  651. /*!
  652. * A patchbay client has been renamed.
  653. * @param pluginId Client Id
  654. * @param valueStr New client name
  655. */
  656. ENGINE_CALLBACK_PATCHBAY_CLIENT_RENAMED = 21,
  657. /*!
  658. * A patchbay client icon has changed.
  659. * @param pluginId Client Id
  660. * @param value1 New icon
  661. * @see PatchbayIcon
  662. */
  663. ENGINE_CALLBACK_PATCHBAY_CLIENT_ICON_CHANGED = 22,
  664. /*!
  665. * A patchbay port has been added.
  666. * @param pluginId Client Id
  667. * @param value1 Port Id
  668. * @param value2 Port hints
  669. * @param valueStr Port name
  670. * @see PatchbayPortHints
  671. */
  672. ENGINE_CALLBACK_PATCHBAY_PORT_ADDED = 23,
  673. /*!
  674. * A patchbay port has been removed.
  675. * @param pluginId Client Id
  676. * @param value1 Port Id
  677. */
  678. ENGINE_CALLBACK_PATCHBAY_PORT_REMOVED = 24,
  679. /*!
  680. * A patchbay port has been renamed.
  681. * @param pluginId Client Id
  682. * @param value1 Port Id
  683. * @param valueStr New port name
  684. */
  685. ENGINE_CALLBACK_PATCHBAY_PORT_RENAMED = 25,
  686. /*!
  687. * A patchbay connection has been added.
  688. * @param pluginId Connection Id
  689. * @param value1 Output port Id
  690. * @param value2 Input port Id
  691. */
  692. ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED = 26,
  693. /*!
  694. * A patchbay connection has been removed.
  695. * @param pluginId Connection Id
  696. * @param value1 Output port Id
  697. * @param value2 Input port Id
  698. */
  699. ENGINE_CALLBACK_PATCHBAY_CONNECTION_REMOVED = 27,
  700. /*!
  701. * Engine started.
  702. * @param value1 Process mode
  703. * @param value2 Transport mode
  704. * @param valuestr Engine driver
  705. * @see EngineProcessMode
  706. * @see EngineTransportMode
  707. */
  708. ENGINE_CALLBACK_ENGINE_STARTED = 28,
  709. /*!
  710. * Engine stopped.
  711. */
  712. ENGINE_CALLBACK_ENGINE_STOPPED = 29,
  713. /*!
  714. * Engine process mode has changed.
  715. * @param value1 New process mode
  716. * @see EngineProcessMode
  717. */
  718. ENGINE_CALLBACK_PROCESS_MODE_CHANGED = 30,
  719. /*!
  720. * Engine transport mode has changed.
  721. * @param value1 New transport mode
  722. * @see EngineTransportMode
  723. */
  724. ENGINE_CALLBACK_TRANSPORT_MODE_CHANGED = 31,
  725. /*!
  726. * Engine buffer-size changed.
  727. * @param value1 New buffer size
  728. */
  729. ENGINE_CALLBACK_BUFFER_SIZE_CHANGED = 32,
  730. /*!
  731. * Engine sample-rate changed.
  732. * @param value3 New sample rate
  733. */
  734. ENGINE_CALLBACK_SAMPLE_RATE_CHANGED = 33,
  735. /*!
  736. * Show a message as information.
  737. * @param valueStr The message
  738. */
  739. ENGINE_CALLBACK_INFO = 34,
  740. /*!
  741. * Show a message as an error.
  742. * @param valueStr The message
  743. */
  744. ENGINE_CALLBACK_ERROR = 35,
  745. /*!
  746. * The engine has crashed or malfunctioned and will no longer work.
  747. */
  748. ENGINE_CALLBACK_QUIT = 36
  749. } EngineCallbackOpcode;
  750. // ------------------------------------------------------------------------------------------------------------
  751. // Engine Option
  752. /*!
  753. * Engine options.
  754. * @see CarlaEngine::getOptions(), CarlaEngine::setOption() and carla_set_engine_option()
  755. */
  756. typedef enum {
  757. /*!
  758. * Debug.\n
  759. * This option is undefined and used only for testing purposes.
  760. */
  761. ENGINE_OPTION_DEBUG = 0,
  762. /*!
  763. * Set the engine processing mode.\n
  764. * Default is ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS on Linux and ENGINE_PROCESS_MODE_CONTINUOUS_RACK for all other OSes.
  765. * @see EngineProcessMode
  766. */
  767. ENGINE_OPTION_PROCESS_MODE = 1,
  768. /*!
  769. * Set the engine transport mode.\n
  770. * Default is ENGINE_TRANSPORT_MODE_JACK on Linux and ENGINE_TRANSPORT_MODE_INTERNAL for all other OSes.
  771. * @see EngineTransportMode
  772. */
  773. ENGINE_OPTION_TRANSPORT_MODE = 2,
  774. /*!
  775. * Force mono plugins as stereo, by running 2 instances at the same time.\n
  776. * Default is false, but always true when process mode is ENGINE_PROCESS_MODE_CONTINUOUS_RACK.
  777. * @note Not supported by all plugins
  778. * @see PLUGIN_OPTION_FORCE_STEREO
  779. */
  780. ENGINE_OPTION_FORCE_STEREO = 3,
  781. /*!
  782. * Use plugin bridges whenever possible.\n
  783. * Default is no, EXPERIMENTAL.
  784. */
  785. ENGINE_OPTION_PREFER_PLUGIN_BRIDGES = 4,
  786. /*!
  787. * Use UI bridges whenever possible, otherwise UIs will be directly handled in the main backend thread.\n
  788. * Default is yes.
  789. */
  790. ENGINE_OPTION_PREFER_UI_BRIDGES = 5,
  791. /*!
  792. * Make custom plugin UIs always-on-top.\n
  793. * Default is yes.
  794. */
  795. ENGINE_OPTION_UIS_ALWAYS_ON_TOP = 6,
  796. /*!
  797. * Maximum number of parameters allowed.\n
  798. * Default is MAX_DEFAULT_PARAMETERS.
  799. */
  800. ENGINE_OPTION_MAX_PARAMETERS = 7,
  801. /*!
  802. * Timeout value for how much to wait for UI bridges to respond, in milliseconds.\n
  803. * Default is 4000 (4 seconds).
  804. */
  805. ENGINE_OPTION_UI_BRIDGES_TIMEOUT = 8,
  806. /*!
  807. * Audio number of periods.\n
  808. * Default is 2.
  809. */
  810. ENGINE_OPTION_AUDIO_NUM_PERIODS = 9,
  811. /*!
  812. * Audio buffer size.\n
  813. * Default is 512.
  814. */
  815. ENGINE_OPTION_AUDIO_BUFFER_SIZE = 10,
  816. /*!
  817. * Audio sample rate.\n
  818. * Default is 44100.
  819. */
  820. ENGINE_OPTION_AUDIO_SAMPLE_RATE = 11,
  821. /*!
  822. * Audio device (within a driver).\n
  823. * Default unset.
  824. */
  825. ENGINE_OPTION_AUDIO_DEVICE = 12,
  826. /*!
  827. * Set path to the binary files.\n
  828. * Default unset.
  829. * @note Must be set for plugin and UI bridges to work
  830. */
  831. ENGINE_OPTION_PATH_BINARIES = 13,
  832. /*!
  833. * Set path to the resource files.\n
  834. * Default unset.
  835. * @note Must be set for some internal plugins to work
  836. */
  837. ENGINE_OPTION_PATH_RESOURCES = 14
  838. } EngineOption;
  839. // ------------------------------------------------------------------------------------------------------------
  840. // Engine Process Mode
  841. /*!
  842. * Engine process mode.
  843. * @see ENGINE_OPTION_PROCESS_MODE
  844. */
  845. typedef enum {
  846. /*!
  847. * Single client mode.\n
  848. * Inputs and outputs are added dynamically as needed by plugins.
  849. */
  850. ENGINE_PROCESS_MODE_SINGLE_CLIENT = 0,
  851. /*!
  852. * Multiple client mode.\n
  853. * It has 1 master client + 1 client per plugin.
  854. */
  855. ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS = 1,
  856. /*!
  857. * Single client, 'rack' mode.\n
  858. * Processes plugins in order of Id, with forced stereo always on.
  859. */
  860. ENGINE_PROCESS_MODE_CONTINUOUS_RACK = 2,
  861. /*!
  862. * Single client, 'patchbay' mode.
  863. */
  864. ENGINE_PROCESS_MODE_PATCHBAY = 3,
  865. /*!
  866. * Special mode, used in plugin-bridges only.
  867. */
  868. ENGINE_PROCESS_MODE_BRIDGE = 4
  869. } EngineProcessMode;
  870. // ------------------------------------------------------------------------------------------------------------
  871. // Engine Transport Mode
  872. /*!
  873. * Engine transport mode.
  874. * @see ENGINE_OPTION_TRANSPORT_MODE
  875. */
  876. typedef enum {
  877. /*!
  878. * Internal transport mode.
  879. */
  880. ENGINE_TRANSPORT_MODE_INTERNAL = 0,
  881. /*!
  882. * Transport from JACK.\n
  883. * Only available if driver name is "JACK".
  884. */
  885. ENGINE_TRANSPORT_MODE_JACK = 1,
  886. /*!
  887. * Transport from host, used when Carla is a plugin.
  888. */
  889. ENGINE_TRANSPORT_MODE_PLUGIN = 2,
  890. /*!
  891. * Special mode, used in plugin-bridges only.
  892. */
  893. ENGINE_TRANSPORT_MODE_BRIDGE = 3
  894. } EngineTransportMode;
  895. // ------------------------------------------------------------------------------------------------------------
  896. // Patchbay Icon
  897. /*!
  898. * The icon of a patchbay client/group.
  899. */
  900. enum PatchbayIcon {
  901. /*!
  902. * Generic application icon.\n
  903. * Used for all non-plugin clients that don't have a specific icon.
  904. */
  905. PATCHBAY_ICON_APPLICATION = 0,
  906. /*!
  907. * Plugin icon.\n
  908. * Used for all plugin clients that don't have a specific icon.
  909. */
  910. PATCHBAY_ICON_PLUGIN = 1,
  911. /*!
  912. * Hardware icon.\n
  913. * Used for hardware (audio or MIDI) clients.
  914. */
  915. PATCHBAY_ICON_HARDWARE = 2,
  916. /*!
  917. * Carla icon.\n
  918. * Used for the main app.
  919. */
  920. PATCHBAY_ICON_CARLA = 3,
  921. /*!
  922. * DISTRHO icon.\n
  923. * Used for DISTRHO based plugins.
  924. */
  925. PATCHBAY_ICON_DISTRHO = 4,
  926. /*!
  927. * File icon.\n
  928. * Used for file type plugins (like GIG and SF2).
  929. */
  930. PATCHBAY_ICON_FILE = 5
  931. };
  932. // ------------------------------------------------------------------------------------------------------------
  933. // Carla Backend API (C stuff)
  934. /*!
  935. * Engine callback function.\n
  936. * Front-ends must never block indefinitely during a callback.
  937. * @see EngineCallbackOpcode, CarlaEngine::setCallback() and carla_set_engine_callback()
  938. */
  939. typedef void (*EngineCallbackFunc)(void* ptr, EngineCallbackOpcode action, uint pluginId, int value1, int value2, float value3, const char* valueStr);
  940. /*!
  941. * Parameter data.
  942. */
  943. typedef struct {
  944. /*!
  945. * This parameter type.
  946. */
  947. ParameterType type;
  948. /*!
  949. * This parameter hints.
  950. * @see ParameterHints
  951. */
  952. unsigned int hints;
  953. /*!
  954. * Index as seen by Carla.
  955. */
  956. int32_t index;
  957. /*!
  958. * Real index as seen by plugins.
  959. */
  960. int32_t rindex;
  961. /*!
  962. * Currently mapped MIDI CC.\n
  963. * A value lower than 0 means invalid or unused.\n
  964. * Maximum allowed value is 95 (0x5F).
  965. */
  966. int16_t midiCC;
  967. /*!
  968. * Currently mapped MIDI channel.\n
  969. * Counts from 0 to 15.
  970. */
  971. uint8_t midiChannel;
  972. } ParameterData;
  973. /*!
  974. * Parameter ranges.
  975. */
  976. typedef struct {
  977. /*!
  978. * Default value.
  979. */
  980. float def;
  981. /*!
  982. * Minimum value.
  983. */
  984. float min;
  985. /*!
  986. * Maximum value.
  987. */
  988. float max;
  989. /*!
  990. * Regular, single step value.
  991. */
  992. float step;
  993. /*!
  994. * Small step value.
  995. */
  996. float stepSmall;
  997. /*!
  998. * Large step value.
  999. */
  1000. float stepLarge;
  1001. #ifdef __cplusplus
  1002. /*!
  1003. * Fix default value within range.
  1004. */
  1005. void fixDefault() noexcept
  1006. {
  1007. fixValue(def);
  1008. }
  1009. /*!
  1010. * Fix a value within range.
  1011. */
  1012. void fixValue(float& value) const noexcept
  1013. {
  1014. if (value <= min)
  1015. value = min;
  1016. else if (value > max)
  1017. value = max;
  1018. }
  1019. /*!
  1020. * Get a fixed value within range.
  1021. */
  1022. float getFixedValue(const float& value) const noexcept
  1023. {
  1024. if (value <= min)
  1025. return min;
  1026. if (value >= max)
  1027. return max;
  1028. return value;
  1029. }
  1030. /*!
  1031. * Get a value normalized to 0.0<->1.0.
  1032. */
  1033. float getNormalizedValue(const float& value) const noexcept
  1034. {
  1035. const float normValue((value - min) / (max - min));
  1036. if (normValue <= 0.0f)
  1037. return 0.0f;
  1038. if (normValue >= 1.0f)
  1039. return 1.0f;
  1040. return normValue;
  1041. }
  1042. /*!
  1043. * Get a value normalized to 0.0<->1.0, fixed within range.
  1044. */
  1045. float getFixedAndNormalizedValue(const float& value) const noexcept
  1046. {
  1047. if (value <= min)
  1048. return 0.0f;
  1049. if (value >= max)
  1050. return 1.0f;
  1051. const float normValue((value - min) / (max - min));
  1052. if (normValue <= 0.0f)
  1053. return 0.0f;
  1054. if (normValue >= 1.0f)
  1055. return 1.0f;
  1056. return normValue;
  1057. }
  1058. /*!
  1059. * Get a proper value previously normalized to 0.0<->1.0.
  1060. */
  1061. float getUnnormalizedValue(const float& value) const noexcept
  1062. {
  1063. return value * (max - min) + min;
  1064. }
  1065. #endif
  1066. } ParameterRanges;
  1067. /*!
  1068. * MIDI Program data.
  1069. */
  1070. typedef struct {
  1071. /*!
  1072. * MIDI bank.
  1073. */
  1074. uint32_t bank;
  1075. /*!
  1076. * MIDI program.
  1077. */
  1078. uint32_t program;
  1079. /*!
  1080. * MIDI program name.
  1081. */
  1082. const char* name;
  1083. } MidiProgramData;
  1084. /*!
  1085. * Custom data, used for saving key:value 'dictionaries'.
  1086. */
  1087. typedef struct {
  1088. /*!
  1089. * Value type, in URI form.
  1090. * @see CustomDataTypes
  1091. */
  1092. const char* type;
  1093. /*!
  1094. * Key.
  1095. * @see CustomDataKeys
  1096. */
  1097. const char* key;
  1098. /*!
  1099. * Value.
  1100. */
  1101. const char* value;
  1102. } CustomData;
  1103. /*!
  1104. * Engine driver device information.
  1105. */
  1106. typedef struct {
  1107. /*!
  1108. * This driver device hints.
  1109. * @see EngineDriverHints
  1110. */
  1111. unsigned int hints;
  1112. /*!
  1113. * Available buffer sizes.\n
  1114. * Terminated with 0.
  1115. */
  1116. const uint32_t* bufferSizes;
  1117. /*!
  1118. * Available sample rates.\n
  1119. * Terminated with 0.0.
  1120. */
  1121. const double* sampleRates;
  1122. } EngineDriverDeviceInfo;
  1123. /** @} */
  1124. #ifdef __cplusplus
  1125. /* Forward declarations of commonly used Carla classes */
  1126. class CarlaEngine;
  1127. class CarlaPlugin;
  1128. /* End namespace */
  1129. CARLA_BACKEND_END_NAMESPACE
  1130. #endif
  1131. #endif /* CARLA_BACKEND_H_INCLUDED */