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_DELAY,
  378. #ifdef HAVE_DGL
  379. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  380. |NATIVE_PLUGIN_HAS_UI
  381. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  382. |NATIVE_PLUGIN_USES_PARENT_ID),
  383. #else
  384. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  385. #endif
  386. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  387. /* audioIns */ 2,
  388. /* audioOuts */ 2,
  389. /* midiIns */ 0,
  390. /* midiOuts */ 0,
  391. /* paramIns */ 9,
  392. /* paramOuts */ 0,
  393. /* name */ "MVerb",
  394. /* label */ "mverb",
  395. /* maker */ "falkTX, Martin Eastwood",
  396. /* copyright */ "GPL v3+",
  397. DESCFUNCS
  398. },
  399. {
  400. /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH,
  401. #ifdef HAVE_DGL
  402. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  403. |NATIVE_PLUGIN_IS_SYNTH
  404. |NATIVE_PLUGIN_HAS_UI
  405. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  406. |NATIVE_PLUGIN_USES_PARENT_ID),
  407. #else
  408. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  409. |NATIVE_PLUGIN_IS_SYNTH),
  410. #endif
  411. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_CONTROL_CHANGES
  412. |NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF),
  413. /* audioIns */ 0,
  414. /* audioOuts */ 1,
  415. /* midiIns */ 1,
  416. /* midiOuts */ 0,
  417. /* paramIns */ 8,
  418. /* paramOuts */ 0,
  419. /* name */ "Nekobi",
  420. /* label */ "nekobi",
  421. /* maker */ "falkTX, Sean Bolton and others",
  422. /* copyright */ "GPL v2+",
  423. DESCFUNCS
  424. },
  425. {
  426. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  427. #ifdef HAVE_DGL
  428. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  429. |NATIVE_PLUGIN_HAS_UI
  430. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  431. |NATIVE_PLUGIN_USES_PARENT_ID),
  432. #else
  433. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  434. #endif
  435. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  436. /* audioIns */ 2,
  437. /* audioOuts */ 2,
  438. /* midiIns */ 0,
  439. /* midiOuts */ 0,
  440. /* paramIns */ 2,
  441. /* paramOuts */ 0,
  442. /* name */ "Ping Pong Pan",
  443. /* label */ "pingpongpan",
  444. /* maker */ "falkTX, Michael Gruhn",
  445. /* copyright */ "LGPL",
  446. DESCFUNCS
  447. },
  448. #ifdef HAVE_DGL
  449. #ifdef HAVE_PROJECTM
  450. {
  451. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  452. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  453. |NATIVE_PLUGIN_HAS_UI
  454. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  455. |NATIVE_PLUGIN_USES_PARENT_ID),
  456. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  457. /* audioIns */ 1,
  458. /* audioOuts */ 1,
  459. /* midiIns */ 0,
  460. /* midiOuts */ 0,
  461. /* paramIns */ 0,
  462. /* paramOuts */ 0,
  463. /* name */ "ProM",
  464. /* label */ "prom",
  465. /* maker */ "falkTX",
  466. /* copyright */ "LGPL",
  467. DESCFUNCS
  468. },
  469. #endif // HAVE_PROJECTM
  470. #endif // HAVE_DGL
  471. // -----------------------------------------------------------------------
  472. // DISTRHO plugins (Juice)
  473. {
  474. /* category */ NATIVE_PLUGIN_CATEGORY_DYNAMICS,
  475. #ifdef HAVE_DGL
  476. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  477. |NATIVE_PLUGIN_HAS_UI
  478. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  479. |NATIVE_PLUGIN_USES_PARENT_ID
  480. |NATIVE_PLUGIN_USES_TIME),
  481. #else
  482. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  483. |NATIVE_PLUGIN_USES_TIME),
  484. #endif
  485. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  486. /* audioIns */ 2,
  487. /* audioOuts */ 2,
  488. /* midiIns */ 0,
  489. /* midiOuts */ 0,
  490. /* paramIns */ 6,
  491. /* paramOuts */ 0,
  492. /* name */ "WobbleJuice",
  493. /* label */ "wobblejuice",
  494. /* maker */ "Andre Sklenar",
  495. /* copyright */ "GPL v2+",
  496. DESCFUNCS
  497. },
  498. {
  499. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  500. #ifdef HAVE_DGL
  501. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  502. |NATIVE_PLUGIN_HAS_UI
  503. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  504. |NATIVE_PLUGIN_USES_PARENT_ID
  505. |NATIVE_PLUGIN_USES_TIME),
  506. #else
  507. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  508. |NATIVE_PLUGIN_USES_TIME),
  509. #endif
  510. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  511. /* audioIns */ 8,
  512. /* audioOuts */ 2,
  513. /* midiIns */ 0,
  514. /* midiOuts */ 0,
  515. /* paramIns */ 13,
  516. /* paramOuts */ 4,
  517. /* name */ "VectorJuice",
  518. /* label */ "vectorjuice",
  519. /* maker */ "Andre Sklenar",
  520. /* copyright */ "GPL v2+",
  521. DESCFUNCS
  522. },
  523. // -----------------------------------------------------------------------
  524. // External-UI plugins
  525. #ifndef CARLA_OS_WIN
  526. {
  527. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  528. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  529. |NATIVE_PLUGIN_HAS_UI
  530. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  531. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  532. /* audioIns */ 2,
  533. /* audioOuts */ 0,
  534. /* midiIns */ 0,
  535. /* midiOuts */ 0,
  536. /* paramIns */ 2,
  537. /* paramOuts */ 2,
  538. /* name */ "Big Meter",
  539. /* label */ "bigmeter",
  540. /* maker */ "falkTX",
  541. /* copyright */ "GNU GPL v2+",
  542. DESCFUNCS
  543. },
  544. {
  545. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  546. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  547. |NATIVE_PLUGIN_HAS_UI),
  548. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  549. /* audioIns */ 0,
  550. /* audioOuts */ 0,
  551. /* midiIns */ 0,
  552. /* midiOuts */ 0,
  553. /* paramIns */ 1,
  554. /* paramOuts */ 0,
  555. /* name */ "Notes",
  556. /* label */ "notes",
  557. /* maker */ "falkTX",
  558. /* copyright */ "GNU GPL v2+",
  559. DESCFUNCS
  560. },
  561. #endif
  562. // -----------------------------------------------------------------------
  563. // ZynAddSubFX
  564. #ifdef HAVE_ZYN_DEPS
  565. {
  566. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  567. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  568. |NATIVE_PLUGIN_USES_PANNING
  569. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  570. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  571. /* audioIns */ 2,
  572. /* audioOuts */ 2,
  573. /* midiIns */ 0,
  574. /* midiOuts */ 0,
  575. /* paramIns */ 11-2,
  576. /* paramOuts */ 0,
  577. /* name */ "ZynAlienWah",
  578. /* label */ "zynalienwah",
  579. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  580. /* copyright */ "GNU GPL v2+",
  581. DESCFUNCS
  582. },
  583. {
  584. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  585. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  586. |NATIVE_PLUGIN_USES_PANNING
  587. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  588. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  589. /* audioIns */ 2,
  590. /* audioOuts */ 2,
  591. /* midiIns */ 0,
  592. /* midiOuts */ 0,
  593. /* paramIns */ 12-2,
  594. /* paramOuts */ 0,
  595. /* name */ "ZynChorus",
  596. /* label */ "zynchorus",
  597. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  598. /* copyright */ "GNU GPL v2+",
  599. DESCFUNCS
  600. },
  601. {
  602. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  603. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  604. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  605. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  606. /* audioIns */ 2,
  607. /* audioOuts */ 2,
  608. /* midiIns */ 0,
  609. /* midiOuts */ 0,
  610. /* paramIns */ 11-2,
  611. /* paramOuts */ 0,
  612. /* name */ "ZynDistortion",
  613. /* label */ "zyndistortion",
  614. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  615. /* copyright */ "GNU GPL v2+",
  616. DESCFUNCS
  617. },
  618. {
  619. /* category */ NATIVE_PLUGIN_CATEGORY_FILTER,
  620. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  621. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  622. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  623. /* audioIns */ 2,
  624. /* audioOuts */ 2,
  625. /* midiIns */ 0,
  626. /* midiOuts */ 0,
  627. /* paramIns */ 10-2,
  628. /* paramOuts */ 0,
  629. /* name */ "ZynDynamicFilter",
  630. /* label */ "zyndynamicfilter",
  631. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  632. /* copyright */ "GNU GPL v2+",
  633. DESCFUNCS
  634. },
  635. {
  636. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  637. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  638. |NATIVE_PLUGIN_USES_PANNING
  639. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  640. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  641. /* audioIns */ 2,
  642. /* audioOuts */ 2,
  643. /* midiIns */ 0,
  644. /* midiOuts */ 0,
  645. /* paramIns */ 7-2,
  646. /* paramOuts */ 0,
  647. /* name */ "ZynEcho",
  648. /* label */ "zynecho",
  649. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  650. /* copyright */ "GNU GPL v2+",
  651. DESCFUNCS
  652. },
  653. {
  654. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  655. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  656. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  657. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  658. /* audioIns */ 2,
  659. /* audioOuts */ 2,
  660. /* midiIns */ 0,
  661. /* midiOuts */ 0,
  662. /* paramIns */ 15-2,
  663. /* paramOuts */ 0,
  664. /* name */ "ZynPhaser",
  665. /* label */ "zynphaser",
  666. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  667. /* copyright */ "GNU GPL v2+",
  668. DESCFUNCS
  669. },
  670. {
  671. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  672. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  673. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  674. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  675. /* audioIns */ 2,
  676. /* audioOuts */ 2,
  677. /* midiIns */ 0,
  678. /* midiOuts */ 0,
  679. /* paramIns */ 13-2,
  680. /* paramOuts */ 0,
  681. /* name */ "ZynReverb",
  682. /* label */ "zynreverb",
  683. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  684. /* copyright */ "GNU GPL v2+",
  685. DESCFUNCS
  686. },
  687. # ifdef CARLA_OS_LINUX
  688. {
  689. /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH,
  690. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  691. # ifdef HAVE_ZYN_UI_DEPS
  692. |NATIVE_PLUGIN_HAS_UI
  693. # endif
  694. |NATIVE_PLUGIN_USES_MULTI_PROGS
  695. |NATIVE_PLUGIN_USES_STATE),
  696. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_CONTROL_CHANGES
  697. |NATIVE_PLUGIN_SUPPORTS_NOTE_AFTERTOUCH
  698. |NATIVE_PLUGIN_SUPPORTS_PITCHBEND
  699. |NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF),
  700. /* audioIns */ 0,
  701. /* audioOuts */ 2,
  702. /* midiIns */ 1,
  703. /* midiOuts */ 0,
  704. /* paramIns */ 6,
  705. /* paramOuts */ 0,
  706. /* name */ "ZynAddSubFX",
  707. /* label */ "zynaddsubfx",
  708. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  709. /* copyright */ "GNU GPL v2+",
  710. DESCFUNCS
  711. },
  712. # endif // CARLA_OS_LINUX
  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. // -----------------------------------------------------------------------