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.

755 lines
25KB

  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. #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. #if 0
  162. // -----------------------------------------------------------------------
  163. // Audio file
  164. {
  165. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  166. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_HAS_UI
  167. |NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE),
  168. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  169. /* audioIns */ 0,
  170. /* audioOuts */ 2,
  171. /* midiIns */ 0,
  172. /* midiOuts */ 0,
  173. /* paramIns */ 1,
  174. /* paramOuts */ 0,
  175. /* name */ "Audio File",
  176. /* label */ "audiofile",
  177. /* maker */ "falkTX",
  178. /* copyright */ "GNU GPL v2+",
  179. DESCFUNCS
  180. },
  181. #endif
  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. #endif
  250. // -----------------------------------------------------------------------
  251. // DISTRHO Plugins
  252. {
  253. /* category */ NATIVE_PLUGIN_CATEGORY_EQ,
  254. #ifdef HAVE_DGL
  255. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  256. |NATIVE_PLUGIN_HAS_UI
  257. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  258. |NATIVE_PLUGIN_USES_PARENT_ID),
  259. #else
  260. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  261. #endif
  262. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  263. /* audioIns */ 2,
  264. /* audioOuts */ 2,
  265. /* midiIns */ 0,
  266. /* midiOuts */ 0,
  267. /* paramIns */ 6,
  268. /* paramOuts */ 0,
  269. /* name */ "3 Band EQ",
  270. /* label */ "3bandeq",
  271. /* maker */ "falkTX, Michael Gruhn",
  272. /* copyright */ "LGPL",
  273. DESCFUNCS
  274. },
  275. {
  276. /* category */ NATIVE_PLUGIN_CATEGORY_EQ,
  277. #ifdef HAVE_DGL
  278. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  279. |NATIVE_PLUGIN_HAS_UI
  280. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  281. |NATIVE_PLUGIN_USES_PARENT_ID),
  282. #else
  283. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  284. #endif
  285. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  286. /* audioIns */ 2,
  287. /* audioOuts */ 6,
  288. /* midiIns */ 0,
  289. /* midiOuts */ 0,
  290. /* paramIns */ 6,
  291. /* paramOuts */ 0,
  292. /* name */ "3 Band Splitter",
  293. /* label */ "3bandsplitter",
  294. /* maker */ "falkTX, Michael Gruhn",
  295. /* copyright */ "LGPL",
  296. DESCFUNCS
  297. },
  298. {
  299. /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH,
  300. #ifdef HAVE_DGL
  301. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  302. |NATIVE_PLUGIN_IS_SYNTH
  303. |NATIVE_PLUGIN_HAS_UI
  304. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  305. |NATIVE_PLUGIN_USES_PARENT_ID),
  306. #else
  307. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  308. |NATIVE_PLUGIN_IS_SYNTH),
  309. #endif
  310. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  311. /* audioIns */ 0,
  312. /* audioOuts */ 1,
  313. /* midiIns */ 1,
  314. /* midiOuts */ 0,
  315. /* paramIns */ 1,
  316. /* paramOuts */ 0,
  317. /* name */ "Kars",
  318. /* label */ "kars",
  319. /* maker */ "falkTX, Chris Cannam",
  320. /* copyright */ "ISC",
  321. DESCFUNCS
  322. },
  323. {
  324. /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH,
  325. #ifdef HAVE_DGL
  326. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  327. |NATIVE_PLUGIN_IS_SYNTH
  328. |NATIVE_PLUGIN_HAS_UI
  329. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  330. |NATIVE_PLUGIN_USES_PARENT_ID),
  331. #else
  332. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  333. |NATIVE_PLUGIN_IS_SYNTH),
  334. #endif
  335. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_CONTROL_CHANGES
  336. |NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF),
  337. /* audioIns */ 0,
  338. /* audioOuts */ 1,
  339. /* midiIns */ 1,
  340. /* midiOuts */ 0,
  341. /* paramIns */ 8,
  342. /* paramOuts */ 0,
  343. /* name */ "Nekobi",
  344. /* label */ "nekobi",
  345. /* maker */ "falkTX, Sean Bolton and others",
  346. /* copyright */ "GPL v2+",
  347. DESCFUNCS
  348. },
  349. {
  350. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  351. #ifdef HAVE_DGL
  352. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  353. |NATIVE_PLUGIN_HAS_UI
  354. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  355. |NATIVE_PLUGIN_USES_PARENT_ID),
  356. #else
  357. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE),
  358. #endif
  359. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  360. /* audioIns */ 2,
  361. /* audioOuts */ 2,
  362. /* midiIns */ 0,
  363. /* midiOuts */ 0,
  364. /* paramIns */ 2,
  365. /* paramOuts */ 0,
  366. /* name */ "Ping Pong Pan",
  367. /* label */ "pingpongpan",
  368. /* maker */ "falkTX, Michael Gruhn",
  369. /* copyright */ "LGPL",
  370. DESCFUNCS
  371. },
  372. #ifdef HAVE_DGL
  373. #ifdef HAVE_PROJECTM
  374. {
  375. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  376. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  377. |NATIVE_PLUGIN_HAS_UI
  378. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  379. |NATIVE_PLUGIN_USES_PARENT_ID),
  380. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  381. /* audioIns */ 1,
  382. /* audioOuts */ 1,
  383. /* midiIns */ 0,
  384. /* midiOuts */ 0,
  385. /* paramIns */ 0,
  386. /* paramOuts */ 0,
  387. /* name */ "ProM",
  388. /* label */ "prom",
  389. /* maker */ "falkTX",
  390. /* copyright */ "LGPL",
  391. DESCFUNCS
  392. },
  393. #endif // HAVE_PROJECTM
  394. #endif // HAVE_DGL
  395. // -----------------------------------------------------------------------
  396. // DISTRHO plugins (Juice)
  397. {
  398. /* category */ NATIVE_PLUGIN_CATEGORY_DYNAMICS,
  399. #ifdef HAVE_DGL
  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. |NATIVE_PLUGIN_USES_TIME),
  405. #else
  406. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  407. |NATIVE_PLUGIN_USES_TIME),
  408. #endif
  409. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  410. /* audioIns */ 2,
  411. /* audioOuts */ 2,
  412. /* midiIns */ 0,
  413. /* midiOuts */ 0,
  414. /* paramIns */ 6,
  415. /* paramOuts */ 0,
  416. /* name */ "WobbleJuice",
  417. /* label */ "wobblejuice",
  418. /* maker */ "Andre Sklenar",
  419. /* copyright */ "GPL v2+",
  420. DESCFUNCS
  421. },
  422. {
  423. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  424. #ifdef HAVE_DGL
  425. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  426. |NATIVE_PLUGIN_HAS_UI
  427. |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD
  428. |NATIVE_PLUGIN_USES_PARENT_ID
  429. |NATIVE_PLUGIN_USES_TIME),
  430. #else
  431. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  432. |NATIVE_PLUGIN_USES_TIME),
  433. #endif
  434. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  435. /* audioIns */ 8,
  436. /* audioOuts */ 2,
  437. /* midiIns */ 0,
  438. /* midiOuts */ 0,
  439. /* paramIns */ 13,
  440. /* paramOuts */ 4,
  441. /* name */ "VectorJuice",
  442. /* label */ "vectorjuice",
  443. /* maker */ "Andre Sklenar",
  444. /* copyright */ "GPL v2+",
  445. DESCFUNCS
  446. },
  447. // -----------------------------------------------------------------------
  448. // External-UI plugins
  449. #ifdef HAVE_PYQT
  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_FIXED_BUFFERS),
  455. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  456. /* audioIns */ 2,
  457. /* audioOuts */ 0,
  458. /* midiIns */ 0,
  459. /* midiOuts */ 0,
  460. /* paramIns */ 2,
  461. /* paramOuts */ 2,
  462. /* name */ "Big Meter",
  463. /* label */ "bigmeter",
  464. /* maker */ "falkTX",
  465. /* copyright */ "GNU GPL v2+",
  466. DESCFUNCS
  467. },
  468. {
  469. /* category */ NATIVE_PLUGIN_CATEGORY_UTILITY,
  470. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  471. |NATIVE_PLUGIN_HAS_UI),
  472. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  473. /* audioIns */ 0,
  474. /* audioOuts */ 0,
  475. /* midiIns */ 0,
  476. /* midiOuts */ 0,
  477. /* paramIns */ 1,
  478. /* paramOuts */ 0,
  479. /* name */ "Notes",
  480. /* label */ "notes",
  481. /* maker */ "falkTX",
  482. /* copyright */ "GNU GPL v2+",
  483. DESCFUNCS
  484. },
  485. #endif
  486. // -----------------------------------------------------------------------
  487. // ZynAddSubFX
  488. #ifdef HAVE_ZYN_DEPS
  489. {
  490. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  491. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  492. |NATIVE_PLUGIN_USES_PANNING
  493. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  494. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  495. /* audioIns */ 2,
  496. /* audioOuts */ 2,
  497. /* midiIns */ 0,
  498. /* midiOuts */ 0,
  499. /* paramIns */ 11-2,
  500. /* paramOuts */ 0,
  501. /* name */ "ZynAlienWah",
  502. /* label */ "zynalienwah",
  503. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  504. /* copyright */ "GNU GPL v2+",
  505. DESCFUNCS
  506. },
  507. {
  508. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  509. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  510. |NATIVE_PLUGIN_USES_PANNING
  511. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  512. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  513. /* audioIns */ 2,
  514. /* audioOuts */ 2,
  515. /* midiIns */ 0,
  516. /* midiOuts */ 0,
  517. /* paramIns */ 12-2,
  518. /* paramOuts */ 0,
  519. /* name */ "ZynChorus",
  520. /* label */ "zynchorus",
  521. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  522. /* copyright */ "GNU GPL v2+",
  523. DESCFUNCS
  524. },
  525. {
  526. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  527. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  528. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  529. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  530. /* audioIns */ 2,
  531. /* audioOuts */ 2,
  532. /* midiIns */ 0,
  533. /* midiOuts */ 0,
  534. /* paramIns */ 11-2,
  535. /* paramOuts */ 0,
  536. /* name */ "ZynDistortion",
  537. /* label */ "zyndistortion",
  538. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  539. /* copyright */ "GNU GPL v2+",
  540. DESCFUNCS
  541. },
  542. {
  543. /* category */ NATIVE_PLUGIN_CATEGORY_FILTER,
  544. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  545. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  546. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  547. /* audioIns */ 2,
  548. /* audioOuts */ 2,
  549. /* midiIns */ 0,
  550. /* midiOuts */ 0,
  551. /* paramIns */ 10-2,
  552. /* paramOuts */ 0,
  553. /* name */ "ZynDynamicFilter",
  554. /* label */ "zyndynamicfilter",
  555. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  556. /* copyright */ "GNU GPL v2+",
  557. DESCFUNCS
  558. },
  559. {
  560. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  561. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  562. |NATIVE_PLUGIN_USES_PANNING
  563. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  564. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  565. /* audioIns */ 2,
  566. /* audioOuts */ 2,
  567. /* midiIns */ 0,
  568. /* midiOuts */ 0,
  569. /* paramIns */ 7-2,
  570. /* paramOuts */ 0,
  571. /* name */ "ZynEcho",
  572. /* label */ "zynecho",
  573. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  574. /* copyright */ "GNU GPL v2+",
  575. DESCFUNCS
  576. },
  577. {
  578. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  579. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  580. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  581. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  582. /* audioIns */ 2,
  583. /* audioOuts */ 2,
  584. /* midiIns */ 0,
  585. /* midiOuts */ 0,
  586. /* paramIns */ 15-2,
  587. /* paramOuts */ 0,
  588. /* name */ "ZynPhaser",
  589. /* label */ "zynphaser",
  590. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  591. /* copyright */ "GNU GPL v2+",
  592. DESCFUNCS
  593. },
  594. {
  595. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  596. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_USES_PANNING
  597. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  598. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  599. /* audioIns */ 2,
  600. /* audioOuts */ 2,
  601. /* midiIns */ 0,
  602. /* midiOuts */ 0,
  603. /* paramIns */ 13-2,
  604. /* paramOuts */ 0,
  605. /* name */ "ZynReverb",
  606. /* label */ "zynreverb",
  607. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  608. /* copyright */ "GNU GPL v2+",
  609. DESCFUNCS
  610. },
  611. # ifndef DISABLE_PLUGINS_FOR_WINDOWS_BUILD
  612. {
  613. /* category */ NATIVE_PLUGIN_CATEGORY_SYNTH,
  614. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_SYNTH
  615. # ifdef HAVE_ZYN_UI_DEPS
  616. |NATIVE_PLUGIN_HAS_UI
  617. # endif
  618. |NATIVE_PLUGIN_USES_MULTI_PROGS
  619. |NATIVE_PLUGIN_USES_STATE),
  620. /* supports */ static_cast<NativePluginSupports>(NATIVE_PLUGIN_SUPPORTS_CONTROL_CHANGES
  621. |NATIVE_PLUGIN_SUPPORTS_NOTE_AFTERTOUCH
  622. |NATIVE_PLUGIN_SUPPORTS_PITCHBEND
  623. |NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF),
  624. /* audioIns */ 0,
  625. /* audioOuts */ 2,
  626. /* midiIns */ 1,
  627. /* midiOuts */ 0,
  628. /* paramIns */ 6,
  629. /* paramOuts */ 0,
  630. /* name */ "ZynAddSubFX",
  631. /* label */ "zynaddsubfx",
  632. /* maker */ "falkTX, Mark McCurry, Nasca Octavian Paul",
  633. /* copyright */ "GNU GPL v2+",
  634. DESCFUNCS
  635. },
  636. # endif // ! DISABLE_PLUGINS_FOR_WINDOWS_BUILD
  637. #endif // HAVE_ZYN_DEPS
  638. // -----------------------------------------------------------------------
  639. // Experimental plugins
  640. #ifdef HAVE_EXPERIMENTAL_PLUGINS
  641. {
  642. /* category */ NATIVE_PLUGIN_CATEGORY_MODULATOR,
  643. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  644. |NATIVE_PLUGIN_HAS_UI
  645. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS
  646. |NATIVE_PLUGIN_USES_STATE),
  647. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  648. /* audioIns */ 1,
  649. /* audioOuts */ 1,
  650. /* midiIns */ 1,
  651. /* midiOuts */ 0,
  652. /* paramIns */ 6,
  653. /* paramOuts */ 0,
  654. /* name */ "AT1",
  655. /* label */ "at1",
  656. /* maker */ "falkTX, Fons Adriaensen",
  657. /* copyright */ "GPL v2+",
  658. DESCFUNCS
  659. },
  660. {
  661. /* category */ NATIVE_PLUGIN_CATEGORY_FILTER,
  662. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  663. |NATIVE_PLUGIN_HAS_UI
  664. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  665. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  666. /* audioIns */ 2,
  667. /* audioOuts */ 2,
  668. /* midiIns */ 0,
  669. /* midiOuts */ 0,
  670. /* paramIns */ 6,
  671. /* paramOuts */ 0,
  672. /* name */ "BLS1",
  673. /* label */ "bls1",
  674. /* maker */ "falkTX, Fons Adriaensen",
  675. /* copyright */ "GPL v2+",
  676. DESCFUNCS
  677. },
  678. {
  679. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  680. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  681. |NATIVE_PLUGIN_HAS_UI
  682. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  683. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  684. /* audioIns */ 2,
  685. /* audioOuts */ 4,
  686. /* midiIns */ 0,
  687. /* midiOuts */ 0,
  688. /* paramIns */ 10,
  689. /* paramOuts */ 0,
  690. /* name */ "REV1 (Ambisonic)",
  691. /* label */ "rev1-ambisonic",
  692. /* maker */ "falkTX, Fons Adriaensen",
  693. /* copyright */ "GPL v2+",
  694. DESCFUNCS
  695. },
  696. {
  697. /* category */ NATIVE_PLUGIN_CATEGORY_DELAY,
  698. /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE
  699. |NATIVE_PLUGIN_HAS_UI
  700. |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS),
  701. /* supports */ NATIVE_PLUGIN_SUPPORTS_NOTHING,
  702. /* audioIns */ 2,
  703. /* audioOuts */ 2,
  704. /* midiIns */ 0,
  705. /* midiOuts */ 0,
  706. /* paramIns */ 10,
  707. /* paramOuts */ 0,
  708. /* name */ "REV1 (Stereo)",
  709. /* label */ "rev1-stereo",
  710. /* maker */ "falkTX, Fons Adriaensen",
  711. /* copyright */ "GPL v2+",
  712. DESCFUNCS
  713. },
  714. #endif // HAVE_EXPERIMENTAL_PLUGINS
  715. };
  716. #undef DESCFUNCS
  717. // -----------------------------------------------------------------------
  718. const NativePluginDescriptor* carla_get_native_plugins_data(uint32_t* count)
  719. {
  720. CARLA_SAFE_ASSERT_RETURN(count != nullptr, nullptr);
  721. *count = static_cast<uint32_t>(sizeof(sNativePluginDescriptors)/sizeof(NativePluginDescriptor));
  722. return sNativePluginDescriptors;
  723. }
  724. // -----------------------------------------------------------------------