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.

858 lines
30KB

  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, nullptr, \
  23. nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, \
  24. nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, \
  25. 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 */ static_cast<NativePluginSupports>(0x0),
  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 */ static_cast<NativePluginSupports>(0x0),
  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. /* category */ NATIVE_PLUGIN_CATEGORY_FILTER,
  159. #if defined(__linux__) || defined(__linux)
  160. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  161. |NATIVE_PLUGIN_HAS_UI),
  162. #else
  163. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  164. #endif
  165. /* supports */ static_cast<NativePluginSupports>(0x0),
  166. /* audioIns */ 1,
  167. /* audioOuts */ 1,
  168. /* midiIns */ 0,
  169. /* midiOuts */ 0,
  170. /* paramIns */ 2 + 4*4,
  171. /* paramOuts */ 0,
  172. /* name */ "NekoFilter",
  173. /* label */ "nekofilter",
  174. /* maker */ "falkTX, Nedko, Fons Adriaensen",
  175. /* copyright */ "GNU GPL v2+",
  176. DESCFUNCS
  177. },
  178. // -----------------------------------------------------------------------
  179. // Audio file
  180. {
  181. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  182. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_HAS_UI
  183. |NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE),
  184. /* supports */ static_cast<NativePluginSupports>(0x0),
  185. /* audioIns */ 0,
  186. /* audioOuts */ 2,
  187. /* midiIns */ 0,
  188. /* midiOuts */ 0,
  189. /* paramIns */ 1,
  190. /* paramOuts */ 0,
  191. /* name */ "Audio File",
  192. /* label */ "audiofile",
  193. /* maker */ "falkTX",
  194. /* copyright */ "GNU GPL v2+",
  195. DESCFUNCS
  196. },
  197. // -----------------------------------------------------------------------
  198. // MIDI file and sequencer
  199. {
  200. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  201. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  202. |NATIVE_PLUGIN_HAS_UI
  203. |NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE
  204. |NATIVE_PLUGIN_USES_STATE
  205. |NATIVE_PLUGIN_USES_TIME),
  206. /* supports */ static_cast<NativePluginSupports>(0x0),
  207. /* audioIns */ 0,
  208. /* audioOuts */ 0,
  209. /* midiIns */ 0,
  210. /* midiOuts */ 1,
  211. /* paramIns */ 0,
  212. /* paramOuts */ 0,
  213. /* name */ "MIDI File",
  214. /* label */ "midifile",
  215. /* maker */ "falkTX",
  216. /* copyright */ "GNU GPL v2+",
  217. DESCFUNCS
  218. },
  219. #ifdef CARLA_OS_LINUX
  220. {
  221. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  222. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  223. |NATIVE_PLUGIN_HAS_UI
  224. |NATIVE_PLUGIN_USES_STATE
  225. |NATIVE_PLUGIN_USES_TIME),
  226. /* supports */ NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
  227. /* audioIns */ 0,
  228. /* audioOuts */ 0,
  229. /* midiIns */ 1,
  230. /* midiOuts */ 1,
  231. /* paramIns */ 0,
  232. /* paramOuts */ 0,
  233. /* name */ "MIDI Sequencer",
  234. /* label */ "midisequencer",
  235. /* maker */ "falkTX, tatch",
  236. /* copyright */ "GNU GPL v2+",
  237. DESCFUNCS
  238. },
  239. #endif
  240. // -----------------------------------------------------------------------
  241. // Carla
  242. #ifndef CARLA_OS_WIN
  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-Rack",
  259. /* label */ "carlarack",
  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 */ 2,
  274. /* audioOuts */ 2,
  275. /* midiIns */ 1,
  276. /* midiOuts */ 1,
  277. /* paramIns */ 0,
  278. /* paramOuts */ 0,
  279. /* name */ "Carla-Patchbay",
  280. /* label */ "carlapatchbay",
  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 */ 3,
  295. /* audioOuts */ 2,
  296. /* midiIns */ 1,
  297. /* midiOuts */ 1,
  298. /* paramIns */ 0,
  299. /* paramOuts */ 0,
  300. /* name */ "Carla-Patchbay (sidechain)",
  301. /* label */ "carlapatchbay3s",
  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 */ 16,
  316. /* audioOuts */ 16,
  317. /* midiIns */ 1,
  318. /* midiOuts */ 1,
  319. /* paramIns */ 0,
  320. /* paramOuts */ 0,
  321. /* name */ "Carla-Patchbay (16chan)",
  322. /* label */ "carlapatchbay16",
  323. /* maker */ "falkTX",
  324. /* copyright */ "GNU GPL v2+",
  325. DESCFUNCS
  326. },
  327. {
  328. /* category */ NATIVE_PLUGIN_CATEGORY_OTHER,
  329. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  330. |NATIVE_PLUGIN_HAS_UI
  331. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  332. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  333. |NATIVE_PLUGIN_USES_STATE
  334. |NATIVE_PLUGIN_USES_TIME),
  335. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_EVERYTHING),
  336. /* audioIns */ 32,
  337. /* audioOuts */ 32,
  338. /* midiIns */ 1,
  339. /* midiOuts */ 1,
  340. /* paramIns */ 0,
  341. /* paramOuts */ 0,
  342. /* name */ "Carla-Patchbay (32chan)",
  343. /* label */ "carlapatchbay32",
  344. /* maker */ "falkTX",
  345. /* copyright */ "GNU GPL v2+",
  346. DESCFUNCS
  347. },
  348. #endif // CARLA_OS_WIN
  349. // -----------------------------------------------------------------------
  350. // DISTRHO Plugins
  351. {
  352. /* category */ NATIVE_PLUGIN_CATEGORY_EQ,
  353. #ifdef HAVE_DGL
  354. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  355. |NATIVE_PLUGIN_HAS_UI
  356. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  357. |NATIVE_PLUGIN_USES_PARENT_ID),
  358. #else
  359. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  360. #endif
  361. /* supports */ static_cast<NativePluginSupports>(0x0),
  362. /* audioIns */ 2,
  363. /* audioOuts */ 2,
  364. /* midiIns */ 0,
  365. /* midiOuts */ 0,
  366. /* paramIns */ 6,
  367. /* paramOuts */ 0,
  368. /* name */ "3 Band EQ",
  369. /* label */ "3bandeq",
  370. /* maker */ "falkTX, Michael Gruhn",
  371. /* copyright */ "LGPL",
  372. DESCFUNCS
  373. },
  374. {
  375. /* category */ NATIVE_PLUGIN_CATEGORY_EQ,
  376. #ifdef HAVE_DGL
  377. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  378. |NATIVE_PLUGIN_HAS_UI
  379. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  380. |NATIVE_PLUGIN_USES_PARENT_ID),
  381. #else
  382. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  383. #endif
  384. /* supports */ static_cast<NativePluginSupports>(0x0),
  385. /* audioIns */ 2,
  386. /* audioOuts */ 6,
  387. /* midiIns */ 0,
  388. /* midiOuts */ 0,
  389. /* paramIns */ 6,
  390. /* paramOuts */ 0,
  391. /* name */ "3 Band Splitter",
  392. /* label */ "3bandsplitter",
  393. /* maker */ "falkTX, Michael Gruhn",
  394. /* copyright */ "LGPL",
  395. DESCFUNCS
  396. },
  397. {
  398. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  399. #if defined(HAVE_DGL) && ! defined(CARLA_OS_WIN)
  400. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  401. |NATIVE_PLUGIN_HAS_UI
  402. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  403. |NATIVE_PLUGIN_USES_PARENT_ID),
  404. #else
  405. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  406. #endif
  407. /* supports */ static_cast<NativePluginSupports>(0x0),
  408. /* audioIns */ 2,
  409. /* audioOuts */ 2,
  410. /* midiIns */ 0,
  411. /* midiOuts */ 0,
  412. /* paramIns */ 9,
  413. /* paramOuts */ 0,
  414. /* name */ "MVerb",
  415. /* label */ "mverb",
  416. /* maker */ "falkTX, Martin Eastwood",
  417. /* copyright */ "GPL v3+",
  418. DESCFUNCS
  419. },
  420. {
  421. /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH,
  422. #ifdef HAVE_DGL
  423. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  424. |NATIVE_PLUGIN_IS_SYNTH
  425. |NATIVE_PLUGIN_HAS_UI
  426. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  427. |NATIVE_PLUGIN_USES_PARENT_ID),
  428. #else
  429. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  430. |NATIVE_PLUGIN_IS_SYNTH),
  431. #endif
  432. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_CONTROL_CHANGES
  433. |NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF),
  434. /* audioIns */ 0,
  435. /* audioOuts */ 1,
  436. /* midiIns */ 1,
  437. /* midiOuts */ 0,
  438. /* paramIns */ 8,
  439. /* paramOuts */ 0,
  440. /* name */ "Nekobi",
  441. /* label */ "nekobi",
  442. /* maker */ "falkTX, Sean Bolton and others",
  443. /* copyright */ "GPL v2+",
  444. DESCFUNCS
  445. },
  446. {
  447. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  448. #ifdef HAVE_DGL
  449. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  450. |NATIVE_PLUGIN_HAS_UI
  451. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  452. |NATIVE_PLUGIN_USES_PARENT_ID),
  453. #else
  454. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  455. #endif
  456. /* supports */ static_cast<NativePluginSupports>(0x0),
  457. /* audioIns */ 2,
  458. /* audioOuts */ 2,
  459. /* midiIns */ 0,
  460. /* midiOuts */ 0,
  461. /* paramIns */ 2,
  462. /* paramOuts */ 0,
  463. /* name */ "Ping Pong Pan",
  464. /* label */ "pingpongpan",
  465. /* maker */ "falkTX, Michael Gruhn",
  466. /* copyright */ "LGPL",
  467. DESCFUNCS
  468. },
  469. #ifdef HAVE_DGL
  470. #ifdef HAVE_PROJECTM
  471. {
  472. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  473. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  474. |NATIVE_PLUGIN_HAS_UI
  475. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  476. |NATIVE_PLUGIN_USES_PARENT_ID),
  477. /* supports */ static_cast<NativePluginSupports>(0x0),
  478. /* audioIns */ 1,
  479. /* audioOuts */ 1,
  480. /* midiIns */ 0,
  481. /* midiOuts */ 0,
  482. /* paramIns */ 0,
  483. /* paramOuts */ 0,
  484. /* name */ "ProM",
  485. /* label */ "prom",
  486. /* maker */ "falkTX",
  487. /* copyright */ "LGPL",
  488. DESCFUNCS
  489. },
  490. #endif // HAVE_PROJECTM
  491. #endif // HAVE_DGL
  492. // -----------------------------------------------------------------------
  493. // DISTRHO plugins (Juice)
  494. {
  495. /* category */ NATIVE_PLUGIN_CATEGORY_DYNAMICS,
  496. #ifdef HAVE_DGL
  497. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  498. |NATIVE_PLUGIN_HAS_UI
  499. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  500. |NATIVE_PLUGIN_USES_PARENT_ID
  501. |NATIVE_PLUGIN_USES_TIME),
  502. #else
  503. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  504. |NATIVE_PLUGIN_USES_TIME),
  505. #endif
  506. /* supports */ static_cast<NativePluginSupports>(0x0),
  507. /* audioIns */ 2,
  508. /* audioOuts */ 2,
  509. /* midiIns */ 0,
  510. /* midiOuts */ 0,
  511. /* paramIns */ 6,
  512. /* paramOuts */ 0,
  513. /* name */ "WobbleJuice",
  514. /* label */ "wobblejuice",
  515. /* maker */ "Andre Sklenar",
  516. /* copyright */ "GPL v2+",
  517. DESCFUNCS
  518. },
  519. {
  520. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  521. #ifdef HAVE_DGL
  522. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  523. |NATIVE_PLUGIN_HAS_UI
  524. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  525. |NATIVE_PLUGIN_USES_PARENT_ID
  526. |NATIVE_PLUGIN_USES_TIME),
  527. #else
  528. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  529. |NATIVE_PLUGIN_USES_TIME),
  530. #endif
  531. /* supports */ static_cast<NativePluginSupports>(0x0),
  532. /* audioIns */ 8,
  533. /* audioOuts */ 2,
  534. /* midiIns */ 0,
  535. /* midiOuts */ 0,
  536. /* paramIns */ 13,
  537. /* paramOuts */ 4,
  538. /* name */ "VectorJuice",
  539. /* label */ "vectorjuice",
  540. /* maker */ "Andre Sklenar",
  541. /* copyright */ "GPL v2+",
  542. DESCFUNCS
  543. },
  544. // -----------------------------------------------------------------------
  545. // External-UI plugins
  546. #ifndef CARLA_OS_WIN
  547. {
  548. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  549. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  550. |NATIVE_PLUGIN_HAS_UI
  551. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  552. /* supports */ static_cast<NativePluginSupports>(0x0),
  553. /* audioIns */ 2,
  554. /* audioOuts */ 0,
  555. /* midiIns */ 0,
  556. /* midiOuts */ 0,
  557. /* paramIns */ 1,
  558. /* paramOuts */ 2,
  559. /* name */ "Big Meter",
  560. /* label */ "bigmeter",
  561. /* maker */ "falkTX",
  562. /* copyright */ "GNU GPL v2+",
  563. DESCFUNCS
  564. },
  565. {
  566. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  567. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  568. |NATIVE_PLUGIN_HAS_UI),
  569. /* supports */ static_cast<NativePluginSupports>(0x0),
  570. /* audioIns */ 0,
  571. /* audioOuts */ 0,
  572. /* midiIns */ 0,
  573. /* midiOuts */ 0,
  574. /* paramIns */ 1,
  575. /* paramOuts */ 0,
  576. /* name */ "Notes",
  577. /* label */ "notes",
  578. /* maker */ "falkTX",
  579. /* copyright */ "GNU GPL v2+",
  580. DESCFUNCS
  581. },
  582. #endif
  583. // -----------------------------------------------------------------------
  584. // ZynAddSubFX
  585. #ifdef HAVE_ZYN_DEPS
  586. {
  587. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  588. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  589. |NATIVE_PLUGIN_USES_PANNING
  590. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  591. /* supports */ static_cast<NativePluginSupports>(0x0),
  592. /* audioIns */ 2,
  593. /* audioOuts */ 2,
  594. /* midiIns */ 0,
  595. /* midiOuts */ 0,
  596. /* paramIns */ 11-2,
  597. /* paramOuts */ 0,
  598. /* name */ "ZynAlienWah",
  599. /* label */ "zynalienwah",
  600. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  601. /* copyright */ "GNU GPL v2+",
  602. DESCFUNCS
  603. },
  604. {
  605. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  606. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  607. |NATIVE_PLUGIN_USES_PANNING
  608. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  609. /* supports */ static_cast<NativePluginSupports>(0x0),
  610. /* audioIns */ 2,
  611. /* audioOuts */ 2,
  612. /* midiIns */ 0,
  613. /* midiOuts */ 0,
  614. /* paramIns */ 12-2,
  615. /* paramOuts */ 0,
  616. /* name */ "ZynChorus",
  617. /* label */ "zynchorus",
  618. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  619. /* copyright */ "GNU GPL v2+",
  620. DESCFUNCS
  621. },
  622. {
  623. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  624. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  625. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  626. /* supports */ static_cast<NativePluginSupports>(0x0),
  627. /* audioIns */ 2,
  628. /* audioOuts */ 2,
  629. /* midiIns */ 0,
  630. /* midiOuts */ 0,
  631. /* paramIns */ 11-2,
  632. /* paramOuts */ 0,
  633. /* name */ "ZynDistortion",
  634. /* label */ "zyndistortion",
  635. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  636. /* copyright */ "GNU GPL v2+",
  637. DESCFUNCS
  638. },
  639. {
  640. /* category */ NATIVE_PLUGIN_CATEGORY_FILTER,
  641. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  642. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  643. /* supports */ static_cast<NativePluginSupports>(0x0),
  644. /* audioIns */ 2,
  645. /* audioOuts */ 2,
  646. /* midiIns */ 0,
  647. /* midiOuts */ 0,
  648. /* paramIns */ 10-2,
  649. /* paramOuts */ 0,
  650. /* name */ "ZynDynamicFilter",
  651. /* label */ "zyndynamicfilter",
  652. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  653. /* copyright */ "GNU GPL v2+",
  654. DESCFUNCS
  655. },
  656. {
  657. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  658. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  659. |NATIVE_PLUGIN_USES_PANNING
  660. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  661. /* supports */ static_cast<NativePluginSupports>(0x0),
  662. /* audioIns */ 2,
  663. /* audioOuts */ 2,
  664. /* midiIns */ 0,
  665. /* midiOuts */ 0,
  666. /* paramIns */ 7-2,
  667. /* paramOuts */ 0,
  668. /* name */ "ZynEcho",
  669. /* label */ "zynecho",
  670. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  671. /* copyright */ "GNU GPL v2+",
  672. DESCFUNCS
  673. },
  674. {
  675. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  676. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  677. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  678. /* supports */ static_cast<NativePluginSupports>(0x0),
  679. /* audioIns */ 2,
  680. /* audioOuts */ 2,
  681. /* midiIns */ 0,
  682. /* midiOuts */ 0,
  683. /* paramIns */ 15-2,
  684. /* paramOuts */ 0,
  685. /* name */ "ZynPhaser",
  686. /* label */ "zynphaser",
  687. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  688. /* copyright */ "GNU GPL v2+",
  689. DESCFUNCS
  690. },
  691. {
  692. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  693. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  694. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  695. /* supports */ static_cast<NativePluginSupports>(0x0),
  696. /* audioIns */ 2,
  697. /* audioOuts */ 2,
  698. /* midiIns */ 0,
  699. /* midiOuts */ 0,
  700. /* paramIns */ 13-2,
  701. /* paramOuts */ 0,
  702. /* name */ "ZynReverb",
  703. /* label */ "zynreverb",
  704. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  705. /* copyright */ "GNU GPL v2+",
  706. DESCFUNCS
  707. },
  708. # ifdef CARLA_OS_LINUX
  709. {
  710. /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH,
  711. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  712. # ifdef HAVE_ZYN_UI_DEPS
  713. |NATIVE_PLUGIN_HAS_UI
  714. # endif
  715. |NATIVE_PLUGIN_USES_MULTI_PROGS
  716. |NATIVE_PLUGIN_USES_STATE),
  717. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_CONTROL_CHANGES
  718. |NATIVE_PLUGIN_SUPPORTS_NOTE_AFTERTOUCH
  719. |NATIVE_PLUGIN_SUPPORTS_PITCHBEND
  720. |NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF),
  721. /* audioIns */ 0,
  722. /* audioOuts */ 2,
  723. /* midiIns */ 1,
  724. /* midiOuts */ 0,
  725. /* paramIns */ 6,
  726. /* paramOuts */ 0,
  727. /* name */ "ZynAddSubFX",
  728. /* label */ "zynaddsubfx",
  729. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  730. /* copyright */ "GNU GPL v2+",
  731. DESCFUNCS
  732. },
  733. # endif // CARLA_OS_LINUX
  734. #endif // HAVE_ZYN_DEPS
  735. // -----------------------------------------------------------------------
  736. // Experimental plugins
  737. #ifdef HAVE_EXPERIMENTAL_PLUGINS
  738. {
  739. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  740. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  741. |NATIVE_PLUGIN_HAS_UI
  742. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  743. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  744. |NATIVE_PLUGIN_USES_PARENT_ID),
  745. /* supports */ static_cast<NativePluginSupports>(0x0),
  746. /* audioIns */ 1,
  747. /* audioOuts */ 1,
  748. /* midiIns */ 1,
  749. /* midiOuts */ 0,
  750. /* paramIns */ 6,
  751. /* paramOuts */ 0,
  752. /* name */ "AT1",
  753. /* label */ "at1",
  754. /* maker */ "falkTX, Fons Adriaensen",
  755. /* copyright */ "GPL v2+",
  756. DESCFUNCS
  757. },
  758. {
  759. /* category */ NATIVE_PLUGIN_CATEGORY_FILTER,
  760. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  761. |NATIVE_PLUGIN_HAS_UI
  762. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  763. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  764. |NATIVE_PLUGIN_USES_PARENT_ID),
  765. /* supports */ static_cast<NativePluginSupports>(0x0),
  766. /* audioIns */ 2,
  767. /* audioOuts */ 2,
  768. /* midiIns */ 0,
  769. /* midiOuts */ 0,
  770. /* paramIns */ 6,
  771. /* paramOuts */ 0,
  772. /* name */ "BLS1",
  773. /* label */ "bls1",
  774. /* maker */ "falkTX, Fons Adriaensen",
  775. /* copyright */ "GPL v2+",
  776. DESCFUNCS
  777. },
  778. {
  779. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  780. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  781. |NATIVE_PLUGIN_HAS_UI
  782. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  783. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  784. |NATIVE_PLUGIN_USES_PARENT_ID),
  785. /* supports */ static_cast<NativePluginSupports>(0x0),
  786. /* audioIns */ 2,
  787. /* audioOuts */ 4,
  788. /* midiIns */ 0,
  789. /* midiOuts */ 0,
  790. /* paramIns */ 10,
  791. /* paramOuts */ 0,
  792. /* name */ "REV1 (Ambisonic)",
  793. /* label */ "rev1-ambisonic",
  794. /* maker */ "falkTX, Fons Adriaensen",
  795. /* copyright */ "GPL v2+",
  796. DESCFUNCS
  797. },
  798. {
  799. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  800. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  801. |NATIVE_PLUGIN_HAS_UI
  802. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  803. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  804. |NATIVE_PLUGIN_USES_PARENT_ID),
  805. /* supports */ static_cast<NativePluginSupports>(0x0),
  806. /* audioIns */ 2,
  807. /* audioOuts */ 2,
  808. /* midiIns */ 0,
  809. /* midiOuts */ 0,
  810. /* paramIns */ 10,
  811. /* paramOuts */ 0,
  812. /* name */ "REV1 (Stereo)",
  813. /* label */ "rev1-stereo",
  814. /* maker */ "falkTX, Fons Adriaensen",
  815. /* copyright */ "GPL v2+",
  816. DESCFUNCS
  817. },
  818. #endif // HAVE_EXPERIMENTAL_PLUGINS
  819. };
  820. #undef DESCFUNCS
  821. // -----------------------------------------------------------------------
  822. const NativePluginDescriptor* carla_get_native_plugins_data(uint32_t* count)
  823. {
  824. CARLA_SAFE_ASSERT_RETURN(count != nullptr, nullptr);
  825. *count = static_cast<uint32_t>(sizeof(sNativePluginDescriptors)/sizeof(NativePluginDescriptor));
  826. return sNativePluginDescriptors;
  827. }
  828. // -----------------------------------------------------------------------