DPF with Max Gen
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_early_34;
  51. double m_ratio_35;
  52. double m_cutoff_36;
  53. double m_blur_38;
  54. double m_roomsize_33;
  55. double m_spread_37;
  56. double samples_to_seconds;
  57. double m_tail_32;
  58. double m_shimmer_25;
  59. double m_window_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_damping_31;
  68. double m_history_7;
  69. double m_history_9;
  70. double m_resonance_28;
  71. double m_mix_29;
  72. double m_history_8;
  73. double m_tone_27;
  74. double m_y_11;
  75. double m_history_10;
  76. double m_decay_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", 7000);
  96. m_delay_13.reset("m_delay_13", 5000);
  97. m_delay_14.reset("m_delay_14", 16000);
  98. m_delay_15.reset("m_delay_15", 15000);
  99. m_delay_16.reset("m_delay_16", 6000);
  100. m_delay_17.reset("m_delay_17", 88200);
  101. m_delay_18.reset("m_delay_18", 48000);
  102. m_delay_19.reset("m_delay_19", 12000);
  103. m_delay_20.reset("m_delay_20", 10000);
  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_shimmer_25 = 0.5;
  109. m_decay_26 = 60;
  110. m_tone_27 = 0.5;
  111. m_resonance_28 = 0;
  112. m_mix_29 = 0.5;
  113. m_window_30 = 100;
  114. m_damping_31 = 0.75;
  115. m_tail_32 = 0.25;
  116. m_roomsize_33 = 75;
  117. m_early_34 = 0.25;
  118. m_ratio_35 = 2;
  119. m_cutoff_36 = 3000;
  120. m_spread_37 = 25;
  121. m_blur_38 = 0.25;
  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_3603 = (1 - m_tone_27);
  151. double expr_4406 = safepow(0.001, safediv(1, (m_decay_26 * 44100)));
  152. double expr_4407 = safediv((m_roomsize_33 * 44100), 340);
  153. double mul_3592 = (expr_4407 * 0.63245);
  154. double expr_4398 = (-safepow(expr_4406, mul_3592));
  155. double mul_3595 = (expr_4407 * 1);
  156. double expr_4405 = (-safepow(expr_4406, mul_3595));
  157. double mul_3593 = (expr_4407 * 0.7071);
  158. double expr_4399 = (-safepow(expr_4406, mul_3593));
  159. double mul_3594 = (expr_4407 * 0.81649);
  160. double expr_4400 = (-safepow(expr_4406, mul_3594));
  161. double mul_3589 = (expr_4407 * 0.000527);
  162. int int_3588 = int(mul_3589);
  163. double mul_3377 = (m_resonance_28 * 0.125);
  164. double exp_3378 = exp(mul_3377);
  165. double mul_3376 = (exp_3378 * 0.882497);
  166. double mul_3372 = (mul_3376 * mul_3376);
  167. double expr_4397 = safediv(((m_cutoff_36 * 2) * 3.1415926535898), 44100);
  168. double cos_3375 = cos(expr_4397);
  169. double mul_3374 = (cos_3375 * mul_3376);
  170. double mul_3373 = (mul_3374 * -2);
  171. double add_3371 = ((mul_3373 + mul_3372) + 1);
  172. double mul_3557 = (m_spread_37 * 0.376623);
  173. double add_3556 = (mul_3557 + 931);
  174. double rsub_3553 = (1341 - add_3556);
  175. double mul_3564 = (int_3588 * rsub_3553);
  176. double add_3518 = (expr_4407 + 5);
  177. double expr_4401 = safepow(expr_4406, add_3518);
  178. double mstosamps_3443 = (m_window_30 * (samplerate * 0.001));
  179. double mul_3529 = (m_spread_37 * -0.380445);
  180. double add_3528 = (mul_3529 + 931);
  181. double rsub_3525 = (1341 - add_3528);
  182. double mul_3538 = (int_3588 * rsub_3525);
  183. double mul_3524 = (expr_4407 * 0.41);
  184. double add_3521 = (mul_3524 + 5);
  185. double expr_4404 = safepow(expr_4406, add_3521);
  186. double mul_3523 = (expr_4407 * 0.3);
  187. double add_3520 = (mul_3523 + 5);
  188. double expr_4403 = safepow(expr_4406, add_3520);
  189. double mul_3522 = (expr_4407 * 0.155);
  190. double add_3519 = (mul_3522 + 5);
  191. double expr_4402 = safepow(expr_4406, add_3519);
  192. double rsub_3430 = (1 - m_ratio_35);
  193. double mul_3429 = (rsub_3430 * 1000);
  194. double div_3428 = safediv(mul_3429, m_window_30);
  195. samples_to_seconds = (1 / samplerate);
  196. double mul_3587 = (expr_4407 * 0.110732);
  197. double mul_3573 = (m_spread_37 * 0.125541);
  198. double add_3555 = (mul_3573 + 369);
  199. double rsub_3554 = (add_3556 - add_3555);
  200. double mul_3571 = (int_3588 * rsub_3554);
  201. double mul_3531 = (m_spread_37 * -0.568366);
  202. double add_3527 = (mul_3531 + 369);
  203. double rsub_3526 = (add_3528 - add_3527);
  204. double mul_3545 = (int_3588 * rsub_3526);
  205. double add_3572 = (mul_3573 + 159);
  206. double mul_3580 = (int_3588 * add_3572);
  207. double add_3530 = (mul_3531 + 159);
  208. double mul_3552 = (int_3588 * add_3530);
  209. // the main sample loop;
  210. while ((__n--)) {
  211. const double in1 = (*(__in1++));
  212. double noise_3382 = noise();
  213. double abs_3400 = fabs(noise_3382);
  214. double mul_3410 = (abs_3400 * m_blur_38);
  215. double noise_3381 = noise();
  216. double abs_3399 = fabs(noise_3381);
  217. double mul_3407 = (abs_3399 * m_blur_38);
  218. double noise_3379 = noise();
  219. double abs_3397 = fabs(noise_3379);
  220. double mul_3401 = (abs_3397 * m_blur_38);
  221. double noise_3380 = noise();
  222. double abs_3398 = fabs(noise_3380);
  223. double mul_3404 = (abs_3398 * m_blur_38);
  224. double tap_3492 = m_delay_24.read_linear(mul_3592);
  225. double mul_3488 = (tap_3492 * expr_4398);
  226. double mix_4450 = (mul_3488 + (m_damping_31 * (m_history_10 - mul_3488)));
  227. double mix_3490 = mix_4450;
  228. double tap_3600 = m_delay_23.read_linear(mul_3595);
  229. double mul_3591 = (tap_3600 * expr_4405);
  230. double mix_4451 = (mul_3591 + (m_damping_31 * (m_history_9 - mul_3591)));
  231. double mix_3598 = mix_4451;
  232. double tap_3498 = m_delay_22.read_linear(mul_3593);
  233. double mul_3494 = (tap_3498 * expr_4399);
  234. double mix_4452 = (mul_3494 + (m_damping_31 * (m_history_8 - mul_3494)));
  235. double mix_3496 = mix_4452;
  236. double tap_3504 = m_delay_21.read_linear(mul_3594);
  237. double mul_3500 = (tap_3504 * expr_4400);
  238. double mix_4453 = (mul_3500 + (m_damping_31 * (m_history_7 - mul_3500)));
  239. double mix_3502 = mix_4453;
  240. double mul_3368 = (mul_3372 * m_y_11);
  241. double mul_3369 = (mul_3373 * m_y_2);
  242. double tap_3563 = m_delay_20.read_linear(mul_3564);
  243. double mul_3561 = (tap_3563 * 0.625);
  244. double add_3482 = (mix_3598 + mix_3502);
  245. double add_3480 = (mix_3496 + mix_3490);
  246. double add_3475 = (add_3482 + add_3480);
  247. double mul_3458 = (add_3475 * 0.5);
  248. double sub_3479 = (add_3482 - add_3480);
  249. double mul_3461 = (sub_3479 * 0.5);
  250. double sub_3481 = (mix_3598 - mix_3502);
  251. double sub_3478 = (mix_3496 - mix_3490);
  252. double sub_3477 = (sub_3481 - sub_3478);
  253. double mul_3460 = (sub_3477 * 0.5);
  254. double add_3476 = (sub_3481 + sub_3478);
  255. double rsub_3474 = (0 - add_3476);
  256. double mul_3459 = (rsub_3474 * 0.5);
  257. double tap_3537 = m_delay_19.read_linear(mul_3538);
  258. double mul_3535 = (tap_3537 * 0.625);
  259. double tap_3506 = m_delay_18.read_linear(add_3521);
  260. double tap_3507 = m_delay_18.read_linear(add_3520);
  261. double tap_3508 = m_delay_18.read_linear(add_3519);
  262. double tap_3509 = m_delay_18.read_linear(add_3518);
  263. double mul_3510 = (tap_3509 * expr_4401);
  264. double add_3483 = (mul_3458 + mul_3510);
  265. double mul_3516 = (tap_3506 * expr_4404);
  266. double add_3486 = (mul_3461 + mul_3516);
  267. double mul_3514 = (tap_3507 * expr_4403);
  268. double add_3485 = (mul_3460 + mul_3514);
  269. double mul_3512 = (tap_3508 * expr_4402);
  270. double add_3484 = (mul_3459 + mul_3512);
  271. double phasor_3449 = m_phasor_39(div_3428, samples_to_seconds);
  272. double add_3448 = ((m_history_6 + phasor_3449) + 0);
  273. double mod_3447 = safemod(add_3448, 1);
  274. double delta_3390 = m_delta_40(mod_3447);
  275. double sah_3389 = m_sah_41(mul_3410, delta_3390, 0);
  276. double sah_3411 = m_sah_42(mstosamps_3443, delta_3390, 0);
  277. double mul_3396 = (sah_3411 * mod_3447);
  278. double sub_3446 = (mod_3447 - 0.5);
  279. double mul_3445 = (sub_3446 * 3.1415926535898);
  280. double cos_3444 = cos(mul_3445);
  281. double mul_3415 = (cos_3444 * cos_3444);
  282. double add_3442 = ((m_history_5 + phasor_3449) + 0.25);
  283. double mod_3441 = safemod(add_3442, 1);
  284. double delta_3409 = m_delta_43(mod_3441);
  285. double sah_3387 = m_sah_44(mul_3407, delta_3409, 0);
  286. double sah_3408 = m_sah_45(mstosamps_3443, delta_3409, 0);
  287. double mul_3395 = (sah_3408 * mod_3441);
  288. double sub_3440 = (mod_3441 - 0.5);
  289. double mul_3439 = (sub_3440 * 3.1415926535898);
  290. double cos_3438 = cos(mul_3439);
  291. double mul_3414 = (cos_3438 * cos_3438);
  292. double add_3421 = ((m_history_4 + phasor_3449) + 0.75);
  293. double mod_3420 = safemod(add_3421, 1);
  294. double delta_3403 = m_delta_46(mod_3420);
  295. double sah_3383 = m_sah_47(mul_3401, delta_3403, 0);
  296. double sah_3402 = m_sah_48(mstosamps_3443, delta_3403, 0);
  297. double mul_3393 = (sah_3402 * mod_3420);
  298. double sub_3419 = (mod_3420 - 0.5);
  299. double mul_3418 = (sub_3419 * 3.1415926535898);
  300. double cos_3417 = cos(mul_3418);
  301. double mul_3412 = (cos_3417 * cos_3417);
  302. double add_3427 = ((m_history_3 + phasor_3449) + 0.5);
  303. double mod_3426 = safemod(add_3427, 1);
  304. double delta_3406 = m_delta_49(mod_3426);
  305. double sah_3385 = m_sah_50(mul_3404, delta_3406, 0);
  306. double sah_3405 = m_sah_51(mstosamps_3443, delta_3406, 0);
  307. double mul_3394 = (sah_3405 * mod_3426);
  308. double tap_3434 = m_delay_17.read_linear(mul_3396);
  309. double tap_3435 = m_delay_17.read_linear(mul_3395);
  310. double tap_3436 = m_delay_17.read_linear(mul_3394);
  311. double tap_3437 = m_delay_17.read_linear(mul_3393);
  312. double mul_3416 = (tap_3437 * mul_3412);
  313. double mul_3431 = (tap_3435 * mul_3414);
  314. double mul_3432 = (tap_3434 * mul_3415);
  315. double sub_3425 = (mod_3426 - 0.5);
  316. double mul_3424 = (sub_3425 * 3.1415926535898);
  317. double cos_3423 = cos(mul_3424);
  318. double mul_3413 = (cos_3423 * cos_3423);
  319. double mul_3422 = (tap_3436 * mul_3413);
  320. double mul_3370 = ((((mul_3432 + mul_3431) + mul_3422) + mul_3416) * add_3371);
  321. double sub_3367 = (mul_3370 - (mul_3369 + mul_3368));
  322. double mix_4454 = (in1 + (m_shimmer_25 * (sub_3367 - in1)));
  323. double mix_3392 = mix_4454;
  324. double mul_3452 = (mix_3392 * 0.707);
  325. double mix_4455 = (mul_3452 + (rsub_3603 * (m_history_1 - mul_3452)));
  326. double mix_3602 = mix_4455;
  327. double tap_3586 = m_delay_16.read_linear(mul_3587);
  328. double tap_3570 = m_delay_15.read_linear(mul_3571);
  329. double mul_3568 = (tap_3570 * 0.625);
  330. double mul_3584 = (tap_3586 * 0.75);
  331. double sub_3583 = (mix_3602 - mul_3584);
  332. double mul_3582 = (sub_3583 * 0.75);
  333. double add_3581 = (mul_3582 + tap_3586);
  334. double tap_3544 = m_delay_14.read_linear(mul_3545);
  335. double mul_3542 = (tap_3544 * 0.625);
  336. double tap_3579 = m_delay_13.read_linear(mul_3580);
  337. double mul_3577 = (tap_3579 * 0.75);
  338. double tap_3551 = m_delay_12.read_linear(mul_3552);
  339. double mul_3549 = (tap_3551 * 0.75);
  340. double mul_3473 = (mul_3461 * m_tail_32);
  341. double mul_3471 = (mul_3459 * m_tail_32);
  342. double add_3457 = (mul_3473 + mul_3471);
  343. double mul_3472 = (mul_3460 * m_tail_32);
  344. double mul_3470 = (mul_3458 * m_tail_32);
  345. double add_3456 = (mul_3472 + mul_3470);
  346. double sub_3465 = (add_3457 - add_3456);
  347. double mul_3469 = (mul_3516 * m_early_34);
  348. double mul_3467 = (mul_3512 * m_early_34);
  349. double add_3455 = (mul_3469 + mul_3467);
  350. double mul_3468 = (mul_3514 * m_early_34);
  351. double mul_3466 = (mul_3510 * m_early_34);
  352. double add_3454 = (mul_3468 + mul_3466);
  353. double sub_3464 = (add_3455 - add_3454);
  354. double add_3451 = (sub_3465 + sub_3464);
  355. double add_3463 = (add_3451 + mix_3392);
  356. double sub_3576 = (add_3463 - mul_3577);
  357. double mul_3575 = (sub_3576 * 0.75);
  358. double add_3574 = (mul_3575 + tap_3579);
  359. double sub_3567 = (add_3574 - mul_3568);
  360. double mul_3566 = (sub_3567 * 0.625);
  361. double add_3565 = (mul_3566 + tap_3570);
  362. double sub_3560 = (add_3565 - mul_3561);
  363. double mul_3559 = (sub_3560 * 0.625);
  364. double add_3558 = (mul_3559 + tap_3563);
  365. double mul_3462 = (add_3558 * m_mix_29);
  366. double out1 = (mul_3462 + in1);
  367. double add_3453 = (add_3451 + mix_3392);
  368. double sub_3548 = (add_3453 - mul_3549);
  369. double mul_3547 = (sub_3548 * 0.75);
  370. double add_3546 = (mul_3547 + tap_3551);
  371. double sub_3541 = (add_3546 - mul_3542);
  372. double mul_3540 = (sub_3541 * 0.625);
  373. double add_3539 = (mul_3540 + tap_3544);
  374. double sub_3534 = (add_3539 - mul_3535);
  375. double mul_3533 = (sub_3534 * 0.625);
  376. double add_3532 = (mul_3533 + tap_3537);
  377. double mul_3450 = (add_3532 * m_mix_29);
  378. double out2 = (mul_3450 + in1);
  379. double y2_next_4421 = m_y_2;
  380. double history_3489_next_4422 = mix_3490;
  381. double history_3597_next_4423 = mix_3598;
  382. double history_3495_next_4424 = mix_3496;
  383. double history_3501_next_4425 = mix_3502;
  384. double history_3391_next_4426 = sah_3389;
  385. double history_3388_next_4427 = sah_3387;
  386. double history_3384_next_4428 = sah_3383;
  387. double history_3386_next_4429 = sah_3385;
  388. double y1_next_4430 = sub_3367;
  389. double history_3601_next_4431 = mix_3602;
  390. m_delay_24.write(add_3483);
  391. m_delay_23.write(add_3486);
  392. m_delay_22.write(add_3484);
  393. m_delay_21.write(add_3485);
  394. m_delay_20.write(sub_3560);
  395. m_delay_19.write(sub_3534);
  396. m_delay_18.write(add_3581);
  397. m_delay_17.write(in1);
  398. m_delay_16.write(sub_3583);
  399. m_delay_15.write(sub_3567);
  400. m_delay_14.write(sub_3541);
  401. m_delay_13.write(sub_3576);
  402. m_delay_12.write(sub_3548);
  403. m_y_11 = y2_next_4421;
  404. m_history_10 = history_3489_next_4422;
  405. m_history_9 = history_3597_next_4423;
  406. m_history_8 = history_3495_next_4424;
  407. m_history_7 = history_3501_next_4425;
  408. m_history_6 = history_3391_next_4426;
  409. m_history_5 = history_3388_next_4427;
  410. m_history_4 = history_3384_next_4428;
  411. m_history_3 = history_3386_next_4429;
  412. m_y_2 = y1_next_4430;
  413. m_history_1 = history_3601_next_4431;
  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_shimmer(double _value) {
  434. m_shimmer_25 = (_value < 0 ? 0 : (_value > 1 ? 1 : _value));
  435. };
  436. inline void set_decay(double _value) {
  437. m_decay_26 = (_value < 0.1 ? 0.1 : (_value > 360 ? 360 : _value));
  438. };
  439. inline void set_tone(double _value) {
  440. m_tone_27 = (_value < 0 ? 0 : (_value > 1 ? 1 : _value));
  441. };
  442. inline void set_resonance(double _value) {
  443. m_resonance_28 = (_value < 0 ? 0 : (_value > 0.25 ? 0.25 : _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_window(double _value) {
  449. m_window_30 = (_value < 0.1 ? 0.1 : (_value > 1000 ? 1000 : _value));
  450. };
  451. inline void set_damping(double _value) {
  452. m_damping_31 = (_value < 0 ? 0 : (_value > 1 ? 1 : _value));
  453. };
  454. inline void set_tail(double _value) {
  455. m_tail_32 = (_value < 0 ? 0 : (_value > 1 ? 1 : _value));
  456. };
  457. inline void set_roomsize(double _value) {
  458. m_roomsize_33 = (_value < 0.1 ? 0.1 : (_value > 300 ? 300 : _value));
  459. };
  460. inline void set_early(double _value) {
  461. m_early_34 = (_value < 0 ? 0 : (_value > 1 ? 1 : _value));
  462. };
  463. inline void set_ratio(double _value) {
  464. m_ratio_35 = (_value < 0.5 ? 0.5 : (_value > 2 ? 2 : _value));
  465. };
  466. inline void set_cutoff(double _value) {
  467. m_cutoff_36 = (_value < 0 ? 0 : (_value > 6000 ? 6000 : _value));
  468. };
  469. inline void set_spread(double _value) {
  470. m_spread_37 = (_value < 0 ? 0 : (_value > 100 ? 100 : _value));
  471. };
  472. inline void set_blur(double _value) {
  473. m_blur_38 = (_value < 0.01 ? 0.01 : (_value > 0.25 ? 0.25 : _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_shimmer(value); break;
  503. case 1: self->set_decay(value); break;
  504. case 2: self->set_tone(value); break;
  505. case 3: self->set_resonance(value); break;
  506. case 4: self->set_mix(value); break;
  507. case 5: self->set_window(value); break;
  508. case 6: self->set_damping(value); break;
  509. case 7: self->set_tail(value); break;
  510. case 8: self->set_roomsize(value); break;
  511. case 9: self->set_early(value); break;
  512. case 10: self->set_ratio(value); break;
  513. case 11: self->set_cutoff(value); break;
  514. case 12: self->set_spread(value); break;
  515. case 13: self->set_blur(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_shimmer_25; break;
  524. case 1: *value = self->m_decay_26; break;
  525. case 2: *value = self->m_tone_27; break;
  526. case 3: *value = self->m_resonance_28; break;
  527. case 4: *value = self->m_mix_29; break;
  528. case 5: *value = self->m_window_30; break;
  529. case 6: *value = self->m_damping_31; break;
  530. case 7: *value = self->m_tail_32; break;
  531. case 8: *value = self->m_roomsize_33; break;
  532. case 9: *value = self->m_early_34; break;
  533. case 10: *value = self->m_ratio_35; break;
  534. case 11: *value = self->m_cutoff_36; break;
  535. case 12: *value = self->m_spread_37; break;
  536. case 13: *value = self->m_blur_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_shimmer_25")
  554. pi = self->__commonstate.params + 0;
  555. pi->name = "shimmer";
  556. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  557. pi->defaultvalue = self->m_shimmer_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;
  564. pi->outputmax = 1;
  565. pi->exp = 0;
  566. pi->units = ""; // no units defined
  567. // initialize parameter 1 ("m_decay_26")
  568. pi = self->__commonstate.params + 1;
  569. pi->name = "decay";
  570. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  571. pi->defaultvalue = self->m_decay_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 = 360;
  579. pi->exp = 0;
  580. pi->units = ""; // no units defined
  581. // initialize parameter 2 ("m_tone_27")
  582. pi = self->__commonstate.params + 2;
  583. pi->name = "tone";
  584. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  585. pi->defaultvalue = self->m_tone_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 = 1;
  593. pi->exp = 0;
  594. pi->units = ""; // no units defined
  595. // initialize parameter 3 ("m_resonance_28")
  596. pi = self->__commonstate.params + 3;
  597. pi->name = "resonance";
  598. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  599. pi->defaultvalue = self->m_resonance_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 = 0.25;
  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_window_30")
  624. pi = self->__commonstate.params + 5;
  625. pi->name = "window";
  626. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  627. pi->defaultvalue = self->m_window_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.1;
  634. pi->outputmax = 1000;
  635. pi->exp = 0;
  636. pi->units = ""; // no units defined
  637. // initialize parameter 6 ("m_damping_31")
  638. pi = self->__commonstate.params + 6;
  639. pi->name = "damping";
  640. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  641. pi->defaultvalue = self->m_damping_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 = 1;
  649. pi->exp = 0;
  650. pi->units = ""; // no units defined
  651. // initialize parameter 7 ("m_tail_32")
  652. pi = self->__commonstate.params + 7;
  653. pi->name = "tail";
  654. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  655. pi->defaultvalue = self->m_tail_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_roomsize_33")
  666. pi = self->__commonstate.params + 8;
  667. pi->name = "roomsize";
  668. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  669. pi->defaultvalue = self->m_roomsize_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.1;
  676. pi->outputmax = 300;
  677. pi->exp = 0;
  678. pi->units = ""; // no units defined
  679. // initialize parameter 9 ("m_early_34")
  680. pi = self->__commonstate.params + 9;
  681. pi->name = "early";
  682. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  683. pi->defaultvalue = self->m_early_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;
  690. pi->outputmax = 1;
  691. pi->exp = 0;
  692. pi->units = ""; // no units defined
  693. // initialize parameter 10 ("m_ratio_35")
  694. pi = self->__commonstate.params + 10;
  695. pi->name = "ratio";
  696. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  697. pi->defaultvalue = self->m_ratio_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.5;
  704. pi->outputmax = 2;
  705. pi->exp = 0;
  706. pi->units = ""; // no units defined
  707. // initialize parameter 11 ("m_cutoff_36")
  708. pi = self->__commonstate.params + 11;
  709. pi->name = "cutoff";
  710. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  711. pi->defaultvalue = self->m_cutoff_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;
  718. pi->outputmax = 6000;
  719. pi->exp = 0;
  720. pi->units = ""; // no units defined
  721. // initialize parameter 12 ("m_spread_37")
  722. pi = self->__commonstate.params + 12;
  723. pi->name = "spread";
  724. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  725. pi->defaultvalue = self->m_spread_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;
  732. pi->outputmax = 100;
  733. pi->exp = 0;
  734. pi->units = ""; // no units defined
  735. // initialize parameter 13 ("m_blur_38")
  736. pi = self->__commonstate.params + 13;
  737. pi->name = "blur";
  738. pi->paramtype = GENLIB_PARAMTYPE_FLOAT;
  739. pi->defaultvalue = self->m_blur_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.01;
  746. pi->outputmax = 0.25;
  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::