Collection of DPF-based plugins for packaging
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.

799 lines
26KB

  1. #include "gen_exported.h"
  2. namespace gen_exported {
  3. /*******************************************************************************************************************
  4. Copyright (c) 2012 Cycling '74
  5. Permission is hereby granted, free of charge, to any person obtaining a copy of this software
  6. and associated documentation files (the "Software"), to deal in the Software without restriction,
  7. including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8. and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
  9. subject to the following conditions:
  10. The above copyright notice and this permission notice shall be included in all copies
  11. or substantial portions of the Software.
  12. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
  13. INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  14. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  15. WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
  16. OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  17. *******************************************************************************************************************/
  18. // global noise generator
  19. Noise noise;
  20. static const int GENLIB_LOOPCOUNT_BAIL = 100000;
  21. // The State struct contains all the state and procedures for the gendsp kernel
  22. typedef struct State {
  23. CommonState __commonstate;
  24. Delay m_delay_14;
  25. Delay m_delay_18;
  26. Delay m_delay_19;
  27. Delay m_delay_15;
  28. Delay m_delay_12;
  29. Delay m_delay_17;
  30. Delay m_delay_13;
  31. Delay m_delay_21;
  32. Delay m_delay_20;
  33. Delay m_delay_22;
  34. Delay m_delay_24;
  35. Delay m_delay_23;
  36. Delay m_delay_16;
  37. Delta m_delta_43;
  38. Delta m_delta_49;
  39. Delta m_delta_46;
  40. Delta m_delta_40;
  41. Phasor m_phasor_39;
  42. Sah m_sah_50;
  43. Sah m_sah_51;
  44. Sah m_sah_47;
  45. Sah m_sah_48;
  46. Sah m_sah_45;
  47. Sah m_sah_42;
  48. Sah m_sah_44;
  49. Sah m_sah_41;
  50. double m_roomsize_34;
  51. double m_tail_35;
  52. double m_blur_36;
  53. double m_damping_38;
  54. double m_shimmer_33;
  55. double m_decay_37;
  56. double samples_to_seconds;
  57. double m_early_32;
  58. double m_ratio_25;
  59. double m_spread_30;
  60. double m_history_4;
  61. double m_history_5;
  62. double m_history_6;
  63. double m_history_3;
  64. double m_history_1;
  65. double m_y_2;
  66. double samplerate;
  67. double m_cutoff_31;
  68. double m_history_7;
  69. double m_history_9;
  70. double m_tone_28;
  71. double m_mix_29;
  72. double m_history_8;
  73. double m_resonance_27;
  74. double m_y_11;
  75. double m_history_10;
  76. double m_window_26;
  77. int vectorsize;
  78. int __exception;
  79. // re-initialize all member variables;
  80. inline void reset(double __sr, int __vs) {
  81. __exception = 0;
  82. vectorsize = __vs;
  83. samplerate = __sr;
  84. m_history_1 = 0;
  85. m_y_2 = 0;
  86. m_history_3 = 0;
  87. m_history_4 = 0;
  88. m_history_5 = 0;
  89. m_history_6 = 0;
  90. m_history_7 = 0;
  91. m_history_8 = 0;
  92. m_history_9 = 0;
  93. m_history_10 = 0;
  94. m_y_11 = 0;
  95. m_delay_12.reset("m_delay_12", 5000);
  96. m_delay_13.reset("m_delay_13", 7000);
  97. m_delay_14.reset("m_delay_14", 15000);
  98. m_delay_15.reset("m_delay_15", 16000);
  99. m_delay_16.reset("m_delay_16", 6000);
  100. m_delay_17.reset("m_delay_17", 48000);
  101. m_delay_18.reset("m_delay_18", 96000);
  102. m_delay_19.reset("m_delay_19", 10000);
  103. m_delay_20.reset("m_delay_20", 12000);
  104. m_delay_21.reset("m_delay_21", 48000);
  105. m_delay_22.reset("m_delay_22", 48000);
  106. m_delay_23.reset("m_delay_23", 48000);
  107. m_delay_24.reset("m_delay_24", 48000);
  108. m_ratio_25 = 2;
  109. m_window_26 = 100;
  110. m_resonance_27 = 0;
  111. m_tone_28 = 0.5;
  112. m_mix_29 = 0.5;
  113. m_spread_30 = 25;
  114. m_cutoff_31 = 3000;
  115. m_early_32 = 0.25;
  116. m_shimmer_33 = 0.5;
  117. m_roomsize_34 = 150;
  118. m_tail_35 = 0.25;
  119. m_blur_36 = 0.25;
  120. m_decay_37 = 180;
  121. m_damping_38 = 0.75;
  122. samples_to_seconds = (1 / samplerate);
  123. m_phasor_39.reset(0);
  124. m_delta_40.reset(0);
  125. m_sah_41.reset(0);
  126. m_sah_42.reset(0);
  127. m_delta_43.reset(0);
  128. m_sah_44.reset(0);
  129. m_sah_45.reset(0);
  130. m_delta_46.reset(0);
  131. m_sah_47.reset(0);
  132. m_sah_48.reset(0);
  133. m_delta_49.reset(0);
  134. m_sah_50.reset(0);
  135. m_sah_51.reset(0);
  136. genlib_reset_complete(this);
  137. };
  138. // the signal processing routine;
  139. inline int perform(t_sample ** __ins, t_sample ** __outs, int __n) {
  140. vectorsize = __n;
  141. const t_sample * __in1 = __ins[0];
  142. t_sample * __out1 = __outs[0];
  143. t_sample * __out2 = __outs[1];
  144. if (__exception) {
  145. return __exception;
  146. } else if (( (__in1 == 0) || (__out1 == 0) || (__out2 == 0) )) {
  147. __exception = GENLIB_ERR_NULL_BUFFER;
  148. return __exception;
  149. };
  150. double rsub_552 = (1 - m_tone_28);
  151. double expr_1476 = safepow(0.001, safediv(1, (m_decay_37 * 44100)));
  152. double expr_1477 = safediv((m_roomsize_34 * 44100), 340);
  153. double mul_542 = (expr_1477 * 0.7071);
  154. double expr_1469 = (-safepow(expr_1476, mul_542));
  155. double mul_541 = (expr_1477 * 0.63245);
  156. double expr_1468 = (-safepow(expr_1476, mul_541));
  157. double mul_543 = (expr_1477 * 0.81649);
  158. double expr_1470 = (-safepow(expr_1476, mul_543));
  159. double mul_544 = (expr_1477 * 1);
  160. double expr_1475 = (-safepow(expr_1476, mul_544));
  161. double expr_1478 = safediv(((m_cutoff_31 * 2) * 3.1415926535898), 44100);
  162. double cos_1010 = cos(expr_1478);
  163. double mul_1012 = (m_resonance_27 * 0.125);
  164. double exp_1013 = exp(mul_1012);
  165. double mul_1011 = (exp_1013 * 0.882497);
  166. double mul_1007 = (mul_1011 * mul_1011);
  167. double mul_1009 = (cos_1010 * mul_1011);
  168. double mul_1008 = (mul_1009 * -2);
  169. double add_1006 = ((mul_1007 + mul_1008) + 1);
  170. double mul_538 = (expr_1477 * 0.000527);
  171. int int_537 = int(mul_538);
  172. double mstosamps_963 = (m_window_26 * (samplerate * 0.001));
  173. double add_467 = (expr_1477 + 5);
  174. double expr_1471 = safepow(expr_1476, add_467);
  175. double mul_478 = (m_spread_30 * -0.380445);
  176. double add_477 = (mul_478 + 931);
  177. double rsub_474 = (1341 - add_477);
  178. double mul_487 = (int_537 * rsub_474);
  179. double mul_506 = (m_spread_30 * 0.376623);
  180. double add_505 = (mul_506 + 931);
  181. double rsub_502 = (1341 - add_505);
  182. double mul_513 = (int_537 * rsub_502);
  183. double rsub_950 = (1 - m_ratio_25);
  184. double mul_949 = (rsub_950 * 1000);
  185. double div_948 = safediv(mul_949, m_window_26);
  186. samples_to_seconds = (1 / samplerate);
  187. double mul_473 = (expr_1477 * 0.41);
  188. double add_470 = (mul_473 + 5);
  189. double expr_1474 = safepow(expr_1476, add_470);
  190. double mul_472 = (expr_1477 * 0.3);
  191. double add_469 = (mul_472 + 5);
  192. double expr_1473 = safepow(expr_1476, add_469);
  193. double mul_471 = (expr_1477 * 0.155);
  194. double add_468 = (mul_471 + 5);
  195. double expr_1472 = safepow(expr_1476, add_468);
  196. double mul_536 = (expr_1477 * 0.110732);
  197. double mul_480 = (m_spread_30 * -0.568366);
  198. double add_476 = (mul_480 + 369);
  199. double rsub_475 = (add_477 - add_476);
  200. double mul_494 = (int_537 * rsub_475);
  201. double mul_522 = (m_spread_30 * 0.125541);
  202. double add_504 = (mul_522 + 369);
  203. double rsub_503 = (add_505 - add_504);
  204. double mul_520 = (int_537 * rsub_503);
  205. double add_479 = (mul_480 + 159);
  206. double mul_501 = (int_537 * add_479);
  207. double add_521 = (mul_522 + 159);
  208. double mul_529 = (int_537 * add_521);
  209. // the main sample loop;
  210. while ((__n--)) {
  211. const double in1 = (*(__in1++));
  212. double noise_900 = noise();
  213. double abs_917 = fabs(noise_900);
  214. double mul_921 = (abs_917 * m_blur_36);
  215. double noise_902 = noise();
  216. double abs_919 = fabs(noise_902);
  217. double mul_927 = (abs_919 * m_blur_36);
  218. double noise_903 = noise();
  219. double abs_920 = fabs(noise_903);
  220. double mul_930 = (abs_920 * m_blur_36);
  221. double noise_901 = noise();
  222. double abs_918 = fabs(noise_901);
  223. double mul_924 = (abs_918 * m_blur_36);
  224. double tap_447 = m_delay_24.read_linear(mul_542);
  225. double mul_443 = (tap_447 * expr_1469);
  226. double mix_1521 = (mul_443 + (m_damping_38 * (m_history_10 - mul_443)));
  227. double mix_445 = mix_1521;
  228. double tap_441 = m_delay_23.read_linear(mul_541);
  229. double mul_437 = (tap_441 * expr_1468);
  230. double mix_1522 = (mul_437 + (m_damping_38 * (m_history_9 - mul_437)));
  231. double mix_439 = mix_1522;
  232. double tap_453 = m_delay_22.read_linear(mul_543);
  233. double mul_449 = (tap_453 * expr_1470);
  234. double mix_1523 = (mul_449 + (m_damping_38 * (m_history_8 - mul_449)));
  235. double mix_451 = mix_1523;
  236. double tap_549 = m_delay_21.read_linear(mul_544);
  237. double mul_540 = (tap_549 * expr_1475);
  238. double mix_1524 = (mul_540 + (m_damping_38 * (m_history_7 - mul_540)));
  239. double mix_547 = mix_1524;
  240. double mul_1003 = (mul_1007 * m_y_11);
  241. double mul_1004 = (mul_1008 * m_y_2);
  242. double add_431 = (mix_547 + mix_451);
  243. double add_429 = (mix_445 + mix_439);
  244. double add_424 = (add_431 + add_429);
  245. double mul_407 = (add_424 * 0.5);
  246. double sub_428 = (add_431 - add_429);
  247. double mul_410 = (sub_428 * 0.5);
  248. double sub_430 = (mix_547 - mix_451);
  249. double sub_427 = (mix_445 - mix_439);
  250. double sub_426 = (sub_430 - sub_427);
  251. double mul_409 = (sub_426 * 0.5);
  252. double add_425 = (sub_430 + sub_427);
  253. double rsub_423 = (0 - add_425);
  254. double mul_408 = (rsub_423 * 0.5);
  255. double tap_486 = m_delay_20.read_linear(mul_487);
  256. double mul_484 = (tap_486 * 0.625);
  257. double tap_512 = m_delay_19.read_linear(mul_513);
  258. double mul_510 = (tap_512 * 0.625);
  259. double phasor_969 = m_phasor_39(div_948, samples_to_seconds);
  260. double add_941 = ((phasor_969 + m_history_6) + 0.75);
  261. double mod_940 = safemod(add_941, 1);
  262. double delta_923 = m_delta_40(mod_940);
  263. double sah_904 = m_sah_41(mul_921, delta_923, 0);
  264. double sah_922 = m_sah_42(mstosamps_963, delta_923, 0);
  265. double mul_913 = (sah_922 * mod_940);
  266. double sub_939 = (mod_940 - 0.5);
  267. double mul_938 = (sub_939 * 3.1415926535898);
  268. double cos_937 = cos(mul_938);
  269. double mul_932 = (cos_937 * cos_937);
  270. double add_962 = ((phasor_969 + m_history_5) + 0.25);
  271. double mod_961 = safemod(add_962, 1);
  272. double delta_929 = m_delta_43(mod_961);
  273. double sah_908 = m_sah_44(mul_927, delta_929, 0);
  274. double sah_928 = m_sah_45(mstosamps_963, delta_929, 0);
  275. double mul_915 = (sah_928 * mod_961);
  276. double sub_960 = (mod_961 - 0.5);
  277. double mul_959 = (sub_960 * 3.1415926535898);
  278. double cos_958 = cos(mul_959);
  279. double mul_934 = (cos_958 * cos_958);
  280. double add_968 = ((phasor_969 + m_history_4) + 0);
  281. double mod_967 = safemod(add_968, 1);
  282. double delta_911 = m_delta_46(mod_967);
  283. double sah_910 = m_sah_47(mul_930, delta_911, 0);
  284. double sah_931 = m_sah_48(mstosamps_963, delta_911, 0);
  285. double mul_916 = (sah_931 * mod_967);
  286. double sub_966 = (mod_967 - 0.5);
  287. double mul_965 = (sub_966 * 3.1415926535898);
  288. double cos_964 = cos(mul_965);
  289. double mul_935 = (cos_964 * cos_964);
  290. double add_947 = ((phasor_969 + m_history_3) + 0.5);
  291. double mod_946 = safemod(add_947, 1);
  292. double delta_926 = m_delta_49(mod_946);
  293. double sah_906 = m_sah_50(mul_924, delta_926, 0);
  294. double sah_925 = m_sah_51(mstosamps_963, delta_926, 0);
  295. double mul_914 = (sah_925 * mod_946);
  296. double tap_954 = m_delay_18.read_linear(mul_916);
  297. double tap_955 = m_delay_18.read_linear(mul_915);
  298. double tap_956 = m_delay_18.read_linear(mul_914);
  299. double tap_957 = m_delay_18.read_linear(mul_913);
  300. double mul_952 = (tap_954 * mul_935);
  301. double mul_951 = (tap_955 * mul_934);
  302. double mul_936 = (tap_957 * mul_932);
  303. double sub_945 = (mod_946 - 0.5);
  304. double mul_944 = (sub_945 * 3.1415926535898);
  305. double cos_943 = cos(mul_944);
  306. double mul_933 = (cos_943 * cos_943);
  307. double mul_942 = (tap_956 * mul_933);
  308. double mul_1005 = ((((mul_936 + mul_942) + mul_951) + mul_952) * add_1006);
  309. double sub_1002 = (mul_1005 - (mul_1003 + mul_1004));
  310. double mix_1525 = (in1 + (m_shimmer_33 * (sub_1002 - in1)));
  311. double mix_341 = mix_1525;
  312. double mul_401 = (mix_341 * 0.707);
  313. double mix_1526 = (mul_401 + (rsub_552 * (m_history_1 - mul_401)));
  314. double mix_551 = mix_1526;
  315. double tap_455 = m_delay_17.read_linear(add_470);
  316. double tap_456 = m_delay_17.read_linear(add_469);
  317. double tap_457 = m_delay_17.read_linear(add_468);
  318. double tap_458 = m_delay_17.read_linear(add_467);
  319. double mul_459 = (tap_458 * expr_1471);
  320. double add_432 = (mul_407 + mul_459);
  321. double mul_463 = (tap_456 * expr_1473);
  322. double add_434 = (mul_409 + mul_463);
  323. double mul_465 = (tap_455 * expr_1474);
  324. double add_435 = (mul_410 + mul_465);
  325. double mul_461 = (tap_457 * expr_1472);
  326. double add_433 = (mul_408 + mul_461);
  327. double tap_535 = m_delay_16.read_linear(mul_536);
  328. double mul_533 = (tap_535 * 0.75);
  329. double sub_532 = (mix_551 - mul_533);
  330. double mul_531 = (sub_532 * 0.75);
  331. double add_530 = (mul_531 + tap_535);
  332. double tap_493 = m_delay_15.read_linear(mul_494);
  333. double mul_491 = (tap_493 * 0.625);
  334. double tap_519 = m_delay_14.read_linear(mul_520);
  335. double mul_517 = (tap_519 * 0.625);
  336. double tap_500 = m_delay_13.read_linear(mul_501);
  337. double mul_498 = (tap_500 * 0.75);
  338. double tap_528 = m_delay_12.read_linear(mul_529);
  339. double mul_526 = (tap_528 * 0.75);
  340. double mul_422 = (mul_410 * m_tail_35);
  341. double mul_420 = (mul_408 * m_tail_35);
  342. double add_406 = (mul_422 + mul_420);
  343. double mul_421 = (mul_409 * m_tail_35);
  344. double mul_419 = (mul_407 * m_tail_35);
  345. double add_405 = (mul_421 + mul_419);
  346. double sub_414 = (add_406 - add_405);
  347. double mul_418 = (mul_465 * m_early_32);
  348. double mul_416 = (mul_461 * m_early_32);
  349. double add_404 = (mul_418 + mul_416);
  350. double mul_417 = (mul_463 * m_early_32);
  351. double mul_415 = (mul_459 * m_early_32);
  352. double add_403 = (mul_417 + mul_415);
  353. double sub_413 = (add_404 - add_403);
  354. double add_400 = (sub_414 + sub_413);
  355. double add_402 = (add_400 + mix_341);
  356. double sub_497 = (add_402 - mul_498);
  357. double mul_496 = (sub_497 * 0.75);
  358. double add_495 = (mul_496 + tap_500);
  359. double sub_490 = (add_495 - mul_491);
  360. double mul_489 = (sub_490 * 0.625);
  361. double add_488 = (mul_489 + tap_493);
  362. double sub_483 = (add_488 - mul_484);
  363. double mul_482 = (sub_483 * 0.625);
  364. double add_481 = (mul_482 + tap_486);
  365. double mul_1327 = (add_481 * m_mix_29);
  366. double out2 = (mul_1327 + in1);
  367. double add_412 = (add_400 + mix_341);
  368. double sub_525 = (add_412 - mul_526);
  369. double mul_524 = (sub_525 * 0.75);
  370. double add_523 = (mul_524 + tap_528);
  371. double sub_516 = (add_523 - mul_517);
  372. double mul_515 = (sub_516 * 0.625);
  373. double add_514 = (mul_515 + tap_519);
  374. double sub_509 = (add_514 - mul_510);
  375. double mul_508 = (sub_509 * 0.625);
  376. double add_507 = (mul_508 + tap_512);
  377. double mul_411 = (add_507 * m_mix_29);
  378. double out1 = (in1 + mul_411);
  379. double y2_next_1492 = m_y_2;
  380. double history_444_next_1493 = mix_445;
  381. double history_438_next_1494 = mix_439;
  382. double history_450_next_1495 = mix_451;
  383. double history_546_next_1496 = mix_547;
  384. double history_905_next_1497 = sah_904;
  385. double history_909_next_1498 = sah_908;
  386. double history_912_next_1499 = sah_910;
  387. double history_907_next_1500 = sah_906;
  388. double y1_next_1501 = sub_1002;
  389. double history_550_next_1502 = mix_551;
  390. m_delay_24.write(add_433);
  391. m_delay_23.write(add_432);
  392. m_delay_22.write(add_434);
  393. m_delay_21.write(add_435);
  394. m_delay_20.write(sub_483);
  395. m_delay_19.write(sub_509);
  396. m_delay_18.write(in1);
  397. m_delay_17.write(add_530);
  398. m_delay_16.write(sub_532);
  399. m_delay_15.write(sub_490);
  400. m_delay_14.write(sub_516);
  401. m_delay_13.write(sub_497);
  402. m_delay_12.write(sub_525);
  403. m_y_11 = y2_next_1492;
  404. m_history_10 = history_444_next_1493;
  405. m_history_9 = history_438_next_1494;
  406. m_history_8 = history_450_next_1495;
  407. m_history_7 = history_546_next_1496;
  408. m_history_6 = history_905_next_1497;
  409. m_history_5 = history_909_next_1498;
  410. m_history_4 = history_912_next_1499;
  411. m_history_3 = history_907_next_1500;
  412. m_y_2 = y1_next_1501;
  413. m_history_1 = history_550_next_1502;
  414. m_delay_12.step();
  415. m_delay_13.step();
  416. m_delay_14.step();
  417. m_delay_15.step();
  418. m_delay_16.step();
  419. m_delay_17.step();
  420. m_delay_18.step();
  421. m_delay_19.step();
  422. m_delay_20.step();
  423. m_delay_21.step();
  424. m_delay_22.step();
  425. m_delay_23.step();
  426. m_delay_24.step();
  427. // assign results to output buffer;
  428. (*(__out1++)) = out1;
  429. (*(__out2++)) = out2;
  430. };
  431. return __exception;
  432. };
  433. inline void set_ratio(double _value) {
  434. m_ratio_25 = (_value < 0.5 ? 0.5 : (_value > 2 ? 2 : _value));
  435. };
  436. inline void set_window(double _value) {
  437. m_window_26 = (_value < 0.1 ? 0.1 : (_value > 1000 ? 1000 : _value));
  438. };
  439. inline void set_resonance(double _value) {
  440. m_resonance_27 = (_value < 0 ? 0 : (_value > 0.25 ? 0.25 : _value));
  441. };
  442. inline void set_tone(double _value) {
  443. m_tone_28 = (_value < 0 ? 0 : (_value > 1 ? 1 : _value));
  444. };
  445. inline void set_mix(double _value) {
  446. m_mix_29 = (_value < 0 ? 0 : (_value > 1 ? 1 : _value));
  447. };
  448. inline void set_spread(double _value) {
  449. m_spread_30 = (_value < 0 ? 0 : (_value > 100 ? 100 : _value));
  450. };
  451. inline void set_cutoff(double _value) {
  452. m_cutoff_31 = (_value < 0 ? 0 : (_value > 6000 ? 6000 : _value));
  453. };
  454. inline void set_early(double _value) {
  455. m_early_32 = (_value < 0 ? 0 : (_value > 1 ? 1 : _value));
  456. };
  457. inline void set_shimmer(double _value) {
  458. m_shimmer_33 = (_value < 0 ? 0 : (_value > 1 ? 1 : _value));
  459. };
  460. inline void set_roomsize(double _value) {
  461. m_roomsize_34 = (_value < 0.1 ? 0.1 : (_value > 300 ? 300 : _value));
  462. };
  463. inline void set_tail(double _value) {
  464. m_tail_35 = (_value < 0 ? 0 : (_value > 1 ? 1 : _value));
  465. };
  466. inline void set_blur(double _value) {
  467. m_blur_36 = (_value < 0.01 ? 0.01 : (_value > 0.25 ? 0.25 : _value));
  468. };
  469. inline void set_decay(double _value) {
  470. m_decay_37 = (_value < 0.1 ? 0.1 : (_value > 360 ? 360 : _value));
  471. };
  472. inline void set_damping(double _value) {
  473. m_damping_38 = (_value < 0 ? 0 : (_value > 1 ? 1 : _value));
  474. };
  475. } State;
  476. ///
  477. /// Configuration for the genlib API
  478. ///
  479. /// Number of signal inputs and outputs
  480. int gen_kernel_numins = 1;
  481. int gen_kernel_numouts = 2;
  482. int num_inputs() { return gen_kernel_numins; }
  483. int num_outputs() { return gen_kernel_numouts; }
  484. int num_params() { return 14; }
  485. /// Assistive lables for the signal inputs and outputs
  486. const char * gen_kernel_innames[] = { "in1" };
  487. const char * gen_kernel_outnames[] = { "out1", "out2" };
  488. /// Invoke the signal process of a State object
  489. int perform(CommonState *cself, t_sample **ins, long numins, t_sample **outs, long numouts, long n) {
  490. State * self = (State *)cself;
  491. return self->perform(ins, outs, n);
  492. }
  493. /// Reset all parameters and stateful operators of a State object
  494. void reset(CommonState *cself) {
  495. State * self = (State *)cself;
  496. self->reset(cself->sr, cself->vs);
  497. }
  498. /// Set a parameter of a State object
  499. void setparameter(CommonState *cself, long index, double value, void *ref) {
  500. State * self = (State *)cself;
  501. switch (index) {
  502. case 0: self->set_ratio(value); break;
  503. case 1: self->set_window(value); break;
  504. case 2: self->set_resonance(value); break;
  505. case 3: self->set_tone(value); break;
  506. case 4: self->set_mix(value); break;
  507. case 5: self->set_spread(value); break;
  508. case 6: self->set_cutoff(value); break;
  509. case 7: self->set_early(value); break;
  510. case 8: self->set_shimmer(value); break;
  511. case 9: self->set_roomsize(value); break;
  512. case 10: self->set_tail(value); break;
  513. case 11: self->set_blur(value); break;
  514. case 12: self->set_decay(value); break;
  515. case 13: self->set_damping(value); break;
  516. default: break;
  517. }
  518. }
  519. /// Get the value of a parameter of a State object
  520. void getparameter(CommonState *cself, long index, double *value) {
  521. State *self = (State *)cself;
  522. switch (index) {
  523. case 0: *value = self->m_ratio_25; break;
  524. case 1: *value = self->m_window_26; break;
  525. case 2: *value = self->m_resonance_27; break;
  526. case 3: *value = self->m_tone_28; break;
  527. case 4: *value = self->m_mix_29; break;
  528. case 5: *value = self->m_spread_30; break;
  529. case 6: *value = self->m_cutoff_31; break;
  530. case 7: *value = self->m_early_32; break;
  531. case 8: *value = self->m_shimmer_33; break;
  532. case 9: *value = self->m_roomsize_34; break;
  533. case 10: *value = self->m_tail_35; break;
  534. case 11: *value = self->m_blur_36; break;
  535. case 12: *value = self->m_decay_37; break;
  536. case 13: *value = self->m_damping_38; break;
  537. default: break;
  538. }
  539. }
  540. /// Allocate and configure a new State object and it's internal CommonState:
  541. void * create(double sr, long vs) {
  542. State *self = new State;
  543. self->reset(sr, vs);
  544. ParamInfo *pi;
  545. self->__commonstate.inputnames = gen_kernel_innames;
  546. self->__commonstate.outputnames = gen_kernel_outnames;
  547. self->__commonstate.numins = gen_kernel_numins;
  548. self->__commonstate.numouts = gen_kernel_numouts;
  549. self->__commonstate.sr = sr;
  550. self->__commonstate.vs = vs;
  551. self->__commonstate.params = (ParamInfo *)genlib_sysmem_newptr(14 * sizeof(ParamInfo));
  552. self->__commonstate.numparams = 14;
  553. // initialize parameter 0 ("m_ratio_25")
  554. pi = self->__commonstate.params + 0;
  555. pi->name = "ratio";
  556. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  557. pi->defaultvalue = self->m_ratio_25;
  558. pi->defaultref = 0;
  559. pi->hasinputminmax = false;
  560. pi->inputmin = 0;
  561. pi->inputmax = 1;
  562. pi->hasminmax = true;
  563. pi->outputmin = 0.5;
  564. pi->outputmax = 2;
  565. pi->exp = 0;
  566. pi->units = ""; // no units defined
  567. // initialize parameter 1 ("m_window_26")
  568. pi = self->__commonstate.params + 1;
  569. pi->name = "window";
  570. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  571. pi->defaultvalue = self->m_window_26;
  572. pi->defaultref = 0;
  573. pi->hasinputminmax = false;
  574. pi->inputmin = 0;
  575. pi->inputmax = 1;
  576. pi->hasminmax = true;
  577. pi->outputmin = 0.1;
  578. pi->outputmax = 1000;
  579. pi->exp = 0;
  580. pi->units = ""; // no units defined
  581. // initialize parameter 2 ("m_resonance_27")
  582. pi = self->__commonstate.params + 2;
  583. pi->name = "resonance";
  584. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  585. pi->defaultvalue = self->m_resonance_27;
  586. pi->defaultref = 0;
  587. pi->hasinputminmax = false;
  588. pi->inputmin = 0;
  589. pi->inputmax = 1;
  590. pi->hasminmax = true;
  591. pi->outputmin = 0;
  592. pi->outputmax = 0.25;
  593. pi->exp = 0;
  594. pi->units = ""; // no units defined
  595. // initialize parameter 3 ("m_tone_28")
  596. pi = self->__commonstate.params + 3;
  597. pi->name = "tone";
  598. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  599. pi->defaultvalue = self->m_tone_28;
  600. pi->defaultref = 0;
  601. pi->hasinputminmax = false;
  602. pi->inputmin = 0;
  603. pi->inputmax = 1;
  604. pi->hasminmax = true;
  605. pi->outputmin = 0;
  606. pi->outputmax = 1;
  607. pi->exp = 0;
  608. pi->units = ""; // no units defined
  609. // initialize parameter 4 ("m_mix_29")
  610. pi = self->__commonstate.params + 4;
  611. pi->name = "mix";
  612. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  613. pi->defaultvalue = self->m_mix_29;
  614. pi->defaultref = 0;
  615. pi->hasinputminmax = false;
  616. pi->inputmin = 0;
  617. pi->inputmax = 1;
  618. pi->hasminmax = true;
  619. pi->outputmin = 0;
  620. pi->outputmax = 1;
  621. pi->exp = 0;
  622. pi->units = ""; // no units defined
  623. // initialize parameter 5 ("m_spread_30")
  624. pi = self->__commonstate.params + 5;
  625. pi->name = "spread";
  626. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  627. pi->defaultvalue = self->m_spread_30;
  628. pi->defaultref = 0;
  629. pi->hasinputminmax = false;
  630. pi->inputmin = 0;
  631. pi->inputmax = 1;
  632. pi->hasminmax = true;
  633. pi->outputmin = 0;
  634. pi->outputmax = 100;
  635. pi->exp = 0;
  636. pi->units = ""; // no units defined
  637. // initialize parameter 6 ("m_cutoff_31")
  638. pi = self->__commonstate.params + 6;
  639. pi->name = "cutoff";
  640. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  641. pi->defaultvalue = self->m_cutoff_31;
  642. pi->defaultref = 0;
  643. pi->hasinputminmax = false;
  644. pi->inputmin = 0;
  645. pi->inputmax = 1;
  646. pi->hasminmax = true;
  647. pi->outputmin = 0;
  648. pi->outputmax = 6000;
  649. pi->exp = 0;
  650. pi->units = ""; // no units defined
  651. // initialize parameter 7 ("m_early_32")
  652. pi = self->__commonstate.params + 7;
  653. pi->name = "early";
  654. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  655. pi->defaultvalue = self->m_early_32;
  656. pi->defaultref = 0;
  657. pi->hasinputminmax = false;
  658. pi->inputmin = 0;
  659. pi->inputmax = 1;
  660. pi->hasminmax = true;
  661. pi->outputmin = 0;
  662. pi->outputmax = 1;
  663. pi->exp = 0;
  664. pi->units = ""; // no units defined
  665. // initialize parameter 8 ("m_shimmer_33")
  666. pi = self->__commonstate.params + 8;
  667. pi->name = "shimmer";
  668. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  669. pi->defaultvalue = self->m_shimmer_33;
  670. pi->defaultref = 0;
  671. pi->hasinputminmax = false;
  672. pi->inputmin = 0;
  673. pi->inputmax = 1;
  674. pi->hasminmax = true;
  675. pi->outputmin = 0;
  676. pi->outputmax = 1;
  677. pi->exp = 0;
  678. pi->units = ""; // no units defined
  679. // initialize parameter 9 ("m_roomsize_34")
  680. pi = self->__commonstate.params + 9;
  681. pi->name = "roomsize";
  682. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  683. pi->defaultvalue = self->m_roomsize_34;
  684. pi->defaultref = 0;
  685. pi->hasinputminmax = false;
  686. pi->inputmin = 0;
  687. pi->inputmax = 1;
  688. pi->hasminmax = true;
  689. pi->outputmin = 0.1;
  690. pi->outputmax = 300;
  691. pi->exp = 0;
  692. pi->units = ""; // no units defined
  693. // initialize parameter 10 ("m_tail_35")
  694. pi = self->__commonstate.params + 10;
  695. pi->name = "tail";
  696. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  697. pi->defaultvalue = self->m_tail_35;
  698. pi->defaultref = 0;
  699. pi->hasinputminmax = false;
  700. pi->inputmin = 0;
  701. pi->inputmax = 1;
  702. pi->hasminmax = true;
  703. pi->outputmin = 0;
  704. pi->outputmax = 1;
  705. pi->exp = 0;
  706. pi->units = ""; // no units defined
  707. // initialize parameter 11 ("m_blur_36")
  708. pi = self->__commonstate.params + 11;
  709. pi->name = "blur";
  710. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  711. pi->defaultvalue = self->m_blur_36;
  712. pi->defaultref = 0;
  713. pi->hasinputminmax = false;
  714. pi->inputmin = 0;
  715. pi->inputmax = 1;
  716. pi->hasminmax = true;
  717. pi->outputmin = 0.01;
  718. pi->outputmax = 0.25;
  719. pi->exp = 0;
  720. pi->units = ""; // no units defined
  721. // initialize parameter 12 ("m_decay_37")
  722. pi = self->__commonstate.params + 12;
  723. pi->name = "decay";
  724. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  725. pi->defaultvalue = self->m_decay_37;
  726. pi->defaultref = 0;
  727. pi->hasinputminmax = false;
  728. pi->inputmin = 0;
  729. pi->inputmax = 1;
  730. pi->hasminmax = true;
  731. pi->outputmin = 0.1;
  732. pi->outputmax = 360;
  733. pi->exp = 0;
  734. pi->units = ""; // no units defined
  735. // initialize parameter 13 ("m_damping_38")
  736. pi = self->__commonstate.params + 13;
  737. pi->name = "damping";
  738. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  739. pi->defaultvalue = self->m_damping_38;
  740. pi->defaultref = 0;
  741. pi->hasinputminmax = false;
  742. pi->inputmin = 0;
  743. pi->inputmax = 1;
  744. pi->hasminmax = true;
  745. pi->outputmin = 0;
  746. pi->outputmax = 1;
  747. pi->exp = 0;
  748. pi->units = ""; // no units defined
  749. return self;
  750. }
  751. /// Release all resources and memory used by a State object:
  752. void destroy(CommonState *cself) {
  753. State * self = (State *)cself;
  754. genlib_sysmem_freeptr(cself->params);
  755. delete self;
  756. }
  757. } // gen_exported::