-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpluck-and-duck~.pd
1431 lines (1431 loc) · 42.4 KB
/
pluck-and-duck~.pd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#N canvas 0 25 1920 947 12;
#X obj 558 32 inlet~;
#X obj 588 299 outlet~;
#X obj 443 697 hsl 180 15 -1 1 0 0 \$0-attenuverter-ui \$0-attenuverter-in
Attenuverter -2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X floatatom 625 697 5 0 10 0 - \$0-attenuverter-ui \$0-attenuverter-cv
0;
#X obj 443 847 hsl 180 15 0 1 0 0 \$0-output-gain-ui \$0-output-gain-in
Output\\\ Gain -2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X floatatom 625 847 5 0 1 0 - \$0-output-gain-ui \$0-output-gain-cv
0;
#X obj 443 577 hsl 180 15 -1 1 0 0 \$0-attack-ui \$0-attack-in Attack
-2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X floatatom 625 577 5 0 0 0 - \$0-attack-ui \$0-attack-cv 0;
#X obj 993 299 outlet~;
#X obj 443 607 hsl 180 15 -1 1 0 0 \$0-decay-ui \$0-decay-in Decay
-2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X floatatom 625 607 5 0 0 0 - \$0-decay-ui \$0-decay-cv 0;
#X obj 443 637 hsl 180 15 -1 1 0 0 \$0-attack-decay-ui \$0-attack-decay-in
Attack\\\ +\\\ Decay -2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X floatatom 625 637 5 0 0 0 - \$0-attack-decay-ui \$0-attack-decay-cv
0;
#X obj 3179 32 inlet~;
#X obj 2487 32 inlet~;
#X obj 1943 32 inlet~;
#X obj 2072 32 inlet~;
#X obj 2195 32 inlet~;
#X text 2195 6 Slew Limiter Scale~;
#X obj 443 367 hsl 180 15 0 1 0 0 \$0-input2-mix-ui \$0-input2-mix-in
Input\\\ 2\\\ Mix -2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X floatatom 625 367 5 0 0 0 - \$0-input2-mix-ui \$0-input2-mix-cv
0;
#X obj 443 397 hsl 180 15 0 1 0 0 \$0-pre-gain-ui \$0-pre-gain-in Pre\\\ Gain
-2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X floatatom 626 397 5 0 0 0 - \$0-pre-gain-ui \$0-pre-gain-cv 0;
#X floatatom 696 618 10 0 0 0 A\ Hz \$0-attack-display-hz - 0;
#X floatatom 696 641 10 0 0 0 D\ Hz \$0-decay-display-hz - 0;
#X floatatom 696 595 10 0.005 1000 0 D\ ms \$0-decay-display-ms - 0
;
#X floatatom 696 572 10 0.005 1000 0 A\ ms \$0-attack-display-ms -
0;
#X floatatom 663 697 7 0 0 0 - \$0-attenuverter-display - 0;
#X floatatom 663 847 7 0 0 0 - \$0-output-gain-display - 0;
#X obj 772 32 inlet~;
#X floatatom 664 397 7 0 0 0 - \$0-pre-gain-display - 0;
#X floatatom 663 367 7 0 0 0 - \$0-input2-mix-display - 0;
#X obj 718 847 tgl 15 0 \$0-mute-switch-cv \$0-mute-switch-in Mute
17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 818 299 outlet~;
#X text 818 245 Send Out~;
#X text 993 245 Env Out~;
#X text 772 6 Return~;
#X obj 718 727 tgl 15 0 \$0-vca-inv-switch-cv \$0-vca-inv-switch-in
Inv\\\ Wet 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 449 186 s~ \$0-in~;
#X obj 525 186 s~ \$0-cv-in~;
#X obj 1943 60 s~ \$0-attack-in~;
#X obj 2072 60 s~ \$0-decay-in~;
#X obj 772 60 s~ \$0-return-in~;
#X obj 818 271 r~ \$0-send-out~;
#X obj 993 271 r~ \$0-env-out~;
#X obj 588 271 r~ \$0-main-out~;
#X obj 659 32 inlet~;
#X obj 3498 32 inlet;
#X obj 924 32 inlet~;
#X text 924 6 Input2 Mix~;
#X obj 924 60 s~ \$0-input2-mix-in~;
#X obj 718 367 tgl 15 0 \$0-input2-inv-switch-cv \$0-input2-inv-switch-in
Inv\\\ In2 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#N canvas 2 25 496 1027 main-signal-flow 1;
#X obj 79 435 *~;
#X obj 60 918 *~;
#X text 90 917 On / Off (Mute);
#X obj 42 818 +~;
#X obj 42 947 *~;
#X obj 79 494 expr~ $v1 * copysign(1 \, $v2);
#X text 71 946 Main Out Gain;
#X obj 42 30 r~ \$0-in~;
#X obj 97 69 r~ \$0-cv-in~;
#X obj 60 788 r~ \$0-return-in~;
#X obj 59 758 s~ \$0-send-out~;
#X obj 180 396 s~ \$0-env-out~;
#X obj 42 986 s~ \$0-main-out~;
#X obj 208 237 r~ \$0-attack-cv~;
#X obj 223 261 r~ \$0-decay-cv~;
#X obj 60 857 r~ \$0-output-gain-cv~;
#X text 69 817 Return;
#X text 42 8 Main Signal flow;
#X obj 78 888 r~ \$0-mute-switch-cv~;
#N canvas 0 25 1029 439 pluck-and-duck-core~ 0;
#X obj 33 72 inlet~;
#X obj 33 383 outlet~;
#X obj 880 72 inlet~;
#X obj 632 72 inlet~;
#X obj 716 72 inlet~;
#X text 716 49 Decay Hz~;
#X text 632 49 Attack Hz~;
#X text 33 49 AMP CV IN~;
#X obj 114 72 inlet~;
#X obj 194 72 inlet~;
#X obj 33 111 *~;
#X obj 796 72 inlet~;
#X obj 404 72 inlet~;
#X obj 491 72 inlet~;
#X obj 561 72 inlet~;
#X obj 304 72 inlet~;
#X text 304 49 RFS Smooth~;
#X text 194 49 Clip Silence~;
#X text 114 49 Pre Gain~;
#X text 491 49 Ratio~;
#X text 404 49 Threshold~;
#X text 561 49 Knee~;
#X text 796 49 Re-Shape~;
#N canvas 552 258 730 444 soft-knee-compressor~ 0;
#X obj 33 72 inlet~;
#X text 33 49 AMP CV IN~;
#X obj 155 72 inlet~;
#X obj 276 72 inlet~;
#X obj 436 72 inlet~;
#X text 276 49 Ratio~;
#X text 155 49 Threshold~;
#X text 436 49 Knee~;
#X obj 33 192 expr~ if(2 * ($v1 - $v2) < -$v4 \, $v1 \, if(2 * abs(($v1
- $v2)) <= $v4 \, $v1 + (1 / $v3 - 1) * pow(($v1 - $v2 + $v4 / 2) \,
2) / (2 * $v4) \, $v2 + ($v1 - $v2) / $v3) );
#X obj 33 262 expr~ $v1 / ($v2 + (1 - $v2) / $v3);
#X text 286 261 Amplitude compensation;
#X obj 33 304 max~ 0;
#X obj 34 363 outlet~;
#X text 453 207 Unipolar Soft Knee Compressor;
#X connect 0 0 8 0;
#X connect 2 0 8 1;
#X connect 2 0 9 1;
#X connect 3 0 8 2;
#X connect 3 0 9 2;
#X connect 4 0 8 3;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 11 0 12 0;
#X restore 33 228 pd soft-knee-compressor~;
#X f 33;
#N canvas 197 220 807 444 reshape~ 0;
#X obj 33 72 inlet~;
#X obj 401 72 inlet~;
#X obj 33 347 outlet~;
#X obj 401 212 expr~ if($v1 > 0 \, $v1 * 99 + 1 \, 1 / (($v1 * -99)+1))
;
#X obj 33 273 expr~ copysign(pow(abs($v1) \, $v2) \, $v1);
#X obj 33 307 max~ 0;
#X text 33 49 Env In~;
#X text 401 49 ReShape~;
#X connect 0 0 4 0;
#X connect 1 0 3 0;
#X connect 3 0 4 1;
#X connect 4 0 5 0;
#X connect 5 0 2 0;
#X restore 33 305 pd reshape~;
#X f 67;
#N canvas 584 236 573 345 rfs-smooth~ 0;
#X obj 33 72 inlet~;
#X text 33 49 AMP CV IN~;
#X obj 33 136 pow~ 2;
#X obj 33 194 sqrt~;
#X obj 33 223 *~ 1.41421;
#X obj 144 72 inlet~;
#X text 144 49 RFS Smooth~;
#X obj 33 165 vcf~ 0.7071;
#X text 119 164 Root Lowpass Filtered Square - instant RMS approximation
with adjustable cutoff frequency;
#X obj 33 280 outlet~;
#X connect 0 0 2 0;
#X connect 2 0 7 0;
#X connect 3 0 4 0;
#X connect 4 0 9 0;
#X connect 5 0 7 1;
#X connect 7 0 3 0;
#X restore 33 189 pd rfs-smooth~;
#N canvas 458 167 825 604 clip-silence~ 0;
#X obj 33 72 inlet~;
#X text 33 49 AMP CV IN~;
#X obj 401 72 inlet~;
#X text 401 49 AMP CV Threshold~;
#X obj 33 337 outlet~;
#X obj 33 273 expr~ copysign(max(0 \, abs($v1 * $v2) - $v2 + 1) \,
$v1);
#X obj 401 212 expr~ if($v1 > 0 \, $v1 * 99 + 1 \, 1 / (($v1 * -99)+1))
;
#X connect 0 0 5 0;
#X connect 2 0 6 0;
#X connect 5 0 4 0;
#X connect 6 0 5 1;
#X restore 33 150 pd clip-silence~;
#N canvas 506 279 405 419 pnd-attenuverter~ 0;
#X obj 33 131 *~ -1;
#X obj 33 316 *~;
#X obj 199 316 *~;
#X text 225 315 pluck - positive;
#X text 60 315 duck - inverted;
#X obj 217 269 max~ 0;
#X obj 51 243 *~ -1;
#X obj 51 269 max~ 0;
#X obj 33 160 +~ 1;
#X text 100 243 Amplify the positively flipped signal;
#X text 104 133 Invert in the positive domain;
#X obj 33 365 outlet~;
#X obj 153 52 inlet~;
#X text 153 29 PND Attenuverter~;
#X obj 33 52 inlet~;
#X text 33 29 ENV IN~;
#X obj 33 102 min~ 1;
#X connect 0 0 8 0;
#X connect 1 0 11 0;
#X connect 2 0 11 0;
#X connect 5 0 2 1;
#X connect 6 0 7 0;
#X connect 7 0 1 1;
#X connect 8 0 1 0;
#X connect 12 0 6 0;
#X connect 12 0 5 0;
#X connect 14 0 16 0;
#X connect 14 0 2 0;
#X connect 16 0 0 0;
#X restore 33 344 pd pnd-attenuverter~;
#X f 74;
#X text 880 49 PND Attenuverter~;
#X text 89 381 Env Out~;
#N canvas 651 256 283 220 smooth~ 0;
#X obj 33 150 outlet~;
#X obj 33 111 slop~ 1e+09 0 0 0 0;
#X obj 99 72 inlet~;
#X obj 183 72 inlet~;
#X text 183 49 Decay Hz~;
#X text 99 49 Attack Hz~;
#X text 89 148 Env Out~;
#X obj 33 72 inlet~;
#X text 33 49 Env In~;
#X connect 1 0 0 0;
#X connect 2 0 1 5;
#X connect 3 0 1 3;
#X connect 7 0 1 0;
#X restore 33 267 pd smooth~;
#X f 60;
#X connect 0 0 10 0;
#X connect 2 0 27 1;
#X connect 3 0 30 1;
#X connect 4 0 30 2;
#X connect 8 0 10 1;
#X connect 9 0 26 1;
#X connect 10 0 26 0;
#X connect 11 0 24 1;
#X connect 12 0 23 1;
#X connect 13 0 23 2;
#X connect 14 0 23 3;
#X connect 15 0 25 1;
#X connect 23 0 30 0;
#X connect 24 0 27 0;
#X connect 25 0 23 0;
#X connect 26 0 25 0;
#X connect 27 0 1 0;
#X connect 30 0 24 0;
#X restore 97 367 pd pluck-and-duck-core~;
#X obj 42 562 crossfader~;
#X text 282 493 VCA Out Polarity inversion;
#X text 127 561 VCA Dry / Wet Mix;
#X obj 59 728 *~;
#X obj 77 698 r~ \$0-send-gain-cv~;
#X text 287 395 Dedicated Envelope Output;
#X text 172 757 Dedicated Send Output;
#X obj 160 165 r~ \$0-threshold-cv~;
#X obj 176 189 r~ \$0-ratio-cv~;
#X obj 192 213 r~ \$0-knee-cv~;
#X obj 239 285 r~ \$0-reshape-cv~;
#X obj 255 309 r~ \$0-attenuverter-cv~;
#X obj 144 141 r~ \$0-rfs-smooth-cv~;
#X obj 113 93 r~ \$0-pre-gain-cv~;
#X obj 128 117 r~ \$0-clip-silence-cv~;
#X obj 116 533 r~ \$0-vca-mix-cv~;
#X obj 272 465 r~ \$0-wet-inv-switch-cv~;
#X obj 79 601 expr~ tanh($v2 * $v1) / tanh($v2);
#X text 318 600 Saturator;
#X obj 42 659 crossfader~;
#X text 129 658 Saturator Mix;
#X obj 307 572 r~ \$0-saturator-gain-cv~;
#X obj 116 630 r~ \$0-saturator-mix-cv~;
#X text 107 434 VCA;
#X connect 0 0 5 0;
#X connect 1 0 4 1;
#X connect 3 0 4 0;
#X connect 4 0 12 0;
#X connect 5 0 20 1;
#X connect 7 0 0 0;
#X connect 7 0 20 0;
#X connect 8 0 19 0;
#X connect 9 0 3 1;
#X connect 13 0 19 7;
#X connect 14 0 19 8;
#X connect 15 0 1 0;
#X connect 18 0 1 1;
#X connect 19 0 0 1;
#X connect 19 0 11 0;
#X connect 20 0 37 0;
#X connect 20 0 39 0;
#X connect 23 0 10 0;
#X connect 24 0 23 1;
#X connect 27 0 19 4;
#X connect 28 0 19 5;
#X connect 29 0 19 6;
#X connect 30 0 19 9;
#X connect 31 0 19 10;
#X connect 32 0 19 3;
#X connect 33 0 19 1;
#X connect 34 0 19 2;
#X connect 35 0 20 2;
#X connect 36 0 5 1;
#X connect 37 0 39 1;
#X connect 39 0 23 0;
#X connect 39 0 3 0;
#X connect 41 0 37 1;
#X connect 42 0 39 2;
#X restore 161 458 pd main-signal-flow;
#N canvas 673 282 616 349 input-mix 0;
#X obj 129 49 inlet~;
#X obj 61 49 inlet~;
#X text 61 23 IN~;
#X text 129 23 IN 2~;
#X obj 198 219 r~ \$0-input2-mix-cv~;
#X text 206 250 Input2 Crossfader;
#X text 151 94 Polarity inversion;
#X obj 129 126 expr~ $v1 * copysign(1 \, $v2);
#X obj 61 308 outlet~;
#X obj 61 250 crossfader~, f 20;
#X obj 322 95 r~ \$0-input2-inv-switch-cv~;
#X connect 0 0 7 0;
#X connect 1 0 9 0;
#X connect 4 0 9 2;
#X connect 7 0 9 1;
#X connect 9 0 8 0;
#X connect 10 0 7 1;
#X restore 449 126 pd input-mix;
#X f 16;
#N canvas 0 25 1349 903 display-control 0;
#X obj 42 135 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000 0 1;
#X obj 42 187 s \$0-tick;
#X obj 256 366 snapshot~;
#X obj 483 361 snapshot~;
#X obj 266 335 r \$0-tick;
#X obj 494 332 r \$0-tick;
#X obj 258 544 snapshot~;
#X obj 248 821 snapshot~;
#X obj 258 789 r \$0-tick;
#X obj 268 518 r \$0-tick;
#X obj 254 108 snapshot~;
#X obj 264 79 r \$0-tick;
#X obj 254 137 s \$0-input2-mix-display;
#X obj 254 50 r~ \$0-input2-mix-cv~;
#X obj 256 309 r~ \$0-attack-cv~;
#X obj 483 305 r~ \$0-decay-cv~;
#X obj 448 104 snapshot~;
#X obj 458 78 r \$0-tick;
#X obj 483 417 expr 1000 / $f1;
#X obj 256 422 expr 1000 / $f1;
#X obj 276 395 s \$0-attack-display-hz;
#X obj 503 390 s \$0-decay-display-hz;
#X obj 256 455 s \$0-attack-display-ms;
#X obj 483 450 s \$0-decay-display-ms;
#X obj 669 106 snapshot~;
#X obj 679 80 r \$0-tick;
#X obj 695 377 snapshot~;
#X obj 705 351 r \$0-tick;
#X obj 485 549 snapshot~;
#X obj 495 520 r \$0-tick;
#X obj 486 825 snapshot~;
#X obj 496 793 r \$0-tick;
#X obj 486 858 s \$0-output-gain-display;
#X obj 486 766 r~ \$0-output-gain-cv~;
#X obj 248 762 r~ \$0-send-gain-cv~;
#X obj 248 854 s \$0-send-gain-display;
#X obj 448 50 r~ \$0-pre-gain-cv~;
#X obj 448 134 s \$0-pre-gain-display;
#X obj 695 323 r~ \$0-reshape-cv~;
#X obj 695 407 s \$0-reshape-display;
#X obj 485 491 r~ \$0-vca-mix-cv~;
#X obj 485 578 s \$0-vca-mix-display;
#X obj 258 490 r~ \$0-attenuverter-cv~;
#X obj 258 574 s \$0-attenuverter-display;
#X obj 255 241 snapshot~;
#X obj 265 215 r \$0-tick;
#X obj 669 52 r~ \$0-clip-silence-cv~;
#X obj 669 136 s \$0-clip-silence-display;
#X obj 477 219 snapshot~;
#X obj 487 193 r \$0-tick;
#X obj 477 165 r~ \$0-threshold-cv~;
#X obj 477 269 s \$0-threshold-display;
#X obj 659 222 snapshot~;
#X obj 669 196 r \$0-tick;
#X obj 659 168 r~ \$0-ratio-cv~;
#X obj 659 272 s \$0-ratio-display;
#X obj 809 222 snapshot~;
#X obj 819 196 r \$0-tick;
#X obj 809 168 r~ \$0-knee-cv~;
#X obj 809 272 s \$0-knee-display;
#X obj 255 187 r~ \$0-rfs-smooth-cv~;
#X obj 255 271 s \$0-rfs-smooth-display;
#X obj 253 682 snapshot~;
#X obj 263 650 r \$0-tick;
#X obj 485 679 snapshot~;
#X obj 495 650 r \$0-tick;
#X obj 253 623 r~ \$0-saturator-gain-cv~;
#X obj 253 715 s \$0-saturator-gain-display;
#X obj 485 621 r~ \$0-saturator-mix-cv~;
#X obj 485 708 s \$0-saturator-mix-display;
#X obj 834 499 r~ \$0-cv-in~;
#X obj 834 557 s \$0-cv-in-display;
#X obj 989 499 r~ \$0-env-out~;
#X obj 989 557 s \$0-env-out-display;
#X obj 1150 499 r~ \$0-main-out~;
#X obj 1150 557 s \$0-main-out-display;
#X obj 685 499 r~ \$0-in~;
#X obj 685 557 s \$0-in-display;
#X obj 834 528 vu~;
#X obj 1150 528 vu~;
#X obj 685 528 vu~;
#X obj 809 246 * 100;
#X obj 477 243 expr $f1 * 100 - 100;
#N canvas 735 172 959 688 pluck-and-duck-display 0;
#X obj 371 97 r~ \$0-threshold-cv~;
#X obj 385 121 r~ \$0-ratio-cv~;
#X obj 400 145 r~ \$0-knee-cv~;
#X obj 443 217 r~ \$0-reshape-cv~;
#X obj 457 241 r~ \$0-attenuverter-cv~;
#X obj 328 25 r~ \$0-pre-gain-cv~;
#X obj 342 49 r~ \$0-clip-silence-cv~;
#X obj 328 185 snapshot~;
#X obj 342 209 snapshot~;
#X obj 371 257 snapshot~;
#X obj 385 281 snapshot~;
#X obj 400 305 snapshot~;
#X obj 443 377 snapshot~;
#X obj 457 401 snapshot~;
#X obj 121 150 t b b;
#X obj 59 208 t b b;
#X msg 111 248 0;
#X obj 49 272 until;
#X msg 49 296 1;
#X obj 49 320 +;
#X obj 49 344 f;
#X obj 49 432 t f f;
#X obj 49 456 / 100;
#X obj 281 589 pack;
#X obj 121 86 r \$0-tick;
#X obj 49 368 - 1;
#N canvas 660 25 1033 455 pluck-and-duck-clone 0;
#X text 716 49 Decay Hz~;
#X text 626 49 Attack Hz~;
#X text 304 49 RFS Smooth~;
#X text 194 49 Clip Silence~;
#X text 114 49 Pre Gain~;
#X text 491 49 Ratio~;
#X text 404 49 Threshold~;
#X text 561 49 Knee~;
#X text 796 49 Re-Shape~;
#X obj 33 72 inlet;
#X obj 114 72 inlet;
#X obj 194 72 inlet;
#X obj 304 72 inlet;
#X obj 404 72 inlet;
#X obj 491 72 inlet;
#X obj 561 72 inlet;
#X obj 626 72 inlet;
#X obj 716 72 inlet;
#X obj 796 72 inlet;
#X obj 880 72 inlet;
#X obj 33 384 outlet;
#X obj 33 111 *;
#X obj 33 150 abs;
#X text 100 345 Clip for array display;
#X text 89 383 Amp Curve Out;
#X text 33 49 Amp Curve;
#N canvas 769 327 825 604 clip-silence 0;
#X text 33 49 AMP CV IN~;
#X text 401 49 AMP CV Threshold~;
#X obj 33 72 inlet;
#X obj 401 72 inlet;
#X obj 401 212 expr if($f1 > 0 \, $f1 * 99 + 1 \, 1 / (($f1 * -99)+1))
;
#X obj 33 337 outlet;
#X obj 33 273 expr max(0 \, $f1 * $f2 - $f2 + 1);
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 4 0 6 1;
#X connect 6 0 5 0;
#X restore 33 189 pd clip-silence;
#N canvas 554 217 538 353 soft-knee-compressor 0;
#X obj 34 37 inlet;
#X text 201 15 Ratio~;
#X text 114 15 Threshold~;
#X text 271 15 Knee~;
#X obj 114 37 inlet;
#X obj 201 37 inlet;
#X obj 271 37 inlet;
#X obj 33 122 expr if(2 * ($f1 - $f2) < -$f4 \, $f1 \, if(2 * abs(($f1
- $f2)) <= $f4 \, $f1 + (1 / $f3 - 1) * pow(($f1 - $f2 + $f4 / 2) \,
2) / (2 * $f4) \, $f2 + ($f1 - $f2) / $f3) );
#X obj 33 192 expr $f1 / ($f2 + (1 - $f2) / $f3);
#X text 34 15 Env;
#X obj 33 236 max 0;
#X obj 33 280 outlet;
#X connect 0 0 7 0;
#X connect 4 0 7 1;
#X connect 4 0 8 1;
#X connect 5 0 7 2;
#X connect 5 0 8 2;
#X connect 6 0 7 3;
#X connect 7 0 8 0;
#X connect 8 0 10 0;
#X connect 10 0 11 0;
#X restore 33 228 pd soft-knee-compressor;
#X f 31;
#N canvas 434 275 868 393 reshape 0;
#X text 33 49 AMP CV IN~;
#X text 401 49 AMP CV Shape~;
#X obj 33 72 inlet;
#X obj 401 72 inlet;
#X obj 401 212 expr if($f1 > 0 \, $f1 * 99 + 1 \, 1 / (($f1 * -99)+1))
;
#X obj 33 337 outlet;
#X obj 33 273 pow;
#X obj 33 297 max 0;
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 4 0 6 1;
#X connect 6 0 7 0;
#X connect 7 0 5 0;
#X restore 33 267 pd reshape;
#X f 31;
#N canvas 902 273 371 452 pnd-attenuverter 0;
#X text 221 326 pluck - positive;
#X text 56 326 duck - inverted;
#X obj 29 165 * -1;
#X obj 47 254 * -1;
#X obj 47 280 max 0;
#X obj 214 280 max 0;
#X obj 29 327 *;
#X obj 195 327 *;
#X obj 29 194 + 1;
#X obj 29 377 +;
#X obj 29 135 min 1;
#X obj 29 70 inlet;
#X text 29 47 Env In;
#X obj 146 70 inlet;
#X text 146 47 PND Attenuverter;
#X obj 29 411 outlet;
#X text 80 253 Amplify the positively flipped signal;
#X text 84 163 Invert in the positive domain;
#X obj 29 94 t f f;
#X connect 2 0 8 0;
#X connect 3 0 4 0;
#X connect 4 0 6 1;
#X connect 5 0 7 1;
#X connect 6 0 9 0;
#X connect 7 0 9 1;
#X connect 8 0 6 0;
#X connect 9 0 15 0;
#X connect 10 0 2 0;
#X connect 11 0 18 0;
#X connect 13 0 3 0;
#X connect 13 0 5 0;
#X connect 18 0 10 0;
#X connect 18 1 7 0;
#X restore 33 306 pd pnd-attenuverter;
#X f 31;
#X text 880 49 PND Attenuverter~;
#X obj 33 345 clip 0 1;
#X connect 9 0 21 0;
#X connect 10 0 21 1;
#X connect 11 0 26 1;
#X connect 13 0 27 1;
#X connect 14 0 27 2;
#X connect 15 0 27 3;
#X connect 18 0 28 1;
#X connect 19 0 29 1;
#X connect 21 0 22 0;
#X connect 22 0 26 0;
#X connect 26 0 27 0;
#X connect 27 0 28 0;
#X connect 28 0 29 0;
#X connect 29 0 31 0;
#X connect 31 0 20 0;
#X restore 314 549 pd pluck-and-duck-clone;
#X msg 49 248 100;
#X obj 281 631 tabwrite \$0-curve;
#X text 94 318 Count 0-99;
#X obj 583 135 s \$0-curve;
#X msg 583 97 xticks 0 10 5 \, yticks 0 0.1 5 \, width 2 \, edit 0
;
#X obj 583 52 r loadbang;
#X text 485 549 Same functions as pluck-and-duck-core but adjusted
to be used for the amplitude curve display so it does not contain the
time-domain functions (lowpass filter smoothing);
#X connect 0 0 9 0;
#X connect 1 0 10 0;
#X connect 2 0 11 0;
#X connect 3 0 12 0;
#X connect 4 0 13 0;
#X connect 5 0 7 0;
#X connect 6 0 8 0;
#X connect 7 0 26 1;
#X connect 8 0 26 2;
#X connect 9 0 26 4;
#X connect 10 0 26 5;
#X connect 11 0 26 6;
#X connect 12 0 26 9;
#X connect 13 0 26 10;
#X connect 14 0 15 0;
#X connect 14 1 7 0;
#X connect 14 1 8 0;
#X connect 14 1 9 0;
#X connect 14 1 10 0;
#X connect 14 1 11 0;
#X connect 14 1 12 0;
#X connect 14 1 13 0;
#X connect 15 0 16 0;
#X connect 15 1 27 0;
#X connect 16 0 19 1;
#X connect 17 0 18 0;
#X connect 18 0 19 0;
#X connect 19 0 20 0;
#X connect 20 0 19 1;
#X connect 20 0 25 0;
#X connect 21 0 22 0;
#X connect 21 1 23 1;
#X connect 22 0 26 0;
#X connect 23 0 28 0;
#X connect 24 0 14 0;
#X connect 25 0 21 0;
#X connect 26 0 23 0;
#X connect 27 0 17 0;
#X connect 31 0 30 0;
#X connect 32 0 31 0;
#X restore 28 422 pd pluck-and-duck-display;
#X obj 42 159 metro 100;
#N canvas 671 220 559 555 vu-peak~ 0;
#X obj 60 137 abs~;
#X obj 214 330 snapshot~;
#X obj 214 373 rmstodb;
#X obj 60 37 inlet~;
#X obj 214 405 - 100;
#X obj 102 414 - 100;
#X obj 102 488 outlet;
#X obj 292 206 expr 1000 / $f1;
#X floatatom 292 234 5 0 0 0 - - - 0;
#X obj 214 263 slop~ 0 0 0 0 1e+09;
#X obj 139 37 inlet;
#X floatatom 292 185 5 0 0 0 - - - 0;
#X text 412 206 convert to hz;
#X text 335 235 hz;
#X text 337 185 peak decay time in ms;
#X obj 102 438 pack;
#X obj 300 107 r loadbang;
#X obj 300 138 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X msg 301 162 10000;
#X obj 44 318 snapshot~;
#X obj 86 231 t b b;
#X obj 61 367 rmstodb;
#X obj 86 202 r \$0-tick;
#X connect 0 0 9 0;
#X connect 0 0 19 0;
#X connect 1 0 2 0;
#X connect 2 0 4 0;
#X connect 3 0 0 0;
#X connect 4 0 15 1;
#X connect 5 0 15 0;
#X connect 7 0 8 0;
#X connect 8 0 9 3;
#X connect 9 0 1 0;
#X connect 10 0 11 0;
#X connect 11 0 7 0;
#X connect 15 0 6 0;
#X connect 16 0 17 0;
#X connect 17 0 18 0;
#X connect 18 0 11 0;
#X connect 19 0 21 0;
#X connect 20 0 19 0;
#X connect 20 1 1 0;
#X connect 21 0 5 0;
#X connect 22 0 20 0;
#X restore 989 528 pd vu-peak~;
#X obj 127 159 switch~;
#X obj 42 107 r \$0-display-ui;
#X connect 0 0 84 0;
#X connect 0 0 86 0;
#X connect 2 0 20 0;
#X connect 2 0 19 0;
#X connect 3 0 21 0;
#X connect 3 0 18 0;
#X connect 4 0 2 0;
#X connect 5 0 3 0;
#X connect 6 0 43 0;
#X connect 7 0 35 0;
#X connect 8 0 7 0;
#X connect 9 0 6 0;
#X connect 10 0 12 0;
#X connect 11 0 10 0;
#X connect 13 0 10 0;
#X connect 14 0 2 0;
#X connect 15 0 3 0;
#X connect 16 0 37 0;
#X connect 17 0 16 0;
#X connect 18 0 23 0;
#X connect 19 0 22 0;
#X connect 24 0 47 0;
#X connect 25 0 24 0;
#X connect 26 0 39 0;
#X connect 27 0 26 0;
#X connect 28 0 41 0;
#X connect 29 0 28 0;
#X connect 30 0 32 0;
#X connect 31 0 30 0;
#X connect 33 0 30 0;
#X connect 34 0 7 0;
#X connect 36 0 16 0;
#X connect 38 0 26 0;
#X connect 40 0 28 0;
#X connect 42 0 6 0;
#X connect 44 0 61 0;
#X connect 45 0 44 0;
#X connect 46 0 24 0;
#X connect 48 0 82 0;
#X connect 49 0 48 0;
#X connect 50 0 48 0;
#X connect 52 0 55 0;
#X connect 53 0 52 0;
#X connect 54 0 52 0;
#X connect 56 0 81 0;
#X connect 57 0 56 0;
#X connect 58 0 56 0;
#X connect 60 0 44 0;
#X connect 62 0 67 0;
#X connect 63 0 62 0;
#X connect 64 0 69 0;
#X connect 65 0 64 0;
#X connect 66 0 62 0;
#X connect 68 0 64 0;
#X connect 70 0 78 0;
#X connect 72 0 85 0;
#X connect 74 0 79 0;
#X connect 76 0 80 0;
#X connect 78 0 71 0;
#X connect 79 0 75 0;
#X connect 80 0 77 0;
#X connect 81 0 59 0;
#X connect 82 0 51 0;
#X connect 84 0 1 0;
#X connect 85 0 73 0;
#X connect 87 0 0 0;
#X restore 161 515 pd display-control;
#X obj 1074 32 inlet~;
#X text 1943 6 Slew Attack~;
#X text 2072 6 Slew Decay~;
#X text 1074 6 AMP CV Pre Gain~;
#X obj 1553 32 inlet~;
#X text 1553 6 AMP CV Threshold~;
#X obj 2358 32 inlet~;
#X obj 3329 32 inlet~;
#X text 3329 6 Output Gain~;
#X obj 3329 60 s~ \$0-output-gain-in~;
#X text 3179 6 Send Gain~;
#X obj 3179 60 s~ \$0-send-gain-in~;
#X obj 2658 32 inlet~;
#X floatatom 626 486 5 0 0 0 - \$0-threshold-ui \$0-threshold-cv 0
;
#X floatatom 664 486 7 0 0 0 - \$0-threshold-display - 0;
#X obj 443 667 hsl 180 15 -1 1 0 0 \$0-reshape-ui \$0-reshape-in ReShape
-2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X floatatom 625 667 5 0 10 0 - \$0-reshape-ui \$0-reshape-cv 0;
#X floatatom 663 667 7 0 0 0 - \$0-reshape-display - 0;
#X obj 443 727 hsl 180 15 0 1 0 0 \$0-vca-mix-ui \$0-vca-mix-in VCA\\\ Dry/Wet\\\ Mix
-2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X floatatom 625 727 5 0 0 0 - \$0-vca-mix-ui \$0-vca-mix-cv 0;
#X floatatom 663 727 7 0 0 0 - \$0-vca-mix-display - 0;
#X text 2658 6 VCA Dry / Wet Mix~;
#X obj 443 817 hsl 180 15 0 1 0 0 \$0-send-gain-ui \$0-send-gain-in
Send\\\ Gain -2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X floatatom 625 817 5 0 1 0 - \$0-send-gain-ui \$0-send-gain-cv 0
;
#X floatatom 663 817 7 0 0 0 - \$0-send-gain-display - 0;
#X obj 443 487 hsl 180 15 0 1 0 0 \$0-threshold-ui \$0-threshold-in
Threshold -2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 440 32 inlet~;
#X text 659 6 AMP CV In~;
#X text 440 6 Input 1~;
#X text 558 6 Input 2~;
#X obj 106 32 inlet~;
#X obj 1279 299 outlet~;
#X obj 279 32 inlet~;
#X obj 283 299 outlet~;
#N canvas 829 234 834 419 default-cv-to-input-mix 0;
#X obj 63 161 inlet~;
#X obj 171 161 inlet~;
#X obj 64 245 expr~ if ($v2 == $f3 \, $v1 \, $v2);
#X obj 232 347 outlet;
#X obj 231 34 r loadbang;
#X msg 232 66 -1e+06;
#X obj 232 97 t f f, f 7;
#X obj 66 347 outlet~;
#X text 232 325 To main inlet in parent patch;
#X text 63 135 Default Inlet~;
#X text 171 135 Main Inlet~;
#X text 291 57 Send a very large negative number out the main inlet
when no signal is plugged into it and detect that number here to switch
to Default Inlet~ instead;
#X text 294 245 Connect Default Inlet~ to Main Inlet~ if no cable is
plugged into Main Inlet~, f 61;
#X connect 0 0 2 0;
#X connect 1 0 2 1;
#X connect 2 0 7 0;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X connect 6 0 3 0;
#X connect 6 1 2 2;
#X restore 525 156 pd default-cv-to-input-mix;
#X f 31;
#X obj 116 160 r~ \$0-main-out~;
#X text 760 863 Env~;
#X text 674 863 Send~;
#X obj 107 186 s~ \$0-output-chain-out~;
#X text 106 6 Output Chain In~;
#X text 279 6 Input Chain In~;
#N canvas 829 234 834 419 default-input1-to-input-chain-in 0;
#X obj 63 161 inlet~;
#X obj 171 161 inlet~;
#X obj 64 245 expr~ if ($v2 == $f3 \, $v1 \, $v2);
#X obj 232 347 outlet;
#X obj 231 34 r loadbang;
#X msg 232 66 -1e+06;
#X obj 232 97 t f f, f 7;
#X obj 66 347 outlet~;
#X text 232 325 To main inlet in parent patch;
#X text 63 135 Default Inlet~;
#X text 171 135 Main Inlet~;
#X text 291 57 Send a very large negative number out the main inlet
when no signal is plugged into it and detect that number here to switch
to Default Inlet~ instead;
#X text 294 245 Connect Default Inlet~ to Main Inlet~ if no cable is
plugged into Main Inlet~, f 61;
#X connect 0 0 2 0;
#X connect 1 0 2 1;
#X connect 2 0 7 0;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X connect 6 0 3 0;
#X connect 6 1 2 2;
#X restore 239 87 pd default-input1-to-input-chain-in;
#X obj 1279 271 r~ \$0-output-chain-out~;
#X text 303 245 Input Chain Out~;
#X text 793 863 OutChain~;
#X text 499 863 InChain~;
#N canvas 124 25 1796 978 cv-conditioning 0;
#X obj 405 358 line~;
#X msg 405 331 \$1 5;
#X obj 542 358 line~;
#X msg 542 331 \$1 5;
#X obj 682 358 line~;
#X msg 682 331 \$1 5;
#X obj 376 411 expr~ mtof($v1 * -60) * mtof($v3 * -60) \; mtof($v2
* -60) * mtof($v3 * -60) \;;
#X obj 373 262 r~ \$0-attack-in~;
#X obj 511 262 r~ \$0-decay-in~;
#X obj 377 464 s~ \$0-attack-cv~;
#X obj 654 468 s~ \$0-decay-cv~;
#X obj 405 292 r \$0-attack-cv;
#X obj 542 298 r \$0-decay-cv;
#X obj 1035 878 line~;
#X msg 724 854 -1;
#X obj 724 824 route 1 0;
#X msg 755 854 1;
#X obj 1035 821 == 0;
#X obj 1035 793 r \$0-mute-switch-cv;
#X obj 1035 906 s~ \$0-mute-switch-cv~;
#X msg 57 845 -1;
#X obj 57 815 route 1 0;
#X msg 88 845 1;
#X obj 324 114 line~;
#X msg 324 87 \$1 5;
#X obj 1479 621 line~;
#X msg 1479 595 \$1 5;
#X obj 307 142 +~;
#X obj 1461 649 +~;
#X obj 1459 541 r~ \$0-output-gain-in~;
#X obj 1461 725 s~ \$0-output-gain-cv~;
#X msg 73 94 \$1 10;
#X obj 73 117 line~;
#X obj 55 144 +~;
#X obj 54 20 r~ \$0-input2-mix-in~;
#X obj 73 58 r \$0-input2-mix-cv;
#X obj 55 178 s~ \$0-input2-mix-cv~;
#X obj 1479 567 r \$0-output-gain-cv;
#X obj 49 613 line~;
#X msg 49 586 \$1 5;
#X obj 32 641 +~;
#X obj 1091 111 line~;
#X msg 1091 84 \$1 5;
#X obj 1074 139 +~;
#X obj 1097 372 line~;
#X msg 1097 345 \$1 5;
#X obj 1080 400 +~;
#X obj 1235 612 line~;
#X msg 1235 586 \$1 5;
#X obj 1217 640 +~;
#X obj 1215 532 r~ \$0-send-gain-in~;
#X obj 1235 558 r \$0-send-gain-cv;
#X obj 1217 726 s~ \$0-send-gain-cv~;
#X obj 441 621 line~;
#X obj 423 648 +~;
#X obj 1461 685 expr~ dbtorms($v1*100)*10;
#X obj 307 178 expr~ dbtorms($v1*100)*10;
#X obj 1217 685 expr~ dbtorms($v1*100)*10;
#X obj 1080 435 expr~ copysign(dbtorms(abs($v1 * 100)) \, $v1);
#X msg 1035 850 \$1 50;
#X msg 441 598 \$1 5;
#X obj 724 909 line~;
#X msg 724 881 \$1 50;
#X obj 57 907 line~;
#X msg 57 879 \$1 50;
#X text 1278 828 Pure Data Connections IN -> UI slider -> Number box
-> CV + Physical Connections IN~ = CV~ -> Wider display number boxes.
UI objects (sending non-tilde ~ -cv variables) add or remove an offset
from the incoming CV~ signals;
#X obj 305 20 r~ \$0-pre-gain-in~;
#X obj 324 57 r \$0-pre-gain-cv;
#X obj 307 210 s~ \$0-pre-gain-cv~;
#X obj 547 111 line~;
#X msg 547 84 \$1 5;
#X obj 530 139 +~;
#X obj 530 174 expr~ copysign(dbtorms(abs($v1 * 100)) \, $v1);
#X obj 528 17 r~ \$0-clip-silence-in~;
#X obj 530 207 s~ \$0-clip-silence-cv~;
#X obj 896 111 line~;
#X msg 896 84 \$1 5;
#X obj 879 139 +~;
#X obj 547 54 r \$0-clip-silence-cv;
#X obj 877 17 r~ \$0-rfs-smooth-in~;
#X obj 896 54 r \$0-rfs-smooth-cv;
#X obj 879 207 s~ \$0-rfs-smooth-cv~;
#X obj 1072 17 r~ \$0-threshold-in~;
#X obj 1091 54 r \$0-threshold-cv;
#X obj 1074 207 s~ \$0-threshold-cv~;
#X obj 651 262 r~ \$0-attack-decay-in~;
#X obj 1078 278 r~ \$0-reshape-in~;
#X obj 1097 315 r \$0-reshape-cv;
#X obj 1080 468 s~ \$0-reshape-cv~;
#X obj 30 519 r~ \$0-attenuverter-in~;
#X obj 49 556 r \$0-attenuverter-cv;
#X obj 32 709 s~ \$0-attenuverter-cv~;
#X obj 422 524 r~ \$0-vca-mix-in~;
#X obj 441 562 r \$0-vca-mix-cv;
#X obj 423 682 s~ \$0-vca-mix-cv~;
#X obj 57 781 r \$0-input2-inv-switch-cv;
#X obj 57 939 s~ \$0-input2-inv-switch-cv~;
#X obj 724 790 r \$0-wet-inv-switch-cv;
#X obj 724 938 s~ \$0-wet-inv-switch-cv~;
#X obj 1345 112 line~;
#X msg 1345 85 \$1 5;
#X obj 1328 140 +~;
#X obj 1326 18 r~ \$0-ratio-in~;
#X obj 1345 55 r \$0-ratio-cv;
#X obj 1328 208 s~ \$0-ratio-cv~;
#X obj 113 349 line~;
#X msg 113 322 \$1 5;
#X obj 96 377 +~;
#X obj 94 255 r~ \$0-knee-in~;
#X obj 113 292 r \$0-knee-cv;
#X obj 96 445 s~ \$0-knee-cv~;
#X obj 682 298 r \$0-attack-decay-cv;
#X obj 910 617 line~;
#X obj 892 644 +~;
#X msg 910 594 \$1 5;
#X obj 692 591 line~;
#X msg 692 565 \$1 5;
#X obj 674 619 +~;
#X obj 672 511 r~ \$0-saturator-gain-in~;
#X obj 692 537 r \$0-saturator-gain-cv;
#X obj 674 705 s~ \$0-saturator-gain-cv~;
#X obj 891 520 r~ \$0-saturator-mix-in~;
#X obj 910 558 r \$0-saturator-mix-cv;
#X obj 892 678 s~ \$0-saturator-mix-cv~;
#X obj 674 664 expr~ dbtorms($v1*100)*100;
#X obj 879 174 expr~ mtof($v1 * -60 + 12);
#X obj 32 675 expr~ copysign(dbtorms(abs($v1*100)) \, $v1) * 10;
#X obj 1328 169 expr~ if($v1 < 0 \, 1 / (1 + 99 * pow($v1 \, 4)) \,
1 + 99 * pow($v1 \, 4));
#X obj 1074 176 expr~ 1-pow(1-$v1 \, 4);
#X obj 96 414 expr~ pow($v1 \, 1.5);
#X connect 0 0 6 0;
#X connect 1 0 0 0;
#X connect 2 0 6 1;
#X connect 3 0 2 0;
#X connect 4 0 6 2;