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.

CarlaHost.h 36KB

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
6 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
10 years ago
10 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216
  1. /*
  2. * Carla Plugin Host
  3. * Copyright (C) 2011-2022 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_HOST_H_INCLUDED
  18. #define CARLA_HOST_H_INCLUDED
  19. #include "CarlaBackend.h"
  20. #ifdef __cplusplus
  21. using CARLA_BACKEND_NAMESPACE::BinaryType;
  22. using CARLA_BACKEND_NAMESPACE::PluginType;
  23. using CARLA_BACKEND_NAMESPACE::PluginCategory;
  24. using CARLA_BACKEND_NAMESPACE::InternalParameterIndex;
  25. using CARLA_BACKEND_NAMESPACE::EngineCallbackOpcode;
  26. using CARLA_BACKEND_NAMESPACE::NsmCallbackOpcode;
  27. using CARLA_BACKEND_NAMESPACE::EngineOption;
  28. using CARLA_BACKEND_NAMESPACE::EngineProcessMode;
  29. using CARLA_BACKEND_NAMESPACE::EngineTransportMode;
  30. using CARLA_BACKEND_NAMESPACE::FileCallbackOpcode;
  31. using CARLA_BACKEND_NAMESPACE::EngineCallbackFunc;
  32. using CARLA_BACKEND_NAMESPACE::FileCallbackFunc;
  33. using CARLA_BACKEND_NAMESPACE::ParameterData;
  34. using CARLA_BACKEND_NAMESPACE::ParameterRanges;
  35. using CARLA_BACKEND_NAMESPACE::MidiProgramData;
  36. using CARLA_BACKEND_NAMESPACE::CustomData;
  37. using CARLA_BACKEND_NAMESPACE::EngineDriverDeviceInfo;
  38. using CARLA_BACKEND_NAMESPACE::CarlaEngine;
  39. using CARLA_BACKEND_NAMESPACE::CarlaEngineClient;
  40. using CARLA_BACKEND_NAMESPACE::CarlaPlugin;
  41. #endif
  42. /*!
  43. * @defgroup CarlaHostAPI Carla Host API
  44. *
  45. * The Carla Host API.
  46. *
  47. * This API makes it possible to use the Carla Backend in a standalone host application..
  48. *
  49. * None of the returned values in this API calls need to be deleted or free'd.
  50. * When a function fails (returns false or NULL), use carla_get_last_error() to find out what went wrong.
  51. * @{
  52. */
  53. /* ------------------------------------------------------------------------------------------------------------
  54. * Carla Host API (C stuff) */
  55. /*!
  56. * Information about a loaded plugin.
  57. * @see carla_get_plugin_info()
  58. */
  59. typedef struct _CarlaPluginInfo {
  60. /*!
  61. * Plugin type.
  62. */
  63. PluginType type;
  64. /*!
  65. * Plugin category.
  66. */
  67. PluginCategory category;
  68. /*!
  69. * Plugin hints.
  70. * @see PluginHints
  71. */
  72. uint hints;
  73. /*!
  74. * Plugin options available for the user to change.
  75. * @see PluginOptions
  76. */
  77. uint optionsAvailable;
  78. /*!
  79. * Plugin options currently enabled.
  80. * Some options are enabled but not available, which means they will always be on.
  81. * @see PluginOptions
  82. */
  83. uint optionsEnabled;
  84. /*!
  85. * Plugin filename.
  86. * This can be the plugin binary or resource file.
  87. */
  88. const char* filename;
  89. /*!
  90. * Plugin name.
  91. * This name is unique within a Carla instance.
  92. * @see carla_get_real_plugin_name()
  93. */
  94. const char* name;
  95. /*!
  96. * Plugin label or URI.
  97. */
  98. const char* label;
  99. /*!
  100. * Plugin author/maker.
  101. */
  102. const char* maker;
  103. /*!
  104. * Plugin copyright/license.
  105. */
  106. const char* copyright;
  107. /*!
  108. * Icon name for this plugin, in lowercase.
  109. * Default is "plugin".
  110. */
  111. const char* iconName;
  112. /*!
  113. * Plugin unique Id.
  114. * This Id is dependent on the plugin type and may sometimes be 0.
  115. */
  116. int64_t uniqueId;
  117. #ifdef __cplusplus
  118. /*!
  119. * C++ constructor and destructor.
  120. */
  121. CARLA_API _CarlaPluginInfo() noexcept;
  122. CARLA_API ~_CarlaPluginInfo() noexcept;
  123. CARLA_DECLARE_NON_COPY_STRUCT(_CarlaPluginInfo)
  124. #endif
  125. } CarlaPluginInfo;
  126. /*!
  127. * Port count information, used for Audio and MIDI ports and parameters.
  128. * @see carla_get_audio_port_count_info()
  129. * @see carla_get_midi_port_count_info()
  130. * @see carla_get_parameter_count_info()
  131. */
  132. typedef struct _CarlaPortCountInfo {
  133. /*!
  134. * Number of inputs.
  135. */
  136. uint32_t ins;
  137. /*!
  138. * Number of outputs.
  139. */
  140. uint32_t outs;
  141. } CarlaPortCountInfo;
  142. /*!
  143. * Parameter information.
  144. * @see carla_get_parameter_info()
  145. */
  146. typedef struct _CarlaParameterInfo {
  147. /*!
  148. * Parameter name.
  149. */
  150. const char* name;
  151. /*!
  152. * Parameter symbol.
  153. */
  154. const char* symbol;
  155. /*!
  156. * Parameter unit.
  157. */
  158. const char* unit;
  159. /*!
  160. * Parameter comment / documentation.
  161. */
  162. const char* comment;
  163. /*!
  164. * Parameter group name, prefixed by a unique symbol and ":".
  165. */
  166. const char* groupName;
  167. /*!
  168. * Number of scale points.
  169. * @see CarlaScalePointInfo
  170. */
  171. uint32_t scalePointCount;
  172. #ifdef __cplusplus
  173. /*!
  174. * C++ constructor and destructor.
  175. */
  176. CARLA_API _CarlaParameterInfo() noexcept;
  177. CARLA_API ~_CarlaParameterInfo() noexcept;
  178. CARLA_DECLARE_NON_COPY_STRUCT(_CarlaParameterInfo)
  179. #endif
  180. } CarlaParameterInfo;
  181. /*!
  182. * Parameter scale point information.
  183. * @see carla_get_parameter_scalepoint_info()
  184. */
  185. typedef struct _CarlaScalePointInfo {
  186. /*!
  187. * Scale point value.
  188. */
  189. float value;
  190. /*!
  191. * Scale point label.
  192. */
  193. const char* label;
  194. #ifdef __cplusplus
  195. /*!
  196. * C++ constructor and destructor.
  197. */
  198. CARLA_API _CarlaScalePointInfo() noexcept;
  199. CARLA_API ~_CarlaScalePointInfo() noexcept;
  200. CARLA_DECLARE_NON_COPY_STRUCT(_CarlaScalePointInfo)
  201. #endif
  202. } CarlaScalePointInfo;
  203. /*!
  204. * Transport information.
  205. * @see carla_get_transport_info()
  206. */
  207. typedef struct _CarlaTransportInfo {
  208. /*!
  209. * Wherever transport is playing.
  210. */
  211. bool playing;
  212. /*!
  213. * Current transport frame.
  214. */
  215. uint64_t frame;
  216. /*!
  217. * Bar.
  218. */
  219. int32_t bar;
  220. /*!
  221. * Beat.
  222. */
  223. int32_t beat;
  224. /*!
  225. * Tick.
  226. */
  227. int32_t tick;
  228. /*!
  229. * Beats per minute.
  230. */
  231. double bpm;
  232. #ifdef __cplusplus
  233. /*!
  234. * C++ constructor.
  235. */
  236. CARLA_API _CarlaTransportInfo() noexcept;
  237. /*!
  238. * Clear struct contents.
  239. */
  240. CARLA_API void clear() noexcept;
  241. #endif
  242. } CarlaTransportInfo;
  243. /*!
  244. * Runtime engine information.
  245. */
  246. typedef struct _CarlaRuntimeEngineInfo {
  247. /*!
  248. * DSP load.
  249. */
  250. float load;
  251. /*!
  252. * Number of xruns.
  253. */
  254. uint32_t xruns;
  255. } CarlaRuntimeEngineInfo;
  256. /*!
  257. * Runtime engine driver device information.
  258. */
  259. typedef struct {
  260. /*!
  261. * Name of the driver device.
  262. */
  263. const char* name;
  264. /*!
  265. * This driver device hints.
  266. * @see EngineDriverHints
  267. */
  268. uint hints;
  269. /*!
  270. * Current buffer size.
  271. */
  272. uint bufferSize;
  273. /*!
  274. * Available buffer sizes.
  275. * Terminated with 0.
  276. */
  277. const uint32_t* bufferSizes;
  278. /*!
  279. * Current sample rate.
  280. */
  281. double sampleRate;
  282. /*!
  283. * Available sample rates.
  284. * Terminated with 0.0.
  285. */
  286. const double* sampleRates;
  287. } CarlaRuntimeEngineDriverDeviceInfo;
  288. /*!
  289. * Image data for LV2 inline display API.
  290. * raw image pixmap format is ARGB32,
  291. */
  292. typedef struct {
  293. unsigned char* data;
  294. int width;
  295. int height;
  296. int stride;
  297. } CarlaInlineDisplayImageSurface;
  298. /*! Opaque data type for CarlaHost API calls */
  299. typedef struct _CarlaHostHandle* CarlaHostHandle;
  300. /* ------------------------------------------------------------------------------------------------------------
  301. * Carla Host API (C functions) */
  302. /*!
  303. * Get how many engine drivers are available.
  304. */
  305. CARLA_API_EXPORT uint carla_get_engine_driver_count(void);
  306. /*!
  307. * Get an engine driver name.
  308. * @param index Driver index
  309. */
  310. CARLA_API_EXPORT const char* carla_get_engine_driver_name(uint index);
  311. /*!
  312. * Get the device names of an engine driver.
  313. * @param index Driver index
  314. */
  315. CARLA_API_EXPORT const char* const* carla_get_engine_driver_device_names(uint index);
  316. /*!
  317. * Get information about a device driver.
  318. * @param index Driver index
  319. * @param name Device name
  320. */
  321. CARLA_API_EXPORT const EngineDriverDeviceInfo* carla_get_engine_driver_device_info(uint index, const char* name);
  322. /*!
  323. * Show a device custom control panel.
  324. * @see ENGINE_DRIVER_DEVICE_HAS_CONTROL_PANEL
  325. * @param index Driver index
  326. * @param name Device name
  327. */
  328. CARLA_API_EXPORT bool carla_show_engine_driver_device_control_panel(uint index, const char* name);
  329. /*!
  330. * Create a global host handle for standalone application usage.
  331. */
  332. CARLA_API_EXPORT CarlaHostHandle carla_standalone_host_init(void);
  333. #ifdef __cplusplus
  334. /*!
  335. * Get the currently used engine, may be NULL.
  336. * @note C++ only
  337. */
  338. CARLA_API_EXPORT CarlaEngine* carla_get_engine_from_handle(CarlaHostHandle handle);
  339. #endif
  340. /*!
  341. * Initialize the engine.
  342. * Make sure to call carla_engine_idle() at regular intervals afterwards.
  343. * @param driverName Driver to use
  344. * @param clientName Engine master client name
  345. */
  346. CARLA_API_EXPORT bool carla_engine_init(CarlaHostHandle handle, const char* driverName, const char* clientName);
  347. #ifdef BUILD_BRIDGE
  348. /*!
  349. * Initialize the engine in bridged mode.
  350. */
  351. CARLA_API_EXPORT bool carla_engine_init_bridge(CarlaHostHandle handle,
  352. const char audioBaseName[6+1],
  353. const char rtClientBaseName[6+1],
  354. const char nonRtClientBaseName[6+1],
  355. const char nonRtServerBaseName[6+1],
  356. const char* clientName);
  357. #endif
  358. /*!
  359. * Close the engine.
  360. * This function always closes the engine even if it returns false.
  361. * In other words, even when something goes wrong when closing the engine it still be closed nonetheless.
  362. */
  363. CARLA_API_EXPORT bool carla_engine_close(CarlaHostHandle handle);
  364. /*!
  365. * Idle the engine.
  366. * Do not call this if the engine is not running.
  367. */
  368. CARLA_API_EXPORT void carla_engine_idle(CarlaHostHandle handle);
  369. /*!
  370. * Check if the engine is running.
  371. */
  372. CARLA_API_EXPORT bool carla_is_engine_running(CarlaHostHandle handle);
  373. /*!
  374. * Get information about the currently running engine.
  375. */
  376. CARLA_API_EXPORT const CarlaRuntimeEngineInfo* carla_get_runtime_engine_info(CarlaHostHandle handle);
  377. #ifndef BUILD_BRIDGE
  378. /*!
  379. * Get information about the currently running engine driver device.
  380. */
  381. CARLA_API_EXPORT const CarlaRuntimeEngineDriverDeviceInfo* carla_get_runtime_engine_driver_device_info(CarlaHostHandle handle);
  382. /*!
  383. * Dynamically change buffer size and/or sample rate while engine is running.
  384. * @see ENGINE_DRIVER_DEVICE_VARIABLE_BUFFER_SIZE
  385. * @see ENGINE_DRIVER_DEVICE_VARIABLE_SAMPLE_RATE
  386. */
  387. CARLA_API_EXPORT bool carla_set_engine_buffer_size_and_sample_rate(CarlaHostHandle handle, uint bufferSize, double sampleRate);
  388. /*!
  389. * Show the custom control panel for the current engine device.
  390. * @see ENGINE_DRIVER_DEVICE_HAS_CONTROL_PANEL
  391. */
  392. CARLA_API_EXPORT bool carla_show_engine_device_control_panel(CarlaHostHandle handle);
  393. #endif
  394. /*!
  395. * Clear the xrun count on the engine, so that the next time carla_get_runtime_engine_info() is called, it returns 0.
  396. */
  397. CARLA_API_EXPORT void carla_clear_engine_xruns(CarlaHostHandle handle);
  398. /*!
  399. * Tell the engine to stop the current cancelable action.
  400. * @see ENGINE_CALLBACK_CANCELABLE_ACTION
  401. */
  402. CARLA_API_EXPORT void carla_cancel_engine_action(CarlaHostHandle handle);
  403. /*!
  404. * Tell the engine it's about to close.
  405. * This is used to prevent the engine thread(s) from reactivating.
  406. * Returns true if there's no pending engine events.
  407. */
  408. CARLA_API_EXPORT bool carla_set_engine_about_to_close(CarlaHostHandle handle);
  409. /*!
  410. * Set the engine callback function.
  411. * @param func Callback function
  412. * @param ptr Callback pointer
  413. */
  414. CARLA_API_EXPORT void carla_set_engine_callback(CarlaHostHandle handle, EngineCallbackFunc func, void* ptr);
  415. /*!
  416. * Set an engine option.
  417. * @param option Option
  418. * @param value Value as number
  419. * @param valueStr Value as string
  420. */
  421. CARLA_API_EXPORT void carla_set_engine_option(CarlaHostHandle handle, EngineOption option, int value, const char* valueStr);
  422. /*!
  423. * Set the file callback function.
  424. * @param func Callback function
  425. * @param ptr Callback pointer
  426. */
  427. CARLA_API_EXPORT void carla_set_file_callback(CarlaHostHandle handle, FileCallbackFunc func, void* ptr);
  428. /*!
  429. * Load a file of any type.
  430. * This will try to load a generic file as a plugin,
  431. * either by direct handling (SF2 and SFZ) or by using an internal plugin (like Audio and MIDI).
  432. * @see carla_get_supported_file_extensions()
  433. */
  434. CARLA_API_EXPORT bool carla_load_file(CarlaHostHandle handle, const char* filename);
  435. /*!
  436. * Load a Carla project file.
  437. * @note Currently loaded plugins are not removed; call carla_remove_all_plugins() first if needed.
  438. */
  439. CARLA_API_EXPORT bool carla_load_project(CarlaHostHandle handle, const char* filename);
  440. /*!
  441. * Save current project to a file.
  442. */
  443. CARLA_API_EXPORT bool carla_save_project(CarlaHostHandle handle, const char* filename);
  444. #ifndef BUILD_BRIDGE
  445. /*!
  446. * Get the currently set project folder.
  447. * @note Valid for both standalone and plugin versions.
  448. */
  449. CARLA_API_EXPORT const char* carla_get_current_project_folder(CarlaHostHandle handle);
  450. /*!
  451. * Get the currently set project filename.
  452. * @note Valid only for both standalone version.
  453. */
  454. CARLA_API_EXPORT const char* carla_get_current_project_filename(CarlaHostHandle handle);
  455. /*!
  456. * Clear the currently set project filename.
  457. */
  458. CARLA_API_EXPORT void carla_clear_project_filename(CarlaHostHandle handle);
  459. /*!
  460. * Connect two patchbay ports.
  461. * @param groupIdA Output (source) group
  462. * @param portIdA Output (source) port
  463. * @param groupIdB Input (target) group
  464. * @param portIdB Input (target) port
  465. * @note The group corresponds to the client Id received in the engine callback
  466. * for ENGINE_CALLBACK_PATCHBAY_PORT_ADDED.
  467. * @see ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED
  468. */
  469. CARLA_API_EXPORT bool carla_patchbay_connect(CarlaHostHandle handle, bool external, uint groupIdA, uint portIdA, uint groupIdB, uint portIdB);
  470. /*!
  471. * Disconnect two patchbay ports.
  472. * @param connectionId Connection Id
  473. * @see ENGINE_CALLBACK_PATCHBAY_CONNECTION_REMOVED
  474. */
  475. CARLA_API_EXPORT bool carla_patchbay_disconnect(CarlaHostHandle handle, bool external, uint connectionId);
  476. /*!
  477. * Set the position of a group.
  478. * This is purely cached and saved in the project file, Carla backend does nothing with the value.
  479. * When loading a project, callbacks are used to inform of the previously saved positions.
  480. * @see ENGINE_CALLBACK_PATCHBAY_CLIENT_POSITION_CHANGED
  481. */
  482. CARLA_API_EXPORT bool carla_patchbay_set_group_pos(CarlaHostHandle handle, bool external,
  483. uint groupId, int x1, int y1, int x2, int y2);
  484. /*!
  485. * Force the engine to resend all patchbay clients, ports and connections again.
  486. * @param external Wherever to show external/hardware ports instead of internal ones.
  487. * Only valid in patchbay engine mode, other modes will ignore this.
  488. */
  489. CARLA_API_EXPORT bool carla_patchbay_refresh(CarlaHostHandle handle, bool external);
  490. /*!
  491. * Start playback of the engine transport.
  492. */
  493. CARLA_API_EXPORT void carla_transport_play(CarlaHostHandle handle);
  494. /*!
  495. * Pause the engine transport.
  496. */
  497. CARLA_API_EXPORT void carla_transport_pause(CarlaHostHandle handle);
  498. /*!
  499. * Set the engine transport bpm.
  500. */
  501. CARLA_API_EXPORT void carla_transport_bpm(CarlaHostHandle handle, double bpm);
  502. /*!
  503. * Relocate the engine transport to a specific frame.
  504. */
  505. CARLA_API_EXPORT void carla_transport_relocate(CarlaHostHandle handle, uint64_t frame);
  506. /*!
  507. * Get the current transport frame.
  508. */
  509. CARLA_API_EXPORT uint64_t carla_get_current_transport_frame(CarlaHostHandle handle);
  510. /*!
  511. * Get the engine transport information.
  512. */
  513. CARLA_API_EXPORT const CarlaTransportInfo* carla_get_transport_info(CarlaHostHandle handle);
  514. #endif
  515. /*!
  516. * Current number of plugins loaded.
  517. */
  518. CARLA_API_EXPORT uint32_t carla_get_current_plugin_count(CarlaHostHandle handle);
  519. /*!
  520. * Maximum number of loadable plugins allowed.
  521. * Returns 0 if engine is not started.
  522. */
  523. CARLA_API_EXPORT uint32_t carla_get_max_plugin_number(CarlaHostHandle handle);
  524. /*!
  525. * Add a new plugin.
  526. * If you don't know the binary type use the BINARY_NATIVE macro.
  527. * @param btype Binary type
  528. * @param ptype Plugin type
  529. * @param filename Filename, if applicable
  530. * @param name Name of the plugin, can be NULL
  531. * @param label Plugin label, if applicable
  532. * @param uniqueId Plugin unique Id, if applicable
  533. * @param extraPtr Extra pointer, defined per plugin type
  534. * @param options Initial plugin options
  535. */
  536. CARLA_API_EXPORT bool carla_add_plugin(CarlaHostHandle handle,
  537. BinaryType btype, PluginType ptype,
  538. const char* filename, const char* name, const char* label, int64_t uniqueId,
  539. const void* extraPtr, uint options);
  540. /*!
  541. * Remove one plugin.
  542. * @param pluginId Plugin to remove.
  543. */
  544. CARLA_API_EXPORT bool carla_remove_plugin(CarlaHostHandle handle, uint pluginId);
  545. /*!
  546. * Remove all plugins.
  547. */
  548. CARLA_API_EXPORT bool carla_remove_all_plugins(CarlaHostHandle handle);
  549. #ifndef BUILD_BRIDGE
  550. /*!
  551. * Rename a plugin.
  552. * Returns the new name, or NULL if the operation failed.
  553. * @param pluginId Plugin to rename
  554. * @param newName New plugin name
  555. */
  556. CARLA_API_EXPORT bool carla_rename_plugin(CarlaHostHandle handle, uint pluginId, const char* newName);
  557. /*!
  558. * Clone a plugin.
  559. * @param pluginId Plugin to clone
  560. */
  561. CARLA_API_EXPORT bool carla_clone_plugin(CarlaHostHandle handle, uint pluginId);
  562. /*!
  563. * Prepare replace of a plugin.
  564. * The next call to carla_add_plugin() will use this id, replacing the current plugin.
  565. * @param pluginId Plugin to replace
  566. * @note This function requires carla_add_plugin() to be called afterwards *as soon as possible*.
  567. */
  568. CARLA_API_EXPORT bool carla_replace_plugin(CarlaHostHandle handle, uint pluginId);
  569. /*!
  570. * Switch two plugins positions.
  571. * @param pluginIdA Plugin A
  572. * @param pluginIdB Plugin B
  573. */
  574. CARLA_API_EXPORT bool carla_switch_plugins(CarlaHostHandle handle, uint pluginIdA, uint pluginIdB);
  575. #endif
  576. /*!
  577. * Load a plugin state.
  578. * @param pluginId Plugin
  579. * @param filename Path to plugin state
  580. * @see carla_save_plugin_state()
  581. */
  582. CARLA_API_EXPORT bool carla_load_plugin_state(CarlaHostHandle handle, uint pluginId, const char* filename);
  583. /*!
  584. * Save a plugin state.
  585. * @param pluginId Plugin
  586. * @param filename Path to plugin state
  587. * @see carla_load_plugin_state()
  588. */
  589. CARLA_API_EXPORT bool carla_save_plugin_state(CarlaHostHandle handle, uint pluginId, const char* filename);
  590. /*!
  591. * Export plugin as LV2.
  592. * @param pluginId Plugin
  593. * @param lv2path Path to lv2 plugin folder
  594. */
  595. CARLA_API_EXPORT bool carla_export_plugin_lv2(CarlaHostHandle handle, uint pluginId, const char* lv2path);
  596. /*!
  597. * Get information from a plugin.
  598. * @param pluginId Plugin
  599. */
  600. CARLA_API_EXPORT const CarlaPluginInfo* carla_get_plugin_info(CarlaHostHandle handle, uint pluginId);
  601. /*!
  602. * Get audio port count information from a plugin.
  603. * @param pluginId Plugin
  604. */
  605. CARLA_API_EXPORT const CarlaPortCountInfo* carla_get_audio_port_count_info(CarlaHostHandle handle, uint pluginId);
  606. /*!
  607. * Get MIDI port count information from a plugin.
  608. * @param pluginId Plugin
  609. */
  610. CARLA_API_EXPORT const CarlaPortCountInfo* carla_get_midi_port_count_info(CarlaHostHandle handle, uint pluginId);
  611. /*!
  612. * Get parameter count information from a plugin.
  613. * @param pluginId Plugin
  614. */
  615. CARLA_API_EXPORT const CarlaPortCountInfo* carla_get_parameter_count_info(CarlaHostHandle handle, uint pluginId);
  616. /*!
  617. * Get hints about an audio port.
  618. * @param pluginId Plugin
  619. * @param isOutput Whether port is output, input otherwise
  620. * @param portIndex Port index, related to input or output
  621. */
  622. CARLA_API_EXPORT uint carla_get_audio_port_hints(CarlaHostHandle handle, uint pluginId, bool isOutput, uint32_t portIndex);
  623. /*!
  624. * Get parameter information from a plugin.
  625. * @param pluginId Plugin
  626. * @param parameterId Parameter index
  627. * @see carla_get_parameter_count()
  628. */
  629. CARLA_API_EXPORT const CarlaParameterInfo* carla_get_parameter_info(CarlaHostHandle handle,
  630. uint pluginId,
  631. uint32_t parameterId);
  632. /*!
  633. * Get parameter scale point information from a plugin.
  634. * @param pluginId Plugin
  635. * @param parameterId Parameter index
  636. * @param scalePointId Parameter scale-point index
  637. * @see CarlaParameterInfo::scalePointCount
  638. */
  639. CARLA_API_EXPORT const CarlaScalePointInfo* carla_get_parameter_scalepoint_info(CarlaHostHandle handle,
  640. uint pluginId,
  641. uint32_t parameterId,
  642. uint32_t scalePointId);
  643. /*!
  644. * Get a plugin's parameter data.
  645. * @param pluginId Plugin
  646. * @param parameterId Parameter index
  647. * @see carla_get_parameter_count()
  648. */
  649. CARLA_API_EXPORT const ParameterData* carla_get_parameter_data(CarlaHostHandle handle,
  650. uint pluginId,
  651. uint32_t parameterId);
  652. /*!
  653. * Get a plugin's parameter ranges.
  654. * @param pluginId Plugin
  655. * @param parameterId Parameter index
  656. * @see carla_get_parameter_count()
  657. */
  658. CARLA_API_EXPORT const ParameterRanges* carla_get_parameter_ranges(CarlaHostHandle handle,
  659. uint pluginId,
  660. uint32_t parameterId);
  661. /*!
  662. * Get a plugin's MIDI program data.
  663. * @param pluginId Plugin
  664. * @param midiProgramId MIDI Program index
  665. * @see carla_get_midi_program_count()
  666. */
  667. CARLA_API_EXPORT const MidiProgramData* carla_get_midi_program_data(CarlaHostHandle handle,
  668. uint pluginId,
  669. uint32_t midiProgramId);
  670. /*!
  671. * Get a plugin's custom data, using index.
  672. * @param pluginId Plugin
  673. * @param customDataId Custom data index
  674. * @see carla_get_custom_data_count()
  675. */
  676. CARLA_API_EXPORT const CustomData* carla_get_custom_data(CarlaHostHandle handle, uint pluginId, uint32_t customDataId);
  677. /*!
  678. * Get a plugin's custom data value, using type and key.
  679. * @param pluginId Plugin
  680. * @param type Custom data type
  681. * @param key Custom data key
  682. * @see carla_get_custom_data_count()
  683. */
  684. CARLA_API_EXPORT const char* carla_get_custom_data_value(CarlaHostHandle handle,
  685. uint pluginId,
  686. const char* type,
  687. const char* key);
  688. /*!
  689. * Get a plugin's chunk data.
  690. * @param pluginId Plugin
  691. * @see PLUGIN_OPTION_USE_CHUNKS and carla_set_chunk_data()
  692. */
  693. CARLA_API_EXPORT const char* carla_get_chunk_data(CarlaHostHandle handle, uint pluginId);
  694. /*!
  695. * Get how many parameters a plugin has.
  696. * @param pluginId Plugin
  697. */
  698. CARLA_API_EXPORT uint32_t carla_get_parameter_count(CarlaHostHandle handle, uint pluginId);
  699. /*!
  700. * Get how many programs a plugin has.
  701. * @param pluginId Plugin
  702. * @see carla_get_program_name()
  703. */
  704. CARLA_API_EXPORT uint32_t carla_get_program_count(CarlaHostHandle handle, uint pluginId);
  705. /*!
  706. * Get how many MIDI programs a plugin has.
  707. * @param pluginId Plugin
  708. * @see carla_get_midi_program_name() and carla_get_midi_program_data()
  709. */
  710. CARLA_API_EXPORT uint32_t carla_get_midi_program_count(CarlaHostHandle handle, uint pluginId);
  711. /*!
  712. * Get how many custom data sets a plugin has.
  713. * @param pluginId Plugin
  714. * @see carla_get_custom_data()
  715. */
  716. CARLA_API_EXPORT uint32_t carla_get_custom_data_count(CarlaHostHandle handle, uint pluginId);
  717. /*!
  718. * Get a plugin's parameter text (custom display of internal values).
  719. * @param pluginId Plugin
  720. * @param parameterId Parameter index
  721. * @see PARAMETER_USES_CUSTOM_TEXT
  722. */
  723. CARLA_API_EXPORT const char* carla_get_parameter_text(CarlaHostHandle handle, uint pluginId, uint32_t parameterId);
  724. /*!
  725. * Get a plugin's program name.
  726. * @param pluginId Plugin
  727. * @param programId Program index
  728. * @see carla_get_program_count()
  729. */
  730. CARLA_API_EXPORT const char* carla_get_program_name(CarlaHostHandle handle, uint pluginId, uint32_t programId);
  731. /*!
  732. * Get a plugin's MIDI program name.
  733. * @param pluginId Plugin
  734. * @param midiProgramId MIDI Program index
  735. * @see carla_get_midi_program_count()
  736. */
  737. CARLA_API_EXPORT const char* carla_get_midi_program_name(CarlaHostHandle handle, uint pluginId, uint32_t midiProgramId);
  738. /*!
  739. * Get a plugin's real name.
  740. * This is the name the plugin uses to identify itself; may not be unique.
  741. * @param pluginId Plugin
  742. */
  743. CARLA_API_EXPORT const char* carla_get_real_plugin_name(CarlaHostHandle handle, uint pluginId);
  744. /*!
  745. * Get a plugin's program index.
  746. * @param pluginId Plugin
  747. */
  748. CARLA_API_EXPORT int32_t carla_get_current_program_index(CarlaHostHandle handle, uint pluginId);
  749. /*!
  750. * Get a plugin's midi program index.
  751. * @param pluginId Plugin
  752. */
  753. CARLA_API_EXPORT int32_t carla_get_current_midi_program_index(CarlaHostHandle handle, uint pluginId);
  754. /*!
  755. * Get a plugin's default parameter value.
  756. * @param pluginId Plugin
  757. * @param parameterId Parameter index
  758. */
  759. CARLA_API_EXPORT float carla_get_default_parameter_value(CarlaHostHandle handle, uint pluginId, uint32_t parameterId);
  760. /*!
  761. * Get a plugin's current parameter value.
  762. * @param pluginId Plugin
  763. * @param parameterId Parameter index
  764. */
  765. CARLA_API_EXPORT float carla_get_current_parameter_value(CarlaHostHandle handle, uint pluginId, uint32_t parameterId);
  766. /*!
  767. * Get a plugin's internal parameter value.
  768. * @param pluginId Plugin
  769. * @param parameterId Parameter index, maybe be negative
  770. * @see InternalParameterIndex
  771. */
  772. CARLA_API_EXPORT float carla_get_internal_parameter_value(CarlaHostHandle handle, uint pluginId, int32_t parameterId);
  773. /*!
  774. * Get a plugin's internal latency, in samples.
  775. * @param pluginId Plugin
  776. * @see InternalParameterIndex
  777. */
  778. CARLA_API_EXPORT uint32_t carla_get_plugin_latency(CarlaHostHandle handle, uint pluginId);
  779. /*!
  780. * Get a plugin's peak values.
  781. * @param pluginId Plugin
  782. */
  783. CARLA_API_EXPORT const float* carla_get_peak_values(CarlaHostHandle handle, uint pluginId);
  784. /*!
  785. * Get a plugin's input peak value.
  786. * @param pluginId Plugin
  787. * @param isLeft Wherever to get the left/mono value, otherwise right.
  788. */
  789. CARLA_API_EXPORT float carla_get_input_peak_value(CarlaHostHandle handle, uint pluginId, bool isLeft);
  790. /*!
  791. * Get a plugin's output peak value.
  792. * @param pluginId Plugin
  793. * @param isLeft Wherever to get the left/mono value, otherwise right.
  794. */
  795. CARLA_API_EXPORT float carla_get_output_peak_value(CarlaHostHandle handle, uint pluginId, bool isLeft);
  796. /*!
  797. * Render a plugin's inline display.
  798. * @param pluginId Plugin
  799. */
  800. CARLA_API_EXPORT const CarlaInlineDisplayImageSurface* carla_render_inline_display(CarlaHostHandle handle,
  801. uint pluginId,
  802. uint32_t width,
  803. uint32_t height);
  804. /*!
  805. * Enable or disable a plugin.
  806. * @param pluginId Plugin
  807. * @param onOff New active state
  808. */
  809. CARLA_API_EXPORT void carla_set_active(CarlaHostHandle handle, uint pluginId, bool onOff);
  810. #ifndef BUILD_BRIDGE
  811. /*!
  812. * Change a plugin's internal dry/wet.
  813. * @param pluginId Plugin
  814. * @param value New dry/wet value
  815. */
  816. CARLA_API_EXPORT void carla_set_drywet(CarlaHostHandle handle, uint pluginId, float value);
  817. /*!
  818. * Change a plugin's internal volume.
  819. * @param pluginId Plugin
  820. * @param value New volume
  821. */
  822. CARLA_API_EXPORT void carla_set_volume(CarlaHostHandle handle, uint pluginId, float value);
  823. /*!
  824. * Change a plugin's internal stereo balance, left channel.
  825. * @param pluginId Plugin
  826. * @param value New value
  827. */
  828. CARLA_API_EXPORT void carla_set_balance_left(CarlaHostHandle handle, uint pluginId, float value);
  829. /*!
  830. * Change a plugin's internal stereo balance, right channel.
  831. * @param pluginId Plugin
  832. * @param value New value
  833. */
  834. CARLA_API_EXPORT void carla_set_balance_right(CarlaHostHandle handle, uint pluginId, float value);
  835. /*!
  836. * Change a plugin's internal mono panning value.
  837. * @param pluginId Plugin
  838. * @param value New value
  839. */
  840. CARLA_API_EXPORT void carla_set_panning(CarlaHostHandle handle, uint pluginId, float value);
  841. /*!
  842. * Change a plugin's internal control channel.
  843. * @param pluginId Plugin
  844. * @param channel New channel
  845. */
  846. CARLA_API_EXPORT void carla_set_ctrl_channel(CarlaHostHandle handle, uint pluginId, int8_t channel);
  847. #endif
  848. /*!
  849. * Enable a plugin's option.
  850. * @param pluginId Plugin
  851. * @param option An option from PluginOptions
  852. * @param yesNo New enabled state
  853. */
  854. CARLA_API_EXPORT void carla_set_option(CarlaHostHandle handle, uint pluginId, uint option, bool yesNo);
  855. /*!
  856. * Change a plugin's parameter value.
  857. * @param pluginId Plugin
  858. * @param parameterId Parameter index
  859. * @param value New value
  860. */
  861. CARLA_API_EXPORT void carla_set_parameter_value(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, float value);
  862. #ifndef BUILD_BRIDGE
  863. /*!
  864. * Change a plugin's parameter MIDI channel.
  865. * @param pluginId Plugin
  866. * @param parameterId Parameter index
  867. * @param channel New MIDI channel
  868. */
  869. CARLA_API_EXPORT void carla_set_parameter_midi_channel(CarlaHostHandle handle,
  870. uint pluginId,
  871. uint32_t parameterId,
  872. uint8_t channel);
  873. /*!
  874. * Change a plugin's parameter mapped control index.
  875. * @param pluginId Plugin
  876. * @param parameterId Parameter index
  877. * @param cc New control index
  878. */
  879. CARLA_API_EXPORT void carla_set_parameter_mapped_control_index(CarlaHostHandle handle,
  880. uint pluginId,
  881. uint32_t parameterId,
  882. int16_t index);
  883. /*!
  884. * Change a plugin's parameter mapped range.
  885. * @param pluginId Plugin
  886. * @param parameterId Parameter index
  887. * @param minimum New mapped minimum
  888. * @param maximum New mapped maximum
  889. */
  890. CARLA_API_EXPORT void carla_set_parameter_mapped_range(CarlaHostHandle handle,
  891. uint pluginId,
  892. uint32_t parameterId,
  893. float minimum, float maximum);
  894. /*!
  895. * Change a plugin's parameter in drag/touch mode state.
  896. * Usually happens from a UI when the user is moving a parameter with a mouse or similar input.
  897. * @param pluginId Plugin
  898. * @param parameterId Parameter index
  899. * @param touch New state
  900. */
  901. CARLA_API_EXPORT void carla_set_parameter_touch(CarlaHostHandle handle,
  902. uint pluginId,
  903. uint32_t parameterId,
  904. bool touch);
  905. #endif
  906. /*!
  907. * Change a plugin's current program.
  908. * @param pluginId Plugin
  909. * @param programId New program
  910. */
  911. CARLA_API_EXPORT void carla_set_program(CarlaHostHandle handle, uint pluginId, uint32_t programId);
  912. /*!
  913. * Change a plugin's current MIDI program.
  914. * @param pluginId Plugin
  915. * @param midiProgramId New value
  916. */
  917. CARLA_API_EXPORT void carla_set_midi_program(CarlaHostHandle handle, uint pluginId, uint32_t midiProgramId);
  918. /*!
  919. * Set a plugin's custom data set.
  920. * @param pluginId Plugin
  921. * @param type Type
  922. * @param key Key
  923. * @param value New value
  924. * @see CustomDataTypes and CustomDataKeys
  925. */
  926. CARLA_API_EXPORT void carla_set_custom_data(CarlaHostHandle handle,
  927. uint pluginId,
  928. const char* type, const char* key, const char* value);
  929. /*!
  930. * Set a plugin's chunk data.
  931. * @param pluginId Plugin
  932. * @param chunkData New chunk data
  933. * @see PLUGIN_OPTION_USE_CHUNKS and carla_get_chunk_data()
  934. */
  935. CARLA_API_EXPORT void carla_set_chunk_data(CarlaHostHandle handle, uint pluginId, const char* chunkData);
  936. /*!
  937. * Tell a plugin to prepare for save.
  938. * This should be called before saving custom data sets.
  939. * @param pluginId Plugin
  940. */
  941. CARLA_API_EXPORT void carla_prepare_for_save(CarlaHostHandle handle, uint pluginId);
  942. /*!
  943. * Reset all plugin's parameters.
  944. * @param pluginId Plugin
  945. */
  946. CARLA_API_EXPORT void carla_reset_parameters(CarlaHostHandle handle, uint pluginId);
  947. /*!
  948. * Randomize all plugin's parameters.
  949. * @param pluginId Plugin
  950. */
  951. CARLA_API_EXPORT void carla_randomize_parameters(CarlaHostHandle handle, uint pluginId);
  952. #ifndef BUILD_BRIDGE
  953. /*!
  954. * Send a single note of a plugin.
  955. * If velocity is 0, note-off is sent; note-on otherwise.
  956. * @param pluginId Plugin
  957. * @param channel Note channel
  958. * @param note Note pitch
  959. * @param velocity Note velocity
  960. */
  961. CARLA_API_EXPORT void carla_send_midi_note(CarlaHostHandle handle,
  962. uint pluginId,
  963. uint8_t channel, uint8_t note, uint8_t velocity);
  964. #endif
  965. /*!
  966. * Set a custom title for the plugin UI window created by Carla.
  967. */
  968. CARLA_API_EXPORT void carla_set_custom_ui_title(CarlaHostHandle handle, uint pluginId, const char* title);
  969. /*!
  970. * Tell a plugin to show its own custom UI.
  971. * @param pluginId Plugin
  972. * @param yesNo New UI state, visible or not
  973. * @see PLUGIN_HAS_CUSTOM_UI
  974. */
  975. CARLA_API_EXPORT void carla_show_custom_ui(CarlaHostHandle handle, uint pluginId, bool yesNo);
  976. /*!
  977. * Embed the plugin's custom UI to the system pointer @a ptr.
  978. * This function is always called from the main thread.
  979. * @note This is very experimental and subject to change at this point
  980. */
  981. CARLA_API_EXPORT void* carla_embed_custom_ui(CarlaHostHandle handle, uint pluginId, void* ptr);
  982. /*!
  983. * Get the current engine buffer size.
  984. */
  985. CARLA_API_EXPORT uint32_t carla_get_buffer_size(CarlaHostHandle handle);
  986. /*!
  987. * Get the current engine sample rate.
  988. */
  989. CARLA_API_EXPORT double carla_get_sample_rate(CarlaHostHandle handle);
  990. /*!
  991. * Get the last error.
  992. */
  993. CARLA_API_EXPORT const char* carla_get_last_error(CarlaHostHandle handle);
  994. /*!
  995. * Get the current engine OSC URL (TCP).
  996. */
  997. CARLA_API_EXPORT const char* carla_get_host_osc_url_tcp(CarlaHostHandle handle);
  998. /*!
  999. * Get the current engine OSC URL (UDP).
  1000. */
  1001. CARLA_API_EXPORT const char* carla_get_host_osc_url_udp(CarlaHostHandle handle);
  1002. /*!
  1003. * Initialize NSM (that is, announce ourselves to it).
  1004. * Must be called as early as possible in the program's lifecycle.
  1005. * Returns true if NSM is available and initialized correctly.
  1006. */
  1007. CARLA_API_EXPORT bool carla_nsm_init(CarlaHostHandle handle, uint64_t pid, const char* executableName);
  1008. /*!
  1009. * Respond to an NSM callback.
  1010. */
  1011. CARLA_API_EXPORT void carla_nsm_ready(CarlaHostHandle handle, NsmCallbackOpcode opcode);
  1012. #ifndef CARLA_UTILS_H_INCLUDED
  1013. /*!
  1014. * Get the complete license text of used third-party code and features.
  1015. * Returned string is in basic html format.
  1016. */
  1017. CARLA_API_EXPORT const char* carla_get_complete_license_text(void);
  1018. /*!
  1019. * Get the juce version used in the current Carla build.
  1020. */
  1021. CARLA_API_EXPORT const char* carla_get_juce_version(void);
  1022. /*!
  1023. * Get the list of supported file extensions in carla_load_file().
  1024. */
  1025. CARLA_API_EXPORT const char* const* carla_get_supported_file_extensions(void);
  1026. /*!
  1027. * Get the list of supported features in the current Carla build.
  1028. */
  1029. CARLA_API_EXPORT const char* const* carla_get_supported_features(void);
  1030. /*!
  1031. * Get the absolute filename of this carla library.
  1032. */
  1033. CARLA_API_EXPORT const char* carla_get_library_filename(void);
  1034. /*!
  1035. * Get the folder where this carla library resides.
  1036. */
  1037. CARLA_API_EXPORT const char* carla_get_library_folder(void);
  1038. #endif
  1039. /** @} */
  1040. #endif /* CARLA_HOST_H_INCLUDED */