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.

830 lines
29KB

  1. /*
  2. * Carla Native Plugins
  3. * Copyright (C) 2012-2015 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. #undef DESCFUNCS
  21. #define DESCFUNCS \
  22. nullptr, nullptr, nullptr, nullptr, nullptr, \
  23. nullptr, nullptr, nullptr, nullptr, nullptr, \
  24. nullptr, nullptr, nullptr, nullptr, nullptr, \
  25. nullptr, nullptr, nullptr, nullptr, nullptr, nullptr
  26. static const NativePluginDescriptor sNativePluginDescriptors[] = {
  27. // -----------------------------------------------------------------------
  28. // Simple plugins
  29. {
  30. /* category */ NATIVE_PLUGIN_CATEGORY_NONE,
  31. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  32. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  33. /* audioIns */ 1,
  34. /* audioOuts */ 1,
  35. /* midiIns */ 0,
  36. /* midiOuts */ 0,
  37. /* paramIns */ 0,
  38. /* paramOuts */ 0,
  39. /* name */ "Bypass",
  40. /* label */ "bypass",
  41. /* maker */ "falkTX",
  42. /* copyright */ "GNU GPL v2+",
  43. DESCFUNCS
  44. },
  45. {
  46. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  47. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  48. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  49. /* audioIns */ 0,
  50. /* audioOuts */ 0,
  51. /* midiIns */ 0,
  52. /* midiOuts */ 0,
  53. /* paramIns */ 5-1,
  54. /* paramOuts */ 1,
  55. /* name */ "LFO",
  56. /* label */ "lfo",
  57. /* maker */ "falkTX",
  58. /* copyright */ "GNU GPL v2+",
  59. DESCFUNCS
  60. },
  61. {
  62. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  63. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  64. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  65. /* audioIns */ 0,
  66. /* audioOuts */ 0,
  67. /* midiIns */ 1,
  68. /* midiOuts */ 1,
  69. /* paramIns */ 0,
  70. /* paramOuts */ 0,
  71. /* name */ "MIDI Channel Filter",
  72. /* label */ "midichanfilter",
  73. /* maker */ "falkTX",
  74. /* copyright */ "GNU GPL v2+",
  75. DESCFUNCS
  76. },
  77. {
  78. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  79. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  80. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  81. /* audioIns */ 0,
  82. /* audioOuts */ 0,
  83. /* midiIns */ 1,
  84. /* midiOuts */ 1,
  85. /* paramIns */ 0,
  86. /* paramOuts */ 0,
  87. /* name */ "MIDI Gain",
  88. /* label */ "midigain",
  89. /* maker */ "falkTX",
  90. /* copyright */ "GNU GPL v2+",
  91. DESCFUNCS
  92. },
  93. {
  94. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  95. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  96. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  97. /* audioIns */ 0,
  98. /* audioOuts */ 0,
  99. /* midiIns */ MAX_MIDI_CHANNELS,
  100. /* midiOuts */ 1,
  101. /* paramIns */ 0,
  102. /* paramOuts */ 0,
  103. /* name */ "MIDI Join",
  104. /* label */ "midijoin",
  105. /* maker */ "falkTX",
  106. /* copyright */ "GNU GPL v2+",
  107. DESCFUNCS
  108. },
  109. {
  110. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  111. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  112. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  113. /* audioIns */ 0,
  114. /* audioOuts */ 0,
  115. /* midiIns */ 1,
  116. /* midiOuts */ MAX_MIDI_CHANNELS,
  117. /* paramIns */ 0,
  118. /* paramOuts */ 0,
  119. /* name */ "MIDI Split",
  120. /* label */ "midisplit",
  121. /* maker */ "falkTX",
  122. /* copyright */ "GNU GPL v2+",
  123. DESCFUNCS
  124. },
  125. {
  126. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  127. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  128. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  129. /* audioIns */ 0,
  130. /* audioOuts */ 0,
  131. /* midiIns */ 1,
  132. /* midiOuts */ 1,
  133. /* paramIns */ 0,
  134. /* paramOuts */ 0,
  135. /* name */ "MIDI Through",
  136. /* label */ "midithrough",
  137. /* maker */ "falkTX",
  138. /* copyright */ "GNU GPL v2+",
  139. DESCFUNCS
  140. },
  141. {
  142. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  143. /* hints */ NATIVE_PLUGIN_IS_RTSAFE,
  144. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  145. /* audioIns */ 0,
  146. /* audioOuts */ 0,
  147. /* midiIns */ 1,
  148. /* midiOuts */ 1,
  149. /* paramIns */ 1,
  150. /* paramOuts */ 0,
  151. /* name */ "MIDI Transpose",
  152. /* label */ "miditranspose",
  153. /* maker */ "falkTX",
  154. /* copyright */ "GNU GPL v2+",
  155. DESCFUNCS
  156. },
  157. // -----------------------------------------------------------------------
  158. // Audio file
  159. {
  160. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  161. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_HAS_UI
  162. |NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE),
  163. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  164. /* audioIns */ 0,
  165. /* audioOuts */ 2,
  166. /* midiIns */ 0,
  167. /* midiOuts */ 0,
  168. /* paramIns */ 1,
  169. /* paramOuts */ 0,
  170. /* name */ "Audio File",
  171. /* label */ "audiofile",
  172. /* maker */ "falkTX",
  173. /* copyright */ "GNU GPL v2+",
  174. DESCFUNCS
  175. },
  176. // -----------------------------------------------------------------------
  177. // MIDI file and sequencer
  178. {
  179. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  180. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  181. |NATIVE_PLUGIN_HAS_UI
  182. |NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE
  183. |NATIVE_PLUGIN_USES_STATE
  184. |NATIVE_PLUGIN_USES_TIME),
  185. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  186. /* audioIns */ 0,
  187. /* audioOuts */ 0,
  188. /* midiIns */ 0,
  189. /* midiOuts */ 1,
  190. /* paramIns */ 0,
  191. /* paramOuts */ 0,
  192. /* name */ "MIDI File",
  193. /* label */ "midifile",
  194. /* maker */ "falkTX",
  195. /* copyright */ "GNU GPL v2+",
  196. DESCFUNCS
  197. },
  198. #ifdef CARLA_OS_LINUX
  199. {
  200. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  201. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  202. |NATIVE_PLUGIN_HAS_UI
  203. |NATIVE_PLUGIN_USES_STATE
  204. |NATIVE_PLUGIN_USES_TIME),
  205. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  206. /* audioIns */ 0,
  207. /* audioOuts */ 0,
  208. /* midiIns */ 0,
  209. /* midiOuts */ 1,
  210. /* paramIns */ 4,
  211. /* paramOuts */ 0,
  212. /* name */ "MIDI Pattern",
  213. /* label */ "midipattern",
  214. /* maker */ "falkTX, tatch",
  215. /* copyright */ "GNU GPL v2+",
  216. DESCFUNCS
  217. },
  218. #endif
  219. // -----------------------------------------------------------------------
  220. // Carla
  221. #ifndef CARLA_OS_WIN
  222. {
  223. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  224. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  225. |NATIVE_PLUGIN_HAS_UI
  226. //|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  227. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  228. |NATIVE_PLUGIN_USES_STATE
  229. |NATIVE_PLUGIN_USES_TIME),
  230. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  231. /* audioIns */ 2,
  232. /* audioOuts */ 2,
  233. /* midiIns */ 1,
  234. /* midiOuts */ 1,
  235. /* paramIns */ 0,
  236. /* paramOuts */ 0,
  237. /* name */ "Carla-Rack",
  238. /* label */ "carlarack",
  239. /* maker */ "falkTX",
  240. /* copyright */ "GNU GPL v2+",
  241. DESCFUNCS
  242. },
  243. {
  244. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  245. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  246. |NATIVE_PLUGIN_HAS_UI
  247. //|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  248. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  249. |NATIVE_PLUGIN_USES_STATE
  250. |NATIVE_PLUGIN_USES_TIME),
  251. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  252. /* audioIns */ 2,
  253. /* audioOuts */ 2,
  254. /* midiIns */ 1,
  255. /* midiOuts */ 1,
  256. /* paramIns */ 0,
  257. /* paramOuts */ 0,
  258. /* name */ "Carla-Patchbay",
  259. /* label */ "carlapatchbay",
  260. /* maker */ "falkTX",
  261. /* copyright */ "GNU GPL v2+",
  262. DESCFUNCS
  263. },
  264. {
  265. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  266. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  267. |NATIVE_PLUGIN_HAS_UI
  268. //|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  269. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  270. |NATIVE_PLUGIN_USES_STATE
  271. |NATIVE_PLUGIN_USES_TIME),
  272. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  273. /* audioIns */ 3,
  274. /* audioOuts */ 2,
  275. /* midiIns */ 1,
  276. /* midiOuts */ 1,
  277. /* paramIns */ 0,
  278. /* paramOuts */ 0,
  279. /* name */ "Carla-Patchbay (sidechain)",
  280. /* label */ "carlapatchbay3s",
  281. /* maker */ "falkTX",
  282. /* copyright */ "GNU GPL v2+",
  283. DESCFUNCS
  284. },
  285. {
  286. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  287. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  288. |NATIVE_PLUGIN_HAS_UI
  289. //|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  290. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  291. |NATIVE_PLUGIN_USES_STATE
  292. |NATIVE_PLUGIN_USES_TIME),
  293. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  294. /* audioIns */ 16,
  295. /* audioOuts */ 16,
  296. /* midiIns */ 1,
  297. /* midiOuts */ 1,
  298. /* paramIns */ 0,
  299. /* paramOuts */ 0,
  300. /* name */ "Carla-Patchbay (16chan)",
  301. /* label */ "carlapatchbay16",
  302. /* maker */ "falkTX",
  303. /* copyright */ "GNU GPL v2+",
  304. DESCFUNCS
  305. },
  306. {
  307. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  308. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  309. |NATIVE_PLUGIN_HAS_UI
  310. //|NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  311. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  312. |NATIVE_PLUGIN_USES_STATE
  313. |NATIVE_PLUGIN_USES_TIME),
  314. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  315. /* audioIns */ 32,
  316. /* audioOuts */ 32,
  317. /* midiIns */ 1,
  318. /* midiOuts */ 1,
  319. /* paramIns */ 0,
  320. /* paramOuts */ 0,
  321. /* name */ "Carla-Patchbay (32chan)",
  322. /* label */ "carlapatchbay32",
  323. /* maker */ "falkTX",
  324. /* copyright */ "GNU GPL v2+",
  325. DESCFUNCS
  326. },
  327. #endif // CARLA_OS_WIN
  328. // -----------------------------------------------------------------------
  329. // DISTRHO Plugins
  330. {
  331. /* category */ NATIVE_PLUGIN_CATEGORY_EQ,
  332. #ifdef HAVE_DGL
  333. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  334. |NATIVE_PLUGIN_HAS_UI
  335. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  336. |NATIVE_PLUGIN_USES_PARENT_ID),
  337. #else
  338. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  339. #endif
  340. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  341. /* audioIns */ 2,
  342. /* audioOuts */ 2,
  343. /* midiIns */ 0,
  344. /* midiOuts */ 0,
  345. /* paramIns */ 6,
  346. /* paramOuts */ 0,
  347. /* name */ "3 Band EQ",
  348. /* label */ "3bandeq",
  349. /* maker */ "falkTX, Michael Gruhn",
  350. /* copyright */ "LGPL",
  351. DESCFUNCS
  352. },
  353. {
  354. /* category */ NATIVE_PLUGIN_CATEGORY_EQ,
  355. #ifdef HAVE_DGL
  356. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  357. |NATIVE_PLUGIN_HAS_UI
  358. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  359. |NATIVE_PLUGIN_USES_PARENT_ID),
  360. #else
  361. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  362. #endif
  363. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  364. /* audioIns */ 2,
  365. /* audioOuts */ 6,
  366. /* midiIns */ 0,
  367. /* midiOuts */ 0,
  368. /* paramIns */ 6,
  369. /* paramOuts */ 0,
  370. /* name */ "3 Band Splitter",
  371. /* label */ "3bandsplitter",
  372. /* maker */ "falkTX, Michael Gruhn",
  373. /* copyright */ "LGPL",
  374. DESCFUNCS
  375. },
  376. {
  377. /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH,
  378. #ifdef HAVE_DGL
  379. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  380. |NATIVE_PLUGIN_IS_SYNTH
  381. |NATIVE_PLUGIN_HAS_UI
  382. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  383. |NATIVE_PLUGIN_USES_PARENT_ID),
  384. #else
  385. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  386. |NATIVE_PLUGIN_IS_SYNTH),
  387. #endif
  388. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  389. /* audioIns */ 0,
  390. /* audioOuts */ 1,
  391. /* midiIns */ 1,
  392. /* midiOuts */ 0,
  393. /* paramIns */ 1,
  394. /* paramOuts */ 0,
  395. /* name */ "Kars",
  396. /* label */ "kars",
  397. /* maker */ "falkTX, Chris Cannam",
  398. /* copyright */ "ISC",
  399. DESCFUNCS
  400. },
  401. {
  402. /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH,
  403. #ifdef HAVE_DGL
  404. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  405. |NATIVE_PLUGIN_IS_SYNTH
  406. |NATIVE_PLUGIN_HAS_UI
  407. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  408. |NATIVE_PLUGIN_USES_PARENT_ID),
  409. #else
  410. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  411. |NATIVE_PLUGIN_IS_SYNTH),
  412. #endif
  413. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_CONTROL_CHANGES
  414. |NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF),
  415. /* audioIns */ 0,
  416. /* audioOuts */ 1,
  417. /* midiIns */ 1,
  418. /* midiOuts */ 0,
  419. /* paramIns */ 8,
  420. /* paramOuts */ 0,
  421. /* name */ "Nekobi",
  422. /* label */ "nekobi",
  423. /* maker */ "falkTX, Sean Bolton and others",
  424. /* copyright */ "GPL v2+",
  425. DESCFUNCS
  426. },
  427. {
  428. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  429. #ifdef HAVE_DGL
  430. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  431. |NATIVE_PLUGIN_HAS_UI
  432. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  433. |NATIVE_PLUGIN_USES_PARENT_ID),
  434. #else
  435. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  436. #endif
  437. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  438. /* audioIns */ 2,
  439. /* audioOuts */ 2,
  440. /* midiIns */ 0,
  441. /* midiOuts */ 0,
  442. /* paramIns */ 2,
  443. /* paramOuts */ 0,
  444. /* name */ "Ping Pong Pan",
  445. /* label */ "pingpongpan",
  446. /* maker */ "falkTX, Michael Gruhn",
  447. /* copyright */ "LGPL",
  448. DESCFUNCS
  449. },
  450. #ifdef HAVE_DGL
  451. #ifdef HAVE_PROJECTM
  452. {
  453. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  454. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  455. |NATIVE_PLUGIN_HAS_UI
  456. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  457. |NATIVE_PLUGIN_USES_PARENT_ID),
  458. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  459. /* audioIns */ 1,
  460. /* audioOuts */ 1,
  461. /* midiIns */ 0,
  462. /* midiOuts */ 0,
  463. /* paramIns */ 0,
  464. /* paramOuts */ 0,
  465. /* name */ "ProM",
  466. /* label */ "prom",
  467. /* maker */ "falkTX",
  468. /* copyright */ "LGPL",
  469. DESCFUNCS
  470. },
  471. #endif // HAVE_PROJECTM
  472. #endif // HAVE_DGL
  473. // -----------------------------------------------------------------------
  474. // DISTRHO plugins (Juice)
  475. {
  476. /* category */ NATIVE_PLUGIN_CATEGORY_DYNAMICS,
  477. #ifdef HAVE_DGL
  478. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  479. |NATIVE_PLUGIN_HAS_UI
  480. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  481. |NATIVE_PLUGIN_USES_PARENT_ID
  482. |NATIVE_PLUGIN_USES_TIME),
  483. #else
  484. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  485. |NATIVE_PLUGIN_USES_TIME),
  486. #endif
  487. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  488. /* audioIns */ 2,
  489. /* audioOuts */ 2,
  490. /* midiIns */ 0,
  491. /* midiOuts */ 0,
  492. /* paramIns */ 6,
  493. /* paramOuts */ 0,
  494. /* name */ "WobbleJuice",
  495. /* label */ "wobblejuice",
  496. /* maker */ "Andre Sklenar",
  497. /* copyright */ "GPL v2+",
  498. DESCFUNCS
  499. },
  500. {
  501. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  502. #ifdef HAVE_DGL
  503. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  504. |NATIVE_PLUGIN_HAS_UI
  505. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  506. |NATIVE_PLUGIN_USES_PARENT_ID
  507. |NATIVE_PLUGIN_USES_TIME),
  508. #else
  509. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  510. |NATIVE_PLUGIN_USES_TIME),
  511. #endif
  512. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  513. /* audioIns */ 8,
  514. /* audioOuts */ 2,
  515. /* midiIns */ 0,
  516. /* midiOuts */ 0,
  517. /* paramIns */ 13,
  518. /* paramOuts */ 4,
  519. /* name */ "VectorJuice",
  520. /* label */ "vectorjuice",
  521. /* maker */ "Andre Sklenar",
  522. /* copyright */ "GPL v2+",
  523. DESCFUNCS
  524. },
  525. // -----------------------------------------------------------------------
  526. // External-UI plugins
  527. #ifndef CARLA_OS_WIN
  528. {
  529. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  530. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  531. |NATIVE_PLUGIN_HAS_UI
  532. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  533. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  534. /* audioIns */ 2,
  535. /* audioOuts */ 0,
  536. /* midiIns */ 0,
  537. /* midiOuts */ 0,
  538. /* paramIns */ 2,
  539. /* paramOuts */ 2,
  540. /* name */ "Big Meter",
  541. /* label */ "bigmeter",
  542. /* maker */ "falkTX",
  543. /* copyright */ "GNU GPL v2+",
  544. DESCFUNCS
  545. },
  546. {
  547. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  548. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  549. |NATIVE_PLUGIN_HAS_UI),
  550. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  551. /* audioIns */ 0,
  552. /* audioOuts */ 0,
  553. /* midiIns */ 0,
  554. /* midiOuts */ 0,
  555. /* paramIns */ 1,
  556. /* paramOuts */ 0,
  557. /* name */ "Notes",
  558. /* label */ "notes",
  559. /* maker */ "falkTX",
  560. /* copyright */ "GNU GPL v2+",
  561. DESCFUNCS
  562. },
  563. #endif
  564. // -----------------------------------------------------------------------
  565. // ZynAddSubFX
  566. #ifdef HAVE_ZYN_DEPS
  567. {
  568. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  569. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  570. |NATIVE_PLUGIN_USES_PANNING
  571. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  572. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  573. /* audioIns */ 2,
  574. /* audioOuts */ 2,
  575. /* midiIns */ 0,
  576. /* midiOuts */ 0,
  577. /* paramIns */ 11-2,
  578. /* paramOuts */ 0,
  579. /* name */ "ZynAlienWah",
  580. /* label */ "zynalienwah",
  581. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  582. /* copyright */ "GNU GPL v2+",
  583. DESCFUNCS
  584. },
  585. {
  586. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  587. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  588. |NATIVE_PLUGIN_USES_PANNING
  589. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  590. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  591. /* audioIns */ 2,
  592. /* audioOuts */ 2,
  593. /* midiIns */ 0,
  594. /* midiOuts */ 0,
  595. /* paramIns */ 12-2,
  596. /* paramOuts */ 0,
  597. /* name */ "ZynChorus",
  598. /* label */ "zynchorus",
  599. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  600. /* copyright */ "GNU GPL v2+",
  601. DESCFUNCS
  602. },
  603. {
  604. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  605. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  606. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  607. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  608. /* audioIns */ 2,
  609. /* audioOuts */ 2,
  610. /* midiIns */ 0,
  611. /* midiOuts */ 0,
  612. /* paramIns */ 11-2,
  613. /* paramOuts */ 0,
  614. /* name */ "ZynDistortion",
  615. /* label */ "zyndistortion",
  616. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  617. /* copyright */ "GNU GPL v2+",
  618. DESCFUNCS
  619. },
  620. {
  621. /* category */ NATIVE_PLUGIN_CATEGORY_FILTER,
  622. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  623. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  624. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  625. /* audioIns */ 2,
  626. /* audioOuts */ 2,
  627. /* midiIns */ 0,
  628. /* midiOuts */ 0,
  629. /* paramIns */ 10-2,
  630. /* paramOuts */ 0,
  631. /* name */ "ZynDynamicFilter",
  632. /* label */ "zyndynamicfilter",
  633. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  634. /* copyright */ "GNU GPL v2+",
  635. DESCFUNCS
  636. },
  637. {
  638. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  639. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  640. |NATIVE_PLUGIN_USES_PANNING
  641. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  642. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  643. /* audioIns */ 2,
  644. /* audioOuts */ 2,
  645. /* midiIns */ 0,
  646. /* midiOuts */ 0,
  647. /* paramIns */ 7-2,
  648. /* paramOuts */ 0,
  649. /* name */ "ZynEcho",
  650. /* label */ "zynecho",
  651. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  652. /* copyright */ "GNU GPL v2+",
  653. DESCFUNCS
  654. },
  655. {
  656. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  657. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  658. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  659. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  660. /* audioIns */ 2,
  661. /* audioOuts */ 2,
  662. /* midiIns */ 0,
  663. /* midiOuts */ 0,
  664. /* paramIns */ 15-2,
  665. /* paramOuts */ 0,
  666. /* name */ "ZynPhaser",
  667. /* label */ "zynphaser",
  668. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  669. /* copyright */ "GNU GPL v2+",
  670. DESCFUNCS
  671. },
  672. {
  673. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  674. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  675. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  676. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  677. /* audioIns */ 2,
  678. /* audioOuts */ 2,
  679. /* midiIns */ 0,
  680. /* midiOuts */ 0,
  681. /* paramIns */ 13-2,
  682. /* paramOuts */ 0,
  683. /* name */ "ZynReverb",
  684. /* label */ "zynreverb",
  685. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  686. /* copyright */ "GNU GPL v2+",
  687. DESCFUNCS
  688. },
  689. {
  690. /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH,
  691. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  692. # ifdef HAVE_ZYN_UI_DEPS
  693. |NATIVE_PLUGIN_HAS_UI
  694. # endif
  695. |NATIVE_PLUGIN_USES_MULTI_PROGS
  696. |NATIVE_PLUGIN_USES_STATE),
  697. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_CONTROL_CHANGES
  698. |NATIVE_PLUGIN_SUPPORTS_NOTE_AFTERTOUCH
  699. |NATIVE_PLUGIN_SUPPORTS_PITCHBEND
  700. |NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF),
  701. /* audioIns */ 0,
  702. /* audioOuts */ 2,
  703. /* midiIns */ 1,
  704. /* midiOuts */ 0,
  705. /* paramIns */ 6,
  706. /* paramOuts */ 0,
  707. /* name */ "ZynAddSubFX",
  708. /* label */ "zynaddsubfx",
  709. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  710. /* copyright */ "GNU GPL v2+",
  711. DESCFUNCS
  712. },
  713. #endif // HAVE_ZYN_DEPS
  714. // -----------------------------------------------------------------------
  715. // Experimental plugins
  716. #ifdef HAVE_EXPERIMENTAL_PLUGINS
  717. {
  718. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  719. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  720. |NATIVE_PLUGIN_HAS_UI
  721. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  722. |NATIVE_PLUGIN_USES_STATE),
  723. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  724. /* audioIns */ 1,
  725. /* audioOuts */ 1,
  726. /* midiIns */ 1,
  727. /* midiOuts */ 0,
  728. /* paramIns */ 6,
  729. /* paramOuts */ 0,
  730. /* name */ "AT1",
  731. /* label */ "at1",
  732. /* maker */ "falkTX, Fons Adriaensen",
  733. /* copyright */ "GPL v2+",
  734. DESCFUNCS
  735. },
  736. {
  737. /* category */ NATIVE_PLUGIN_CATEGORY_FILTER,
  738. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  739. |NATIVE_PLUGIN_HAS_UI
  740. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  741. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  742. /* audioIns */ 2,
  743. /* audioOuts */ 2,
  744. /* midiIns */ 0,
  745. /* midiOuts */ 0,
  746. /* paramIns */ 6,
  747. /* paramOuts */ 0,
  748. /* name */ "BLS1",
  749. /* label */ "bls1",
  750. /* maker */ "falkTX, Fons Adriaensen",
  751. /* copyright */ "GPL v2+",
  752. DESCFUNCS
  753. },
  754. {
  755. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  756. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  757. |NATIVE_PLUGIN_HAS_UI
  758. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  759. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  760. /* audioIns */ 2,
  761. /* audioOuts */ 4,
  762. /* midiIns */ 0,
  763. /* midiOuts */ 0,
  764. /* paramIns */ 10,
  765. /* paramOuts */ 0,
  766. /* name */ "REV1 (Ambisonic)",
  767. /* label */ "rev1-ambisonic",
  768. /* maker */ "falkTX, Fons Adriaensen",
  769. /* copyright */ "GPL v2+",
  770. DESCFUNCS
  771. },
  772. {
  773. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  774. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  775. |NATIVE_PLUGIN_HAS_UI
  776. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  777. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  778. /* audioIns */ 2,
  779. /* audioOuts */ 2,
  780. /* midiIns */ 0,
  781. /* midiOuts */ 0,
  782. /* paramIns */ 10,
  783. /* paramOuts */ 0,
  784. /* name */ "REV1 (Stereo)",
  785. /* label */ "rev1-stereo",
  786. /* maker */ "falkTX, Fons Adriaensen",
  787. /* copyright */ "GPL v2+",
  788. DESCFUNCS
  789. },
  790. #endif // HAVE_EXPERIMENTAL_PLUGINS
  791. };
  792. #undef DESCFUNCS
  793. // -----------------------------------------------------------------------
  794. const NativePluginDescriptor* carla_get_native_plugins_data(uint32_t* count)
  795. {
  796. CARLA_SAFE_ASSERT_RETURN(count != nullptr, nullptr);
  797. *count = static_cast<uint32_t>(sizeof(sNativePluginDescriptors)/sizeof(NativePluginDescriptor));
  798. return sNativePluginDescriptors;
  799. }
  800. // -----------------------------------------------------------------------