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.

429 lines
15KB

  1. /*
  2. * Carla Native Plugins
  3. * Copyright (C) 2012-2017 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. #include "CarlaNative.h"
  18. #include "CarlaMIDI.h"
  19. #include "CarlaUtils.hpp"
  20. #ifdef CARLA_OS_WIN
  21. # define DISABLE_PLUGINS_FOR_WINDOWS_BUILD
  22. # undef HAVE_PYQT
  23. #endif
  24. #undef DESCFUNCS
  25. #define DESCFUNCS \
  26. nullptr, nullptr, nullptr, nullptr, nullptr, \
  27. nullptr, nullptr, nullptr, nullptr, nullptr, \
  28. nullptr, nullptr, nullptr, nullptr, nullptr, \
  29. nullptr, nullptr, nullptr, nullptr, nullptr, nullptr
  30. static const NativePluginDescriptor sNativePluginDescriptors[] = {
  31. // --------------------------------------------------------------------------------------------------------------------
  32. // Simple plugins
  33. {
  34. /* category */ NATIVE_PLUGIN_CATEGORY_NONE,
  35. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  36. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  37. /* audioIns */ 1,
  38. /* audioOuts */ 1,
  39. /* midiIns */ 0,
  40. /* midiOuts */ 0,
  41. /* paramIns */ 0,
  42. /* paramOuts */ 0,
  43. /* name */ "Bypass",
  44. /* label */ "bypass",
  45. /* maker */ "falkTX",
  46. /* copyright */ "GNU GPL v2+",
  47. DESCFUNCS
  48. },
  49. {
  50. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  51. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  52. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  53. /* audioIns */ 0,
  54. /* audioOuts */ 0,
  55. /* midiIns */ 0,
  56. /* midiOuts */ 0,
  57. /* paramIns */ 5-1,
  58. /* paramOuts */ 1,
  59. /* name */ "LFO",
  60. /* label */ "lfo",
  61. /* maker */ "falkTX",
  62. /* copyright */ "GNU GPL v2+",
  63. DESCFUNCS
  64. },
  65. {
  66. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  67. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  68. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  69. /* audioIns */ 0,
  70. /* audioOuts */ 0,
  71. /* midiIns */ 1,
  72. /* midiOuts */ 1,
  73. /* paramIns */ 0,
  74. /* paramOuts */ 0,
  75. /* name */ "MIDI Channel Filter",
  76. /* label */ "midichanfilter",
  77. /* maker */ "falkTX",
  78. /* copyright */ "GNU GPL v2+",
  79. DESCFUNCS
  80. },
  81. {
  82. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  83. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  84. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  85. /* audioIns */ 0,
  86. /* audioOuts */ 0,
  87. /* midiIns */ 1,
  88. /* midiOuts */ 1,
  89. /* paramIns */ 0,
  90. /* paramOuts */ 0,
  91. /* name */ "MIDI Gain",
  92. /* label */ "midigain",
  93. /* maker */ "falkTX",
  94. /* copyright */ "GNU GPL v2+",
  95. DESCFUNCS
  96. },
  97. {
  98. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  99. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  100. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  101. /* audioIns */ 0,
  102. /* audioOuts */ 0,
  103. /* midiIns */ MAX_MIDI_CHANNELS,
  104. /* midiOuts */ 1,
  105. /* paramIns */ 0,
  106. /* paramOuts */ 0,
  107. /* name */ "MIDI Join",
  108. /* label */ "midijoin",
  109. /* maker */ "falkTX",
  110. /* copyright */ "GNU GPL v2+",
  111. DESCFUNCS
  112. },
  113. {
  114. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  115. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  116. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  117. /* audioIns */ 0,
  118. /* audioOuts */ 0,
  119. /* midiIns */ 1,
  120. /* midiOuts */ MAX_MIDI_CHANNELS,
  121. /* paramIns */ 0,
  122. /* paramOuts */ 0,
  123. /* name */ "MIDI Split",
  124. /* label */ "midisplit",
  125. /* maker */ "falkTX",
  126. /* copyright */ "GNU GPL v2+",
  127. DESCFUNCS
  128. },
  129. {
  130. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  131. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  132. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  133. /* audioIns */ 0,
  134. /* audioOuts */ 0,
  135. /* midiIns */ 1,
  136. /* midiOuts */ 1,
  137. /* paramIns */ 0,
  138. /* paramOuts */ 0,
  139. /* name */ "MIDI Through",
  140. /* label */ "midithrough",
  141. /* maker */ "falkTX",
  142. /* copyright */ "GNU GPL v2+",
  143. DESCFUNCS
  144. },
  145. {
  146. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  147. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  148. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  149. /* audioIns */ 0,
  150. /* audioOuts */ 0,
  151. /* midiIns */ 1,
  152. /* midiOuts */ 1,
  153. /* paramIns */ 1,
  154. /* paramOuts */ 0,
  155. /* name */ "MIDI Transpose",
  156. /* label */ "miditranspose",
  157. /* maker */ "falkTX",
  158. /* copyright */ "GNU GPL v2+",
  159. DESCFUNCS
  160. },
  161. // --------------------------------------------------------------------------------------------------------------------
  162. // Audio file
  163. {
  164. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  165. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  166. |NATIVE_PLUGIN_HAS_UI
  167. |NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE
  168. |NATIVE_PLUGIN_USES_TIME),
  169. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  170. /* audioIns */ 0,
  171. /* audioOuts */ 2,
  172. /* midiIns */ 0,
  173. /* midiOuts */ 0,
  174. /* paramIns */ 1,
  175. /* paramOuts */ 0,
  176. /* name */ "Audio File",
  177. /* label */ "audiofile",
  178. /* maker */ "falkTX",
  179. /* copyright */ "GNU GPL v2+",
  180. DESCFUNCS
  181. },
  182. // --------------------------------------------------------------------------------------------------------------------
  183. // MIDI file and sequencer
  184. {
  185. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  186. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  187. |NATIVE_PLUGIN_HAS_UI
  188. |NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE
  189. |NATIVE_PLUGIN_USES_STATE
  190. |NATIVE_PLUGIN_USES_TIME),
  191. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  192. /* audioIns */ 0,
  193. /* audioOuts */ 0,
  194. /* midiIns */ 0,
  195. /* midiOuts */ 1,
  196. /* paramIns */ 0,
  197. /* paramOuts */ 0,
  198. /* name */ "MIDI File",
  199. /* label */ "midifile",
  200. /* maker */ "falkTX",
  201. /* copyright */ "GNU GPL v2+",
  202. DESCFUNCS
  203. },
  204. #ifdef HAVE_PYQT
  205. {
  206. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  207. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  208. |NATIVE_PLUGIN_HAS_UI
  209. |NATIVE_PLUGIN_USES_STATE
  210. |NATIVE_PLUGIN_USES_TIME),
  211. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  212. /* audioIns */ 0,
  213. /* audioOuts */ 0,
  214. /* midiIns */ 0,
  215. /* midiOuts */ 1,
  216. /* paramIns */ 4,
  217. /* paramOuts */ 0,
  218. /* name */ "MIDI Pattern",
  219. /* label */ "midipattern",
  220. /* maker */ "falkTX, tatch",
  221. /* copyright */ "GNU GPL v2+",
  222. DESCFUNCS
  223. },
  224. #endif
  225. // --------------------------------------------------------------------------------------------------------------------
  226. // Carla
  227. #ifdef HAVE_PYQT
  228. {
  229. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  230. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  231. |NATIVE_PLUGIN_HAS_UI
  232. //|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  233. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  234. |NATIVE_PLUGIN_USES_STATE
  235. |NATIVE_PLUGIN_USES_TIME),
  236. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  237. /* audioIns */ 2,
  238. /* audioOuts */ 2,
  239. /* midiIns */ 1,
  240. /* midiOuts */ 1,
  241. /* paramIns */ 0,
  242. /* paramOuts */ 0,
  243. /* name */ "Carla-Rack",
  244. /* label */ "carlarack",
  245. /* maker */ "falkTX",
  246. /* copyright */ "GNU GPL v2+",
  247. DESCFUNCS
  248. },
  249. {
  250. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  251. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  252. |NATIVE_PLUGIN_HAS_UI
  253. //|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  254. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  255. |NATIVE_PLUGIN_USES_STATE
  256. |NATIVE_PLUGIN_USES_TIME),
  257. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  258. /* audioIns */ 2,
  259. /* audioOuts */ 2,
  260. /* midiIns */ 1,
  261. /* midiOuts */ 0,
  262. /* paramIns */ 0,
  263. /* paramOuts */ 0,
  264. /* name */ "Carla-Rack (no midi out)",
  265. /* label */ "carlarack-nomidiout",
  266. /* maker */ "falkTX",
  267. /* copyright */ "GNU GPL v2+",
  268. DESCFUNCS
  269. },
  270. {
  271. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  272. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  273. |NATIVE_PLUGIN_HAS_UI
  274. //|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  275. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  276. |NATIVE_PLUGIN_USES_STATE
  277. |NATIVE_PLUGIN_USES_TIME),
  278. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  279. /* audioIns */ 2,
  280. /* audioOuts */ 2,
  281. /* midiIns */ 1,
  282. /* midiOuts */ 1,
  283. /* paramIns */ 0,
  284. /* paramOuts */ 0,
  285. /* name */ "Carla-Patchbay",
  286. /* label */ "carlapatchbay",
  287. /* maker */ "falkTX",
  288. /* copyright */ "GNU GPL v2+",
  289. DESCFUNCS
  290. },
  291. {
  292. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  293. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  294. |NATIVE_PLUGIN_HAS_UI
  295. //|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  296. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  297. |NATIVE_PLUGIN_USES_STATE
  298. |NATIVE_PLUGIN_USES_TIME),
  299. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  300. /* audioIns */ 3,
  301. /* audioOuts */ 2,
  302. /* midiIns */ 1,
  303. /* midiOuts */ 1,
  304. /* paramIns */ 0,
  305. /* paramOuts */ 0,
  306. /* name */ "Carla-Patchbay (sidechain)",
  307. /* label */ "carlapatchbay3s",
  308. /* maker */ "falkTX",
  309. /* copyright */ "GNU GPL v2+",
  310. DESCFUNCS
  311. },
  312. {
  313. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  314. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  315. |NATIVE_PLUGIN_HAS_UI
  316. //|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  317. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  318. |NATIVE_PLUGIN_USES_STATE
  319. |NATIVE_PLUGIN_USES_TIME),
  320. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  321. /* audioIns */ 16,
  322. /* audioOuts */ 16,
  323. /* midiIns */ 1,
  324. /* midiOuts */ 1,
  325. /* paramIns */ 0,
  326. /* paramOuts */ 0,
  327. /* name */ "Carla-Patchbay (16chan)",
  328. /* label */ "carlapatchbay16",
  329. /* maker */ "falkTX",
  330. /* copyright */ "GNU GPL v2+",
  331. DESCFUNCS
  332. },
  333. {
  334. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  335. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  336. |NATIVE_PLUGIN_HAS_UI
  337. //|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  338. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  339. |NATIVE_PLUGIN_USES_STATE
  340. |NATIVE_PLUGIN_USES_TIME),
  341. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  342. /* audioIns */ 32,
  343. /* audioOuts */ 32,
  344. /* midiIns */ 1,
  345. /* midiOuts */ 1,
  346. /* paramIns */ 0,
  347. /* paramOuts */ 0,
  348. /* name */ "Carla-Patchbay (32chan)",
  349. /* label */ "carlapatchbay32",
  350. /* maker */ "falkTX",
  351. /* copyright */ "GNU GPL v2+",
  352. DESCFUNCS
  353. },
  354. #endif
  355. // --------------------------------------------------------------------------------------------------------------------
  356. // External-UI plugins
  357. #ifdef HAVE_PYQT
  358. {
  359. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  360. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  361. |NATIVE_PLUGIN_HAS_UI
  362. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  363. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  364. /* audioIns */ 2,
  365. /* audioOuts */ 0,
  366. /* midiIns */ 0,
  367. /* midiOuts */ 0,
  368. /* paramIns */ 2,
  369. /* paramOuts */ 2,
  370. /* name */ "Big Meter",
  371. /* label */ "bigmeter",
  372. /* maker */ "falkTX",
  373. /* copyright */ "GNU GPL v2+",
  374. DESCFUNCS
  375. },
  376. {
  377. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  378. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  379. |NATIVE_PLUGIN_HAS_UI),
  380. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  381. /* audioIns */ 0,
  382. /* audioOuts */ 0,
  383. /* midiIns */ 0,
  384. /* midiOuts */ 0,
  385. /* paramIns */ 1,
  386. /* paramOuts */ 0,
  387. /* name */ "Notes",
  388. /* label */ "notes",
  389. /* maker */ "falkTX",
  390. /* copyright */ "GNU GPL v2+",
  391. DESCFUNCS
  392. },
  393. #endif
  394. #ifdef HAVE_EXTERNAL_PLUGINS
  395. # define CARLA_EXTERNAL_PLUGINS_INCLUDED_DIRECTLY
  396. # include "external/_data.cpp"
  397. #endif
  398. };
  399. #undef DESCFUNCS
  400. // --------------------------------------------------------------------------------------------------------------------
  401. const NativePluginDescriptor* carla_get_native_plugins_data(uint32_t* count)
  402. {
  403. CARLA_SAFE_ASSERT_RETURN(count != nullptr, nullptr);
  404. *count = static_cast<uint32_t>(sizeof(sNativePluginDescriptors)/sizeof(NativePluginDescriptor));
  405. return sNativePluginDescriptors;
  406. }
  407. // --------------------------------------------------------------------------------------------------------------------