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.

CarlaUtils.h 7.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. /*
  2. * Carla Plugin Host
  3. * Copyright (C) 2011-2019 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_UTILS_H_INCLUDED
  18. #define CARLA_UTILS_H_INCLUDED
  19. #include "CarlaBackend.h"
  20. #ifdef __cplusplus
  21. using CarlaBackend::PluginCategory;
  22. using CarlaBackend::PluginType;
  23. #endif
  24. /*!
  25. * @defgroup CarlaUtilsAPI Carla Utils API
  26. *
  27. * The Carla Utils API.
  28. *
  29. * This API allows to call advanced features from Python.
  30. * @{
  31. */
  32. /*!
  33. * TODO.
  34. */
  35. typedef void* CarlaPipeClientHandle;
  36. /*!
  37. * TODO.
  38. */
  39. typedef void (*CarlaPipeCallbackFunc)(void* ptr, const char* msg);
  40. /*!
  41. * Information about a cached plugin.
  42. * @see carla_get_cached_plugin_info()
  43. */
  44. typedef struct _CarlaCachedPluginInfo {
  45. /*!
  46. * Wherever the data in this struct is valid.
  47. * For performance reasons, plugins are only checked on request,
  48. * and as such, the count vs number of really valid plugins might not match.
  49. * Use this field to skip on plugins which cannot be loaded in Carla.
  50. */
  51. bool valid;
  52. /*!
  53. * Plugin category.
  54. */
  55. PluginCategory category;
  56. /*!
  57. * Plugin hints.
  58. * @see PluginHints
  59. */
  60. uint hints;
  61. /*!
  62. * Number of audio inputs.
  63. */
  64. uint32_t audioIns;
  65. /*!
  66. * Number of audio outputs.
  67. */
  68. uint32_t audioOuts;
  69. /*!
  70. * Number of CV inputs.
  71. */
  72. uint32_t cvIns;
  73. /*!
  74. * Number of CV outputs.
  75. */
  76. uint32_t cvOuts;
  77. /*!
  78. * Number of MIDI inputs.
  79. */
  80. uint32_t midiIns;
  81. /*!
  82. * Number of MIDI outputs.
  83. */
  84. uint32_t midiOuts;
  85. /*!
  86. * Number of input parameters.
  87. */
  88. uint32_t parameterIns;
  89. /*!
  90. * Number of output parameters.
  91. */
  92. uint32_t parameterOuts;
  93. /*!
  94. * Plugin name.
  95. */
  96. const char* name;
  97. /*!
  98. * Plugin label.
  99. */
  100. const char* label;
  101. /*!
  102. * Plugin author/maker.
  103. */
  104. const char* maker;
  105. /*!
  106. * Plugin copyright/license.
  107. */
  108. const char* copyright;
  109. #ifdef __cplusplus
  110. /*!
  111. * C++ constructor.
  112. */
  113. CARLA_API _CarlaCachedPluginInfo() noexcept;
  114. CARLA_DECLARE_NON_COPY_STRUCT(_CarlaCachedPluginInfo)
  115. #endif
  116. } CarlaCachedPluginInfo;
  117. /* --------------------------------------------------------------------------------------------------------------------
  118. * cached plugins */
  119. /*!
  120. * Get how many cached plugins are available.
  121. * Internal and LV2 plugin formats are cached and need to be discovered via this function.
  122. * Do not call this for any other plugin formats.
  123. *
  124. * @note if this carla build uses JUCE, then you must call carla_juce_init beforehand
  125. */
  126. CARLA_EXPORT uint carla_get_cached_plugin_count(PluginType ptype, const char* pluginPath);
  127. /*!
  128. * Get information about a cached plugin.
  129. *
  130. * @note if this carla build uses JUCE, then you must call carla_juce_init beforehand
  131. */
  132. CARLA_EXPORT const CarlaCachedPluginInfo* carla_get_cached_plugin_info(PluginType ptype, uint index);
  133. #ifndef CARLA_HOST_H_INCLUDED
  134. /* --------------------------------------------------------------------------------------------------------------------
  135. * information */
  136. /*!
  137. * Get the complete license text of used third-party code and features.
  138. * Returned string is in basic html format.
  139. */
  140. CARLA_EXPORT const char* carla_get_complete_license_text(void);
  141. /*!
  142. * Get the juce version used in the current Carla build.
  143. */
  144. CARLA_EXPORT const char* carla_get_juce_version(void);
  145. /*!
  146. * Get the list of supported file extensions in carla_load_file().
  147. */
  148. CARLA_EXPORT const char* const* carla_get_supported_file_extensions(void);
  149. /*!
  150. * Get the list of supported features in the current Carla build.
  151. */
  152. CARLA_EXPORT const char* const* carla_get_supported_features(void);
  153. /*!
  154. * Get the absolute filename of this carla library.
  155. */
  156. CARLA_EXPORT const char* carla_get_library_filename(void);
  157. /*!
  158. * Get the folder where this carla library resides.
  159. */
  160. CARLA_EXPORT const char* carla_get_library_folder(void);
  161. #endif
  162. /* --------------------------------------------------------------------------------------------------------------------
  163. * JUCE */
  164. /*!
  165. * Initialize data structures and GUI support for JUCE.
  166. * This is only needed when carla builds use JUCE and you call cached-plugin related APIs.
  167. *
  168. * Idle must then be called at somewhat regular intervals, though in practice there is no reason for it yet.
  169. *
  170. * Make sure to call carla_juce_cleanup after you are done with APIs that need JUCE.
  171. */
  172. CARLA_EXPORT void carla_juce_init(void);
  173. /*!
  174. * Give idle time to JUCE stuff.
  175. * Currently only used for Linux.
  176. */
  177. CARLA_EXPORT void carla_juce_idle(void);
  178. /*!
  179. * Cleanup the JUCE stuff that was initialized by carla_juce_init.
  180. */
  181. CARLA_EXPORT void carla_juce_cleanup(void);
  182. /* --------------------------------------------------------------------------------------------------------------------
  183. * pipes */
  184. /*!
  185. * TODO.
  186. */
  187. CARLA_EXPORT CarlaPipeClientHandle carla_pipe_client_new(const char* argv[], CarlaPipeCallbackFunc callbackFunc, void* callbackPtr);
  188. /*!
  189. * TODO.
  190. */
  191. CARLA_EXPORT void carla_pipe_client_idle(CarlaPipeClientHandle handle);
  192. /*!
  193. * TODO.
  194. */
  195. CARLA_EXPORT bool carla_pipe_client_is_running(CarlaPipeClientHandle handle);
  196. /*!
  197. * TODO.
  198. */
  199. CARLA_EXPORT void carla_pipe_client_lock(CarlaPipeClientHandle handle);
  200. /*!
  201. * TODO.
  202. */
  203. CARLA_EXPORT void carla_pipe_client_unlock(CarlaPipeClientHandle handle);
  204. /*!
  205. * TODO.
  206. */
  207. CARLA_EXPORT const char* carla_pipe_client_readlineblock(CarlaPipeClientHandle handle, uint timeout);
  208. /*!
  209. * Extras.
  210. * TODO.
  211. */
  212. CARLA_EXPORT bool carla_pipe_client_readlineblock_bool(CarlaPipeClientHandle handle, uint timeout);
  213. CARLA_EXPORT int carla_pipe_client_readlineblock_int(CarlaPipeClientHandle handle, uint timeout);
  214. CARLA_EXPORT double carla_pipe_client_readlineblock_float(CarlaPipeClientHandle handle, uint timeout);
  215. /*!
  216. * TODO.
  217. */
  218. CARLA_EXPORT bool carla_pipe_client_write_msg(CarlaPipeClientHandle handle, const char* msg);
  219. /*!
  220. * TODO.
  221. */
  222. CARLA_EXPORT bool carla_pipe_client_write_and_fix_msg(CarlaPipeClientHandle handle, const char* msg);
  223. /*!
  224. * TODO.
  225. */
  226. CARLA_EXPORT bool carla_pipe_client_flush(CarlaPipeClientHandle handle);
  227. /*!
  228. * TODO.
  229. */
  230. CARLA_EXPORT bool carla_pipe_client_flush_and_unlock(CarlaPipeClientHandle handle);
  231. /*!
  232. * TODO.
  233. */
  234. CARLA_EXPORT void carla_pipe_client_destroy(CarlaPipeClientHandle handle);
  235. /* --------------------------------------------------------------------------------------------------------------------
  236. * system stuff */
  237. /*!
  238. * Flush stdout or stderr.
  239. */
  240. CARLA_EXPORT void carla_fflush(bool err);
  241. /*!
  242. * Print the string @a string to stdout or stderr.
  243. */
  244. CARLA_EXPORT void carla_fputs(bool err, const char* string);
  245. /*!
  246. * Set the current process name to @a name.
  247. */
  248. CARLA_EXPORT void carla_set_process_name(const char* name);
  249. /* --------------------------------------------------------------------------------------------------------------------
  250. * window control */
  251. CARLA_EXPORT int carla_cocoa_get_window(void* nsViewPtr);
  252. CARLA_EXPORT void carla_x11_reparent_window(uintptr_t winId1, uintptr_t winId2);
  253. CARLA_EXPORT void carla_x11_move_window(uintptr_t winId, int x, int y);
  254. CARLA_EXPORT int* carla_x11_get_window_pos(uintptr_t winId);
  255. /* ----------------------------------------------------------------------------------------------------------------- */
  256. /** @} */
  257. #endif /* CARLA_UTILS_H_INCLUDED */