├── .gitignore ├── README.md ├── icon.png ├── package-info.json ├── patchers ├── controls_view.maxpat ├── fc.allpass.gendsp ├── fc.bell.gendsp ├── fc.comb.gendsp ├── fc.diode.gendsp ├── fc.hishelf.gendsp ├── fc.k35hp.gendsp ├── fc.k35lp.gendsp ├── fc.ladder.gendsp ├── fc.loshelf.gendsp ├── fc.onepole.gendsp ├── fc.reson.gendsp ├── fc.svf-as.gendsp ├── fc.svf-eg.gendsp ├── fc.zdf-onepole.gendsp ├── fc.zdf-svf.gendsp └── filter-collection.maxpat └── src └── filters.genexpr /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Gen Filters 2 | A collection of audio filters ported to gen~ in Max 8 3 | 4 | Move or copy the folder *gen-filters*, including all of its content, into your *Documents/Max 8/Packages* folder, and restart Max. This is necessary so that the various fc.* abstractions are available to all gen~ patchers. 5 | 6 | --- 7 | 8 | ### Filter types 9 | * One-pole (highpass, lowpass) 10 | * Variable delay allpass 11 | * Feedback/forward comb 12 | * Reson 13 | * ZDF one-pole (highpass, lowpass) 14 | * ZDF two-pole (highpass, lowpass, bandpass, notch, peak, allpass) 15 | * ZDF Korg 35 (lowpass) 16 | * ZDF Korg 35 (highpass) 17 | * ZDF ladder (lowpass) 18 | * ZDF diode (lowpass) 19 | * Émilie Gillet SVF (lowpass, highpass, bandpass) 20 | * Andrew Simper SVF (highpass, lowpass, bandpass, notch, peak, allpass) 21 | * Bell EQ 22 | * High shelf EQ 23 | * Low shelf EQ -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ess-m/gen-filters/6f90e22300f56d0297c699874d363a59b5f102ec/icon.png -------------------------------------------------------------------------------- /package-info.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : "Ess", 3 | "description" : "A collection of audio filters in Gen~", 4 | "displayname" : "", 5 | "extends" : "", 6 | "extensible" : 1, 7 | "homepatcher" : "filter-collection.maxpat", 8 | "name" : "gen-filters", 9 | "os" : { 10 | "macintosh" : { 11 | "platform" : [ "ia32", "x64" ], 12 | "min_version" : "none" 13 | }, 14 | "windows" : { 15 | "platform" : [ "ia32", "x64" ], 16 | "min_version" : "none" 17 | } 18 | }, 19 | "package_extra" : {}, 20 | "readme": "README.md", 21 | "tags" : [ "Gen~", "DSP", "Filter" ], 22 | "version" : "1.0.0", 23 | "website" : "http://mtsn.se" 24 | } 25 | -------------------------------------------------------------------------------- /patchers/controls_view.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 504.0, 100.0, 658.0, 848.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 1, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-17", 44 | "maxclass" : "newobj", 45 | "numinlets" : 2, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "int" ], 48 | "patching_rect" : [ 189.0, 531.0, 29.5, 22.0 ], 49 | "text" : "+ 1" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-8", 56 | "maxclass" : "live.tab", 57 | "num_lines_patching" : 2, 58 | "num_lines_presentation" : 2, 59 | "numinlets" : 1, 60 | "numoutlets" : 3, 61 | "outlettype" : [ "", "", "float" ], 62 | "parameter_enable" : 1, 63 | "patching_rect" : [ 189.0, 445.0, 30.0, 48.0 ], 64 | "presentation" : 1, 65 | "presentation_rect" : [ 165.0, 396.0, 27.0, 48.0 ], 66 | "saved_attribute_attributes" : { 67 | "valueof" : { 68 | "parameter_enum" : [ "LP", "HP" ], 69 | "parameter_longname" : "live.tab[13]", 70 | "parameter_mmax" : 1, 71 | "parameter_shortname" : "live.tab", 72 | "parameter_type" : 2, 73 | "parameter_unitstyle" : 9 74 | } 75 | 76 | } 77 | , 78 | "varname" : "live.tab[5]" 79 | } 80 | 81 | } 82 | , { 83 | "box" : { 84 | "id" : "obj-214", 85 | "maxclass" : "newobj", 86 | "numinlets" : 2, 87 | "numoutlets" : 2, 88 | "outlettype" : [ "bang", "" ], 89 | "patching_rect" : [ 1134.0, 1214.0, 41.0, 22.0 ], 90 | "text" : "sel 14" 91 | } 92 | 93 | } 94 | , { 95 | "box" : { 96 | "id" : "obj-215", 97 | "maxclass" : "newobj", 98 | "numinlets" : 0, 99 | "numoutlets" : 1, 100 | "outlettype" : [ "" ], 101 | "patching_rect" : [ 1134.0, 1180.0, 39.0, 22.0 ], 102 | "text" : "r type" 103 | } 104 | 105 | } 106 | , { 107 | "box" : { 108 | "id" : "obj-206", 109 | "maxclass" : "message", 110 | "numinlets" : 2, 111 | "numoutlets" : 1, 112 | "outlettype" : [ "" ], 113 | "patching_rect" : [ 1365.25, 1247.0, 29.5, 22.0 ], 114 | "text" : "1" 115 | } 116 | 117 | } 118 | , { 119 | "box" : { 120 | "id" : "obj-207", 121 | "maxclass" : "newobj", 122 | "numinlets" : 1, 123 | "numoutlets" : 0, 124 | "patching_rect" : [ 1365.25, 1372.0, 51.0, 22.0 ], 125 | "text" : "s output" 126 | } 127 | 128 | } 129 | , { 130 | "box" : { 131 | "id" : "obj-208", 132 | "maxclass" : "message", 133 | "numinlets" : 2, 134 | "numoutlets" : 1, 135 | "outlettype" : [ "" ], 136 | "patching_rect" : [ 1291.0, 1334.0, 48.0, 22.0 ], 137 | "text" : "gain $1" 138 | } 139 | 140 | } 141 | , { 142 | "box" : { 143 | "id" : "obj-209", 144 | "maxclass" : "newobj", 145 | "numinlets" : 1, 146 | "numoutlets" : 0, 147 | "patching_rect" : [ 1291.0, 1372.0, 52.0, 22.0 ], 148 | "text" : "s param" 149 | } 150 | 151 | } 152 | , { 153 | "box" : { 154 | "id" : "obj-210", 155 | "maxclass" : "message", 156 | "numinlets" : 2, 157 | "numoutlets" : 1, 158 | "outlettype" : [ "" ], 159 | "patching_rect" : [ 1222.0, 1334.0, 32.0, 22.0 ], 160 | "text" : "q $1" 161 | } 162 | 163 | } 164 | , { 165 | "box" : { 166 | "id" : "obj-211", 167 | "maxclass" : "newobj", 168 | "numinlets" : 1, 169 | "numoutlets" : 0, 170 | "patching_rect" : [ 1222.0, 1372.0, 52.0, 22.0 ], 171 | "text" : "s param" 172 | } 173 | 174 | } 175 | , { 176 | "box" : { 177 | "id" : "obj-212", 178 | "maxclass" : "message", 179 | "numinlets" : 2, 180 | "numoutlets" : 1, 181 | "outlettype" : [ "" ], 182 | "patching_rect" : [ 1134.0, 1334.0, 54.0, 22.0 ], 183 | "text" : "cutoff $1" 184 | } 185 | 186 | } 187 | , { 188 | "box" : { 189 | "id" : "obj-213", 190 | "maxclass" : "newobj", 191 | "numinlets" : 1, 192 | "numoutlets" : 0, 193 | "patching_rect" : [ 1134.0, 1372.0, 52.0, 22.0 ], 194 | "text" : "s param" 195 | } 196 | 197 | } 198 | , { 199 | "box" : { 200 | "id" : "obj-200", 201 | "maxclass" : "live.dial", 202 | "numinlets" : 1, 203 | "numoutlets" : 2, 204 | "outlettype" : [ "", "float" ], 205 | "parameter_enable" : 1, 206 | "patching_rect" : [ 1291.0, 1247.0, 27.0, 54.0 ], 207 | "presentation" : 1, 208 | "presentation_rect" : [ 175.0, 1717.0, 35.0, 54.0 ], 209 | "saved_attribute_attributes" : { 210 | "valueof" : { 211 | "parameter_initial" : [ 0 ], 212 | "parameter_initial_enable" : 1, 213 | "parameter_longname" : "Gain[3]", 214 | "parameter_mmax" : 30.0, 215 | "parameter_mmin" : -30.0, 216 | "parameter_shortname" : "Gain", 217 | "parameter_type" : 0, 218 | "parameter_unitstyle" : 4 219 | } 220 | 221 | } 222 | , 223 | "triangle" : 1, 224 | "varname" : "fdbk[1]" 225 | } 226 | 227 | } 228 | , { 229 | "box" : { 230 | "id" : "obj-201", 231 | "maxclass" : "live.dial", 232 | "numinlets" : 1, 233 | "numoutlets" : 2, 234 | "outlettype" : [ "", "float" ], 235 | "parameter_enable" : 1, 236 | "patching_rect" : [ 1214.0, 1247.0, 27.0, 48.0 ], 237 | "presentation" : 1, 238 | "presentation_rect" : [ 133.0, 1723.0, 39.0, 48.0 ], 239 | "saved_attribute_attributes" : { 240 | "valueof" : { 241 | "parameter_exponent" : 3.0, 242 | "parameter_initial" : [ 0 ], 243 | "parameter_initial_enable" : 1, 244 | "parameter_longname" : "Q[3]", 245 | "parameter_mmax" : 100.0, 246 | "parameter_shortname" : "Q", 247 | "parameter_type" : 0, 248 | "parameter_unitstyle" : 5 249 | } 250 | 251 | } 252 | , 253 | "varname" : "q[3]" 254 | } 255 | 256 | } 257 | , { 258 | "box" : { 259 | "appearance" : 3, 260 | "id" : "obj-202", 261 | "maxclass" : "live.dial", 262 | "numinlets" : 1, 263 | "numoutlets" : 2, 264 | "outlettype" : [ "", "float" ], 265 | "parameter_enable" : 1, 266 | "patching_rect" : [ 1134.0, 1247.0, 50.0, 63.0 ], 267 | "presentation" : 1, 268 | "presentation_rect" : [ 80.0, 1708.0, 50.0, 63.0 ], 269 | "saved_attribute_attributes" : { 270 | "valueof" : { 271 | "parameter_exponent" : 4.0, 272 | "parameter_initial" : [ 1000.0 ], 273 | "parameter_initial_enable" : 1, 274 | "parameter_longname" : "Cutoff[20]", 275 | "parameter_mmax" : 20000.0, 276 | "parameter_shortname" : "Cutoff", 277 | "parameter_type" : 0, 278 | "parameter_unitstyle" : 3 279 | } 280 | 281 | } 282 | , 283 | "varname" : "cutoff[14]" 284 | } 285 | 286 | } 287 | , { 288 | "box" : { 289 | "id" : "obj-199", 290 | "maxclass" : "newobj", 291 | "numinlets" : 2, 292 | "numoutlets" : 1, 293 | "outlettype" : [ "int" ], 294 | "patching_rect" : [ 248.0, 1334.0, 29.5, 22.0 ], 295 | "text" : "+ 1" 296 | } 297 | 298 | } 299 | , { 300 | "box" : { 301 | "id" : "obj-198", 302 | "maxclass" : "live.tab", 303 | "num_lines_patching" : 3, 304 | "num_lines_presentation" : 3, 305 | "numinlets" : 1, 306 | "numoutlets" : 3, 307 | "outlettype" : [ "", "", "float" ], 308 | "parameter_enable" : 1, 309 | "patching_rect" : [ 248.0, 1251.5, 49.0, 59.0 ], 310 | "presentation" : 1, 311 | "presentation_rect" : [ 165.0, 1348.0, 53.0, 63.0 ], 312 | "saved_attribute_attributes" : { 313 | "valueof" : { 314 | "parameter_enum" : [ "LP", "HP", "BP", "N", "P", "AP" ], 315 | "parameter_longname" : "live.tab[12]", 316 | "parameter_mmax" : 5, 317 | "parameter_shortname" : "live.tab", 318 | "parameter_type" : 2, 319 | "parameter_unitstyle" : 9 320 | } 321 | 322 | } 323 | , 324 | "varname" : "live.tab[1]" 325 | } 326 | 327 | } 328 | , { 329 | "box" : { 330 | "id" : "obj-197", 331 | "maxclass" : "message", 332 | "numinlets" : 2, 333 | "numoutlets" : 1, 334 | "outlettype" : [ "" ], 335 | "patching_rect" : [ 238.5, 997.0, 29.5, 22.0 ], 336 | "text" : "1" 337 | } 338 | 339 | } 340 | , { 341 | "box" : { 342 | "id" : "obj-193", 343 | "maxclass" : "message", 344 | "numinlets" : 2, 345 | "numoutlets" : 1, 346 | "outlettype" : [ "" ], 347 | "patching_rect" : [ 896.0, 805.0, 45.0, 22.0 ], 348 | "text" : "satr $1" 349 | } 350 | 351 | } 352 | , { 353 | "box" : { 354 | "id" : "obj-194", 355 | "maxclass" : "newobj", 356 | "numinlets" : 1, 357 | "numoutlets" : 0, 358 | "patching_rect" : [ 896.0, 843.0, 52.0, 22.0 ], 359 | "text" : "s param" 360 | } 361 | 362 | } 363 | , { 364 | "box" : { 365 | "id" : "obj-192", 366 | "maxclass" : "live.dial", 367 | "numinlets" : 1, 368 | "numoutlets" : 2, 369 | "outlettype" : [ "", "float" ], 370 | "parameter_enable" : 1, 371 | "patching_rect" : [ 888.0, 705.0, 27.0, 48.0 ], 372 | "presentation" : 1, 373 | "presentation_rect" : [ 169.0, 1003.0, 39.0, 48.0 ], 374 | "saved_attribute_attributes" : { 375 | "valueof" : { 376 | "parameter_exponent" : 4.0, 377 | "parameter_initial" : [ 0 ], 378 | "parameter_initial_enable" : 1, 379 | "parameter_longname" : "Resonance[8]", 380 | "parameter_mmax" : 100.0, 381 | "parameter_shortname" : "Sat", 382 | "parameter_type" : 0, 383 | "parameter_unitstyle" : 5 384 | } 385 | 386 | } 387 | , 388 | "varname" : "reso[8]" 389 | } 390 | 391 | } 392 | , { 393 | "box" : { 394 | "id" : "obj-188", 395 | "maxclass" : "newobj", 396 | "numinlets" : 1, 397 | "numoutlets" : 0, 398 | "patching_rect" : [ 248.0, 1372.0, 51.0, 22.0 ], 399 | "text" : "s output" 400 | } 401 | 402 | } 403 | , { 404 | "box" : { 405 | "id" : "obj-185", 406 | "maxclass" : "message", 407 | "numinlets" : 2, 408 | "numoutlets" : 1, 409 | "outlettype" : [ "" ], 410 | "patching_rect" : [ 669.25, 1257.0, 29.5, 22.0 ], 411 | "text" : "1" 412 | } 413 | 414 | } 415 | , { 416 | "box" : { 417 | "id" : "obj-186", 418 | "maxclass" : "newobj", 419 | "numinlets" : 1, 420 | "numoutlets" : 0, 421 | "patching_rect" : [ 669.25, 1372.0, 51.0, 22.0 ], 422 | "text" : "s output" 423 | } 424 | 425 | } 426 | , { 427 | "box" : { 428 | "id" : "obj-183", 429 | "maxclass" : "message", 430 | "numinlets" : 2, 431 | "numoutlets" : 1, 432 | "outlettype" : [ "" ], 433 | "patching_rect" : [ 987.25, 1257.0, 29.5, 22.0 ], 434 | "text" : "1" 435 | } 436 | 437 | } 438 | , { 439 | "box" : { 440 | "id" : "obj-184", 441 | "maxclass" : "newobj", 442 | "numinlets" : 1, 443 | "numoutlets" : 0, 444 | "patching_rect" : [ 987.25, 1372.0, 51.0, 22.0 ], 445 | "text" : "s output" 446 | } 447 | 448 | } 449 | , { 450 | "box" : { 451 | "id" : "obj-181", 452 | "maxclass" : "newobj", 453 | "numinlets" : 2, 454 | "numoutlets" : 2, 455 | "outlettype" : [ "bang", "" ], 456 | "patching_rect" : [ 756.0, 1214.0, 41.0, 22.0 ], 457 | "text" : "sel 13" 458 | } 459 | 460 | } 461 | , { 462 | "box" : { 463 | "id" : "obj-182", 464 | "maxclass" : "newobj", 465 | "numinlets" : 0, 466 | "numoutlets" : 1, 467 | "outlettype" : [ "" ], 468 | "patching_rect" : [ 756.0, 1180.0, 39.0, 22.0 ], 469 | "text" : "r type" 470 | } 471 | 472 | } 473 | , { 474 | "box" : { 475 | "id" : "obj-178", 476 | "maxclass" : "newobj", 477 | "numinlets" : 2, 478 | "numoutlets" : 2, 479 | "outlettype" : [ "bang", "" ], 480 | "patching_rect" : [ 435.0, 1214.0, 41.0, 22.0 ], 481 | "text" : "sel 12" 482 | } 483 | 484 | } 485 | , { 486 | "box" : { 487 | "id" : "obj-179", 488 | "maxclass" : "newobj", 489 | "numinlets" : 0, 490 | "numoutlets" : 1, 491 | "outlettype" : [ "" ], 492 | "patching_rect" : [ 435.0, 1180.0, 39.0, 22.0 ], 493 | "text" : "r type" 494 | } 495 | 496 | } 497 | , { 498 | "box" : { 499 | "id" : "obj-176", 500 | "maxclass" : "newobj", 501 | "numinlets" : 2, 502 | "numoutlets" : 2, 503 | "outlettype" : [ "bang", "" ], 504 | "patching_rect" : [ 91.0, 1214.0, 40.0, 22.0 ], 505 | "text" : "sel 11" 506 | } 507 | 508 | } 509 | , { 510 | "box" : { 511 | "id" : "obj-177", 512 | "maxclass" : "newobj", 513 | "numinlets" : 0, 514 | "numoutlets" : 1, 515 | "outlettype" : [ "" ], 516 | "patching_rect" : [ 91.0, 1180.0, 39.0, 22.0 ], 517 | "text" : "r type" 518 | } 519 | 520 | } 521 | , { 522 | "box" : { 523 | "id" : "obj-174", 524 | "maxclass" : "newobj", 525 | "numinlets" : 2, 526 | "numoutlets" : 2, 527 | "outlettype" : [ "bang", "" ], 528 | "patching_rect" : [ 353.0, 951.0, 41.0, 22.0 ], 529 | "text" : "sel 10" 530 | } 531 | 532 | } 533 | , { 534 | "box" : { 535 | "id" : "obj-175", 536 | "maxclass" : "newobj", 537 | "numinlets" : 0, 538 | "numoutlets" : 1, 539 | "outlettype" : [ "" ], 540 | "patching_rect" : [ 353.0, 917.0, 39.0, 22.0 ], 541 | "text" : "r type" 542 | } 543 | 544 | } 545 | , { 546 | "box" : { 547 | "id" : "obj-172", 548 | "maxclass" : "newobj", 549 | "numinlets" : 2, 550 | "numoutlets" : 2, 551 | "outlettype" : [ "bang", "" ], 552 | "patching_rect" : [ 91.0, 951.0, 34.0, 22.0 ], 553 | "text" : "sel 9" 554 | } 555 | 556 | } 557 | , { 558 | "box" : { 559 | "id" : "obj-173", 560 | "maxclass" : "newobj", 561 | "numinlets" : 0, 562 | "numoutlets" : 1, 563 | "outlettype" : [ "" ], 564 | "patching_rect" : [ 91.0, 917.0, 39.0, 22.0 ], 565 | "text" : "r type" 566 | } 567 | 568 | } 569 | , { 570 | "box" : { 571 | "id" : "obj-170", 572 | "maxclass" : "newobj", 573 | "numinlets" : 2, 574 | "numoutlets" : 2, 575 | "outlettype" : [ "bang", "" ], 576 | "patching_rect" : [ 672.0, 664.0, 34.0, 22.0 ], 577 | "text" : "sel 8" 578 | } 579 | 580 | } 581 | , { 582 | "box" : { 583 | "id" : "obj-171", 584 | "maxclass" : "newobj", 585 | "numinlets" : 0, 586 | "numoutlets" : 1, 587 | "outlettype" : [ "" ], 588 | "patching_rect" : [ 672.0, 630.0, 39.0, 22.0 ], 589 | "text" : "r type" 590 | } 591 | 592 | } 593 | , { 594 | "box" : { 595 | "id" : "obj-168", 596 | "maxclass" : "newobj", 597 | "numinlets" : 2, 598 | "numoutlets" : 2, 599 | "outlettype" : [ "bang", "" ], 600 | "patching_rect" : [ 374.0, 664.0, 34.0, 22.0 ], 601 | "text" : "sel 7" 602 | } 603 | 604 | } 605 | , { 606 | "box" : { 607 | "id" : "obj-169", 608 | "maxclass" : "newobj", 609 | "numinlets" : 0, 610 | "numoutlets" : 1, 611 | "outlettype" : [ "" ], 612 | "patching_rect" : [ 374.0, 630.0, 39.0, 22.0 ], 613 | "text" : "r type" 614 | } 615 | 616 | } 617 | , { 618 | "box" : { 619 | "id" : "obj-166", 620 | "maxclass" : "newobj", 621 | "numinlets" : 2, 622 | "numoutlets" : 2, 623 | "outlettype" : [ "bang", "" ], 624 | "patching_rect" : [ 91.0, 664.0, 34.0, 22.0 ], 625 | "text" : "sel 6" 626 | } 627 | 628 | } 629 | , { 630 | "box" : { 631 | "id" : "obj-167", 632 | "maxclass" : "newobj", 633 | "numinlets" : 0, 634 | "numoutlets" : 1, 635 | "outlettype" : [ "" ], 636 | "patching_rect" : [ 91.0, 630.0, 39.0, 22.0 ], 637 | "text" : "r type" 638 | } 639 | 640 | } 641 | , { 642 | "box" : { 643 | "id" : "obj-164", 644 | "maxclass" : "message", 645 | "numinlets" : 2, 646 | "numoutlets" : 1, 647 | "outlettype" : [ "" ], 648 | "patching_rect" : [ 261.0, 713.0, 29.5, 22.0 ], 649 | "text" : "1" 650 | } 651 | 652 | } 653 | , { 654 | "box" : { 655 | "id" : "obj-165", 656 | "maxclass" : "newobj", 657 | "numinlets" : 1, 658 | "numoutlets" : 0, 659 | "patching_rect" : [ 261.0, 843.0, 51.0, 22.0 ], 660 | "text" : "s output" 661 | } 662 | 663 | } 664 | , { 665 | "box" : { 666 | "id" : "obj-162", 667 | "maxclass" : "message", 668 | "numinlets" : 2, 669 | "numoutlets" : 1, 670 | "outlettype" : [ "" ], 671 | "patching_rect" : [ 825.25, 713.0, 29.5, 22.0 ], 672 | "text" : "1" 673 | } 674 | 675 | } 676 | , { 677 | "box" : { 678 | "id" : "obj-163", 679 | "maxclass" : "newobj", 680 | "numinlets" : 1, 681 | "numoutlets" : 0, 682 | "patching_rect" : [ 825.25, 843.0, 51.0, 22.0 ], 683 | "text" : "s output" 684 | } 685 | 686 | } 687 | , { 688 | "box" : { 689 | "id" : "obj-160", 690 | "maxclass" : "message", 691 | "numinlets" : 2, 692 | "numoutlets" : 1, 693 | "outlettype" : [ "" ], 694 | "patching_rect" : [ 536.0, 713.0, 29.5, 22.0 ], 695 | "text" : "1" 696 | } 697 | 698 | } 699 | , { 700 | "box" : { 701 | "id" : "obj-161", 702 | "maxclass" : "newobj", 703 | "numinlets" : 1, 704 | "numoutlets" : 0, 705 | "patching_rect" : [ 536.0, 843.0, 51.0, 22.0 ], 706 | "text" : "s output" 707 | } 708 | 709 | } 710 | , { 711 | "box" : { 712 | "id" : "obj-158", 713 | "maxclass" : "newobj", 714 | "numinlets" : 2, 715 | "numoutlets" : 2, 716 | "outlettype" : [ "bang", "" ], 717 | "patching_rect" : [ 672.0, 391.0, 34.0, 22.0 ], 718 | "text" : "sel 5" 719 | } 720 | 721 | } 722 | , { 723 | "box" : { 724 | "id" : "obj-159", 725 | "maxclass" : "newobj", 726 | "numinlets" : 0, 727 | "numoutlets" : 1, 728 | "outlettype" : [ "" ], 729 | "patching_rect" : [ 672.0, 357.0, 39.0, 22.0 ], 730 | "text" : "r type" 731 | } 732 | 733 | } 734 | , { 735 | "box" : { 736 | "id" : "obj-156", 737 | "maxclass" : "message", 738 | "numinlets" : 2, 739 | "numoutlets" : 1, 740 | "outlettype" : [ "" ], 741 | "patching_rect" : [ 836.0, 445.0, 29.5, 22.0 ], 742 | "text" : "1" 743 | } 744 | 745 | } 746 | , { 747 | "box" : { 748 | "id" : "obj-157", 749 | "maxclass" : "newobj", 750 | "numinlets" : 1, 751 | "numoutlets" : 0, 752 | "patching_rect" : [ 836.0, 569.0, 51.0, 22.0 ], 753 | "text" : "s output" 754 | } 755 | 756 | } 757 | , { 758 | "box" : { 759 | "id" : "obj-152", 760 | "maxclass" : "newobj", 761 | "numinlets" : 1, 762 | "numoutlets" : 0, 763 | "patching_rect" : [ 189.0, 569.0, 51.0, 22.0 ], 764 | "text" : "s output" 765 | } 766 | 767 | } 768 | , { 769 | "box" : { 770 | "id" : "obj-149", 771 | "maxclass" : "newobj", 772 | "numinlets" : 2, 773 | "numoutlets" : 2, 774 | "outlettype" : [ "bang", "" ], 775 | "patching_rect" : [ 91.0, 391.0, 34.0, 22.0 ], 776 | "text" : "sel 3" 777 | } 778 | 779 | } 780 | , { 781 | "box" : { 782 | "id" : "obj-150", 783 | "maxclass" : "newobj", 784 | "numinlets" : 0, 785 | "numoutlets" : 1, 786 | "outlettype" : [ "" ], 787 | "patching_rect" : [ 91.0, 357.0, 39.0, 22.0 ], 788 | "text" : "r type" 789 | } 790 | 791 | } 792 | , { 793 | "box" : { 794 | "id" : "obj-147", 795 | "maxclass" : "newobj", 796 | "numinlets" : 2, 797 | "numoutlets" : 2, 798 | "outlettype" : [ "bang", "" ], 799 | "patching_rect" : [ 374.0, 391.0, 34.0, 22.0 ], 800 | "text" : "sel 4" 801 | } 802 | 803 | } 804 | , { 805 | "box" : { 806 | "id" : "obj-148", 807 | "maxclass" : "newobj", 808 | "numinlets" : 0, 809 | "numoutlets" : 1, 810 | "outlettype" : [ "" ], 811 | "patching_rect" : [ 374.0, 357.0, 39.0, 22.0 ], 812 | "text" : "r type" 813 | } 814 | 815 | } 816 | , { 817 | "box" : { 818 | "id" : "obj-145", 819 | "maxclass" : "newobj", 820 | "numinlets" : 2, 821 | "numoutlets" : 2, 822 | "outlettype" : [ "bang", "" ], 823 | "patching_rect" : [ 606.0, 69.0, 34.0, 22.0 ], 824 | "text" : "sel 2" 825 | } 826 | 827 | } 828 | , { 829 | "box" : { 830 | "id" : "obj-146", 831 | "maxclass" : "newobj", 832 | "numinlets" : 0, 833 | "numoutlets" : 1, 834 | "outlettype" : [ "" ], 835 | "patching_rect" : [ 606.0, 35.0, 39.0, 22.0 ], 836 | "text" : "r type" 837 | } 838 | 839 | } 840 | , { 841 | "box" : { 842 | "id" : "obj-143", 843 | "maxclass" : "newobj", 844 | "numinlets" : 2, 845 | "numoutlets" : 2, 846 | "outlettype" : [ "bang", "" ], 847 | "patching_rect" : [ 285.5, 69.0, 34.0, 22.0 ], 848 | "text" : "sel 1" 849 | } 850 | 851 | } 852 | , { 853 | "box" : { 854 | "id" : "obj-144", 855 | "maxclass" : "newobj", 856 | "numinlets" : 0, 857 | "numoutlets" : 1, 858 | "outlettype" : [ "" ], 859 | "patching_rect" : [ 285.5, 35.0, 39.0, 22.0 ], 860 | "text" : "r type" 861 | } 862 | 863 | } 864 | , { 865 | "box" : { 866 | "id" : "obj-142", 867 | "maxclass" : "newobj", 868 | "numinlets" : 1, 869 | "numoutlets" : 1, 870 | "outlettype" : [ "" ], 871 | "patching_rect" : [ 999.0, 239.0, 54.0, 22.0 ], 872 | "text" : "deferlow" 873 | } 874 | 875 | } 876 | , { 877 | "box" : { 878 | "id" : "obj-141", 879 | "maxclass" : "newobj", 880 | "numinlets" : 2, 881 | "numoutlets" : 2, 882 | "outlettype" : [ "bang", "" ], 883 | "patching_rect" : [ 96.0, 69.0, 34.0, 22.0 ], 884 | "text" : "sel 0" 885 | } 886 | 887 | } 888 | , { 889 | "box" : { 890 | "id" : "obj-140", 891 | "maxclass" : "newobj", 892 | "numinlets" : 0, 893 | "numoutlets" : 1, 894 | "outlettype" : [ "" ], 895 | "patching_rect" : [ 96.0, 35.0, 39.0, 22.0 ], 896 | "text" : "r type" 897 | } 898 | 899 | } 900 | , { 901 | "box" : { 902 | "id" : "obj-134", 903 | "maxclass" : "message", 904 | "numinlets" : 2, 905 | "numoutlets" : 1, 906 | "outlettype" : [ "" ], 907 | "patching_rect" : [ 913.0, 1334.0, 48.0, 22.0 ], 908 | "text" : "gain $1" 909 | } 910 | 911 | } 912 | , { 913 | "box" : { 914 | "id" : "obj-135", 915 | "maxclass" : "newobj", 916 | "numinlets" : 1, 917 | "numoutlets" : 0, 918 | "patching_rect" : [ 913.0, 1372.0, 52.0, 22.0 ], 919 | "text" : "s param" 920 | } 921 | 922 | } 923 | , { 924 | "box" : { 925 | "id" : "obj-136", 926 | "maxclass" : "message", 927 | "numinlets" : 2, 928 | "numoutlets" : 1, 929 | "outlettype" : [ "" ], 930 | "patching_rect" : [ 844.0, 1334.0, 32.0, 22.0 ], 931 | "text" : "q $1" 932 | } 933 | 934 | } 935 | , { 936 | "box" : { 937 | "id" : "obj-137", 938 | "maxclass" : "newobj", 939 | "numinlets" : 1, 940 | "numoutlets" : 0, 941 | "patching_rect" : [ 844.0, 1372.0, 52.0, 22.0 ], 942 | "text" : "s param" 943 | } 944 | 945 | } 946 | , { 947 | "box" : { 948 | "id" : "obj-138", 949 | "maxclass" : "message", 950 | "numinlets" : 2, 951 | "numoutlets" : 1, 952 | "outlettype" : [ "" ], 953 | "patching_rect" : [ 756.0, 1334.0, 54.0, 22.0 ], 954 | "text" : "cutoff $1" 955 | } 956 | 957 | } 958 | , { 959 | "box" : { 960 | "id" : "obj-139", 961 | "maxclass" : "newobj", 962 | "numinlets" : 1, 963 | "numoutlets" : 0, 964 | "patching_rect" : [ 756.0, 1372.0, 52.0, 22.0 ], 965 | "text" : "s param" 966 | } 967 | 968 | } 969 | , { 970 | "box" : { 971 | "id" : "obj-122", 972 | "maxclass" : "message", 973 | "numinlets" : 2, 974 | "numoutlets" : 1, 975 | "outlettype" : [ "" ], 976 | "patching_rect" : [ 592.0, 1334.0, 48.0, 22.0 ], 977 | "text" : "gain $1" 978 | } 979 | 980 | } 981 | , { 982 | "box" : { 983 | "id" : "obj-123", 984 | "maxclass" : "newobj", 985 | "numinlets" : 1, 986 | "numoutlets" : 0, 987 | "patching_rect" : [ 592.0, 1372.0, 52.0, 22.0 ], 988 | "text" : "s param" 989 | } 990 | 991 | } 992 | , { 993 | "box" : { 994 | "id" : "obj-124", 995 | "maxclass" : "message", 996 | "numinlets" : 2, 997 | "numoutlets" : 1, 998 | "outlettype" : [ "" ], 999 | "patching_rect" : [ 521.0, 1334.0, 32.0, 22.0 ], 1000 | "text" : "q $1" 1001 | } 1002 | 1003 | } 1004 | , { 1005 | "box" : { 1006 | "id" : "obj-125", 1007 | "maxclass" : "newobj", 1008 | "numinlets" : 1, 1009 | "numoutlets" : 0, 1010 | "patching_rect" : [ 521.0, 1372.0, 52.0, 22.0 ], 1011 | "text" : "s param" 1012 | } 1013 | 1014 | } 1015 | , { 1016 | "box" : { 1017 | "id" : "obj-126", 1018 | "maxclass" : "message", 1019 | "numinlets" : 2, 1020 | "numoutlets" : 1, 1021 | "outlettype" : [ "" ], 1022 | "patching_rect" : [ 435.0, 1334.0, 54.0, 22.0 ], 1023 | "text" : "cutoff $1" 1024 | } 1025 | 1026 | } 1027 | , { 1028 | "box" : { 1029 | "id" : "obj-127", 1030 | "maxclass" : "newobj", 1031 | "numinlets" : 1, 1032 | "numoutlets" : 0, 1033 | "patching_rect" : [ 435.0, 1372.0, 52.0, 22.0 ], 1034 | "text" : "s param" 1035 | } 1036 | 1037 | } 1038 | , { 1039 | "box" : { 1040 | "id" : "obj-116", 1041 | "maxclass" : "message", 1042 | "numinlets" : 2, 1043 | "numoutlets" : 1, 1044 | "outlettype" : [ "" ], 1045 | "patching_rect" : [ 173.0, 1334.0, 32.0, 22.0 ], 1046 | "text" : "q $1" 1047 | } 1048 | 1049 | } 1050 | , { 1051 | "box" : { 1052 | "id" : "obj-117", 1053 | "maxclass" : "newobj", 1054 | "numinlets" : 1, 1055 | "numoutlets" : 0, 1056 | "patching_rect" : [ 173.0, 1372.0, 52.0, 22.0 ], 1057 | "text" : "s param" 1058 | } 1059 | 1060 | } 1061 | , { 1062 | "box" : { 1063 | "id" : "obj-118", 1064 | "maxclass" : "message", 1065 | "numinlets" : 2, 1066 | "numoutlets" : 1, 1067 | "outlettype" : [ "" ], 1068 | "patching_rect" : [ 91.0, 1334.0, 54.0, 22.0 ], 1069 | "text" : "cutoff $1" 1070 | } 1071 | 1072 | } 1073 | , { 1074 | "box" : { 1075 | "id" : "obj-119", 1076 | "maxclass" : "newobj", 1077 | "numinlets" : 1, 1078 | "numoutlets" : 0, 1079 | "patching_rect" : [ 91.0, 1372.0, 52.0, 22.0 ], 1080 | "text" : "s param" 1081 | } 1082 | 1083 | } 1084 | , { 1085 | "box" : { 1086 | "id" : "obj-108", 1087 | "maxclass" : "newobj", 1088 | "numinlets" : 2, 1089 | "numoutlets" : 1, 1090 | "outlettype" : [ "int" ], 1091 | "patching_rect" : [ 500.5, 1087.0, 29.5, 22.0 ], 1092 | "text" : "+ 1" 1093 | } 1094 | 1095 | } 1096 | , { 1097 | "box" : { 1098 | "id" : "obj-109", 1099 | "maxclass" : "newobj", 1100 | "numinlets" : 1, 1101 | "numoutlets" : 0, 1102 | "patching_rect" : [ 500.5, 1125.0, 51.0, 22.0 ], 1103 | "text" : "s output" 1104 | } 1105 | 1106 | } 1107 | , { 1108 | "box" : { 1109 | "id" : "obj-110", 1110 | "maxclass" : "message", 1111 | "numinlets" : 2, 1112 | "numoutlets" : 1, 1113 | "outlettype" : [ "" ], 1114 | "patching_rect" : [ 435.0, 1087.0, 32.0, 22.0 ], 1115 | "text" : "q $1" 1116 | } 1117 | 1118 | } 1119 | , { 1120 | "box" : { 1121 | "id" : "obj-111", 1122 | "maxclass" : "newobj", 1123 | "numinlets" : 1, 1124 | "numoutlets" : 0, 1125 | "patching_rect" : [ 435.0, 1125.0, 52.0, 22.0 ], 1126 | "text" : "s param" 1127 | } 1128 | 1129 | } 1130 | , { 1131 | "box" : { 1132 | "id" : "obj-112", 1133 | "maxclass" : "message", 1134 | "numinlets" : 2, 1135 | "numoutlets" : 1, 1136 | "outlettype" : [ "" ], 1137 | "patching_rect" : [ 353.0, 1087.0, 54.0, 22.0 ], 1138 | "text" : "cutoff $1" 1139 | } 1140 | 1141 | } 1142 | , { 1143 | "box" : { 1144 | "id" : "obj-113", 1145 | "maxclass" : "newobj", 1146 | "numinlets" : 1, 1147 | "numoutlets" : 0, 1148 | "patching_rect" : [ 353.0, 1125.0, 52.0, 22.0 ], 1149 | "text" : "s param" 1150 | } 1151 | 1152 | } 1153 | , { 1154 | "box" : { 1155 | "id" : "obj-103", 1156 | "maxclass" : "newobj", 1157 | "numinlets" : 1, 1158 | "numoutlets" : 0, 1159 | "patching_rect" : [ 238.5, 1125.0, 51.0, 22.0 ], 1160 | "text" : "s output" 1161 | } 1162 | 1163 | } 1164 | , { 1165 | "box" : { 1166 | "id" : "obj-104", 1167 | "maxclass" : "message", 1168 | "numinlets" : 2, 1169 | "numoutlets" : 1, 1170 | "outlettype" : [ "" ], 1171 | "patching_rect" : [ 173.0, 1087.0, 41.0, 22.0 ], 1172 | "text" : "bw $1" 1173 | } 1174 | 1175 | } 1176 | , { 1177 | "box" : { 1178 | "id" : "obj-105", 1179 | "maxclass" : "newobj", 1180 | "numinlets" : 1, 1181 | "numoutlets" : 0, 1182 | "patching_rect" : [ 173.0, 1125.0, 52.0, 22.0 ], 1183 | "text" : "s param" 1184 | } 1185 | 1186 | } 1187 | , { 1188 | "box" : { 1189 | "id" : "obj-106", 1190 | "maxclass" : "message", 1191 | "numinlets" : 2, 1192 | "numoutlets" : 1, 1193 | "outlettype" : [ "" ], 1194 | "patching_rect" : [ 91.0, 1087.0, 54.0, 22.0 ], 1195 | "text" : "cutoff $1" 1196 | } 1197 | 1198 | } 1199 | , { 1200 | "box" : { 1201 | "id" : "obj-107", 1202 | "maxclass" : "newobj", 1203 | "numinlets" : 1, 1204 | "numoutlets" : 0, 1205 | "patching_rect" : [ 91.0, 1125.0, 52.0, 22.0 ], 1206 | "text" : "s param" 1207 | } 1208 | 1209 | } 1210 | , { 1211 | "box" : { 1212 | "id" : "obj-98", 1213 | "maxclass" : "message", 1214 | "numinlets" : 2, 1215 | "numoutlets" : 1, 1216 | "outlettype" : [ "" ], 1217 | "patching_rect" : [ 756.0, 805.0, 32.0, 22.0 ], 1218 | "text" : "q $1" 1219 | } 1220 | 1221 | } 1222 | , { 1223 | "box" : { 1224 | "id" : "obj-99", 1225 | "maxclass" : "newobj", 1226 | "numinlets" : 1, 1227 | "numoutlets" : 0, 1228 | "patching_rect" : [ 756.0, 843.0, 52.0, 22.0 ], 1229 | "text" : "s param" 1230 | } 1231 | 1232 | } 1233 | , { 1234 | "box" : { 1235 | "id" : "obj-100", 1236 | "maxclass" : "message", 1237 | "numinlets" : 2, 1238 | "numoutlets" : 1, 1239 | "outlettype" : [ "" ], 1240 | "patching_rect" : [ 672.0, 805.0, 54.0, 22.0 ], 1241 | "text" : "cutoff $1" 1242 | } 1243 | 1244 | } 1245 | , { 1246 | "box" : { 1247 | "id" : "obj-101", 1248 | "maxclass" : "newobj", 1249 | "numinlets" : 1, 1250 | "numoutlets" : 0, 1251 | "patching_rect" : [ 672.0, 843.0, 52.0, 22.0 ], 1252 | "text" : "s param" 1253 | } 1254 | 1255 | } 1256 | , { 1257 | "box" : { 1258 | "id" : "obj-94", 1259 | "maxclass" : "message", 1260 | "numinlets" : 2, 1261 | "numoutlets" : 1, 1262 | "outlettype" : [ "" ], 1263 | "patching_rect" : [ 461.0, 805.0, 32.0, 22.0 ], 1264 | "text" : "q $1" 1265 | } 1266 | 1267 | } 1268 | , { 1269 | "box" : { 1270 | "id" : "obj-95", 1271 | "maxclass" : "newobj", 1272 | "numinlets" : 1, 1273 | "numoutlets" : 0, 1274 | "patching_rect" : [ 461.0, 843.0, 52.0, 22.0 ], 1275 | "text" : "s param" 1276 | } 1277 | 1278 | } 1279 | , { 1280 | "box" : { 1281 | "id" : "obj-96", 1282 | "maxclass" : "message", 1283 | "numinlets" : 2, 1284 | "numoutlets" : 1, 1285 | "outlettype" : [ "" ], 1286 | "patching_rect" : [ 374.0, 805.0, 54.0, 22.0 ], 1287 | "text" : "cutoff $1" 1288 | } 1289 | 1290 | } 1291 | , { 1292 | "box" : { 1293 | "id" : "obj-97", 1294 | "maxclass" : "newobj", 1295 | "numinlets" : 1, 1296 | "numoutlets" : 0, 1297 | "patching_rect" : [ 374.0, 843.0, 52.0, 22.0 ], 1298 | "text" : "s param" 1299 | } 1300 | 1301 | } 1302 | , { 1303 | "box" : { 1304 | "id" : "obj-90", 1305 | "maxclass" : "message", 1306 | "numinlets" : 2, 1307 | "numoutlets" : 1, 1308 | "outlettype" : [ "" ], 1309 | "patching_rect" : [ 178.0, 805.0, 32.0, 22.0 ], 1310 | "text" : "q $1" 1311 | } 1312 | 1313 | } 1314 | , { 1315 | "box" : { 1316 | "id" : "obj-91", 1317 | "maxclass" : "newobj", 1318 | "numinlets" : 1, 1319 | "numoutlets" : 0, 1320 | "patching_rect" : [ 178.0, 843.0, 52.0, 22.0 ], 1321 | "text" : "s param" 1322 | } 1323 | 1324 | } 1325 | , { 1326 | "box" : { 1327 | "id" : "obj-92", 1328 | "maxclass" : "message", 1329 | "numinlets" : 2, 1330 | "numoutlets" : 1, 1331 | "outlettype" : [ "" ], 1332 | "patching_rect" : [ 91.0, 805.0, 54.0, 22.0 ], 1333 | "text" : "cutoff $1" 1334 | } 1335 | 1336 | } 1337 | , { 1338 | "box" : { 1339 | "id" : "obj-93", 1340 | "maxclass" : "newobj", 1341 | "numinlets" : 1, 1342 | "numoutlets" : 0, 1343 | "patching_rect" : [ 91.0, 843.0, 52.0, 22.0 ], 1344 | "text" : "s param" 1345 | } 1346 | 1347 | } 1348 | , { 1349 | "box" : { 1350 | "id" : "obj-86", 1351 | "maxclass" : "message", 1352 | "numinlets" : 2, 1353 | "numoutlets" : 1, 1354 | "outlettype" : [ "" ], 1355 | "patching_rect" : [ 760.0, 531.0, 32.0, 22.0 ], 1356 | "text" : "q $1" 1357 | } 1358 | 1359 | } 1360 | , { 1361 | "box" : { 1362 | "id" : "obj-87", 1363 | "maxclass" : "newobj", 1364 | "numinlets" : 1, 1365 | "numoutlets" : 0, 1366 | "patching_rect" : [ 760.0, 569.0, 52.0, 22.0 ], 1367 | "text" : "s param" 1368 | } 1369 | 1370 | } 1371 | , { 1372 | "box" : { 1373 | "id" : "obj-88", 1374 | "maxclass" : "message", 1375 | "numinlets" : 2, 1376 | "numoutlets" : 1, 1377 | "outlettype" : [ "" ], 1378 | "patching_rect" : [ 672.0, 531.0, 54.0, 22.0 ], 1379 | "text" : "cutoff $1" 1380 | } 1381 | 1382 | } 1383 | , { 1384 | "box" : { 1385 | "id" : "obj-89", 1386 | "maxclass" : "newobj", 1387 | "numinlets" : 1, 1388 | "numoutlets" : 0, 1389 | "patching_rect" : [ 672.0, 569.0, 52.0, 22.0 ], 1390 | "text" : "s param" 1391 | } 1392 | 1393 | } 1394 | , { 1395 | "box" : { 1396 | "id" : "obj-84", 1397 | "maxclass" : "message", 1398 | "numinlets" : 2, 1399 | "numoutlets" : 1, 1400 | "outlettype" : [ "" ], 1401 | "patching_rect" : [ 91.0, 531.0, 54.0, 22.0 ], 1402 | "text" : "cutoff $1" 1403 | } 1404 | 1405 | } 1406 | , { 1407 | "box" : { 1408 | "id" : "obj-85", 1409 | "maxclass" : "newobj", 1410 | "numinlets" : 1, 1411 | "numoutlets" : 0, 1412 | "patching_rect" : [ 91.0, 569.0, 52.0, 22.0 ], 1413 | "text" : "s param" 1414 | } 1415 | 1416 | } 1417 | , { 1418 | "box" : { 1419 | "id" : "obj-80", 1420 | "maxclass" : "newobj", 1421 | "numinlets" : 2, 1422 | "numoutlets" : 1, 1423 | "outlettype" : [ "int" ], 1424 | "patching_rect" : [ 516.5, 531.0, 29.5, 22.0 ], 1425 | "text" : "+ 1" 1426 | } 1427 | 1428 | } 1429 | , { 1430 | "box" : { 1431 | "id" : "obj-81", 1432 | "maxclass" : "newobj", 1433 | "numinlets" : 1, 1434 | "numoutlets" : 0, 1435 | "patching_rect" : [ 516.5, 569.0, 51.0, 22.0 ], 1436 | "text" : "s output" 1437 | } 1438 | 1439 | } 1440 | , { 1441 | "box" : { 1442 | "id" : "obj-78", 1443 | "maxclass" : "message", 1444 | "numinlets" : 2, 1445 | "numoutlets" : 1, 1446 | "outlettype" : [ "" ], 1447 | "patching_rect" : [ 449.0, 531.0, 32.0, 22.0 ], 1448 | "text" : "q $1" 1449 | } 1450 | 1451 | } 1452 | , { 1453 | "box" : { 1454 | "id" : "obj-79", 1455 | "maxclass" : "newobj", 1456 | "numinlets" : 1, 1457 | "numoutlets" : 0, 1458 | "patching_rect" : [ 449.0, 569.0, 52.0, 22.0 ], 1459 | "text" : "s param" 1460 | } 1461 | 1462 | } 1463 | , { 1464 | "box" : { 1465 | "id" : "obj-74", 1466 | "maxclass" : "message", 1467 | "numinlets" : 2, 1468 | "numoutlets" : 1, 1469 | "outlettype" : [ "" ], 1470 | "patching_rect" : [ 374.0, 531.0, 54.0, 22.0 ], 1471 | "text" : "cutoff $1" 1472 | } 1473 | 1474 | } 1475 | , { 1476 | "box" : { 1477 | "id" : "obj-75", 1478 | "maxclass" : "newobj", 1479 | "numinlets" : 1, 1480 | "numoutlets" : 0, 1481 | "patching_rect" : [ 374.0, 569.0, 52.0, 22.0 ], 1482 | "text" : "s param" 1483 | } 1484 | 1485 | } 1486 | , { 1487 | "box" : { 1488 | "id" : "obj-72", 1489 | "maxclass" : "message", 1490 | "numinlets" : 2, 1491 | "numoutlets" : 1, 1492 | "outlettype" : [ "" ], 1493 | "patching_rect" : [ 717.0, 236.0, 45.0, 22.0 ], 1494 | "text" : "polr $1" 1495 | } 1496 | 1497 | } 1498 | , { 1499 | "box" : { 1500 | "id" : "obj-67", 1501 | "maxclass" : "message", 1502 | "numinlets" : 2, 1503 | "numoutlets" : 1, 1504 | "outlettype" : [ "" ], 1505 | "patching_rect" : [ 670.0, 236.0, 41.0, 22.0 ], 1506 | "text" : "fbk $1" 1507 | } 1508 | 1509 | } 1510 | , { 1511 | "box" : { 1512 | "id" : "obj-65", 1513 | "maxclass" : "message", 1514 | "numinlets" : 2, 1515 | "numoutlets" : 1, 1516 | "outlettype" : [ "" ], 1517 | "patching_rect" : [ 606.0, 236.0, 54.0, 22.0 ], 1518 | "text" : "cutoff $1" 1519 | } 1520 | 1521 | } 1522 | , { 1523 | "box" : { 1524 | "id" : "obj-66", 1525 | "maxclass" : "newobj", 1526 | "numinlets" : 1, 1527 | "numoutlets" : 0, 1528 | "patching_rect" : [ 606.0, 274.0, 52.0, 22.0 ], 1529 | "text" : "s param" 1530 | } 1531 | 1532 | } 1533 | , { 1534 | "box" : { 1535 | "id" : "obj-63", 1536 | "maxclass" : "message", 1537 | "numinlets" : 2, 1538 | "numoutlets" : 1, 1539 | "outlettype" : [ "" ], 1540 | "patching_rect" : [ 779.0, 136.5, 29.5, 22.0 ], 1541 | "text" : "1" 1542 | } 1543 | 1544 | } 1545 | , { 1546 | "box" : { 1547 | "id" : "obj-64", 1548 | "maxclass" : "newobj", 1549 | "numinlets" : 1, 1550 | "numoutlets" : 0, 1551 | "patching_rect" : [ 779.0, 274.0, 51.0, 22.0 ], 1552 | "text" : "s output" 1553 | } 1554 | 1555 | } 1556 | , { 1557 | "box" : { 1558 | "id" : "obj-61", 1559 | "maxclass" : "message", 1560 | "numinlets" : 2, 1561 | "numoutlets" : 1, 1562 | "outlettype" : [ "" ], 1563 | "patching_rect" : [ 390.5, 203.0, 32.0, 22.0 ], 1564 | "text" : "g $1" 1565 | } 1566 | 1567 | } 1568 | , { 1569 | "box" : { 1570 | "id" : "obj-62", 1571 | "maxclass" : "newobj", 1572 | "numinlets" : 1, 1573 | "numoutlets" : 0, 1574 | "patching_rect" : [ 390.5, 241.0, 52.0, 22.0 ], 1575 | "text" : "s param" 1576 | } 1577 | 1578 | } 1579 | , { 1580 | "box" : { 1581 | "id" : "obj-56", 1582 | "maxclass" : "message", 1583 | "numinlets" : 2, 1584 | "numoutlets" : 1, 1585 | "outlettype" : [ "" ], 1586 | "patching_rect" : [ 316.5, 203.0, 48.0, 22.0 ], 1587 | "text" : "time $1" 1588 | } 1589 | 1590 | } 1591 | , { 1592 | "box" : { 1593 | "id" : "obj-57", 1594 | "maxclass" : "newobj", 1595 | "numinlets" : 1, 1596 | "numoutlets" : 0, 1597 | "patching_rect" : [ 316.5, 241.0, 52.0, 22.0 ], 1598 | "text" : "s param" 1599 | } 1600 | 1601 | } 1602 | , { 1603 | "box" : { 1604 | "id" : "obj-55", 1605 | "maxclass" : "message", 1606 | "numinlets" : 2, 1607 | "numoutlets" : 1, 1608 | "outlettype" : [ "" ], 1609 | "patching_rect" : [ 460.5, 129.0, 29.5, 22.0 ], 1610 | "text" : "1" 1611 | } 1612 | 1613 | } 1614 | , { 1615 | "box" : { 1616 | "id" : "obj-50", 1617 | "maxclass" : "newobj", 1618 | "numinlets" : 1, 1619 | "numoutlets" : 0, 1620 | "patching_rect" : [ 460.5, 241.0, 51.0, 22.0 ], 1621 | "text" : "s output" 1622 | } 1623 | 1624 | } 1625 | , { 1626 | "box" : { 1627 | "id" : "obj-44", 1628 | "maxclass" : "message", 1629 | "numinlets" : 2, 1630 | "numoutlets" : 1, 1631 | "outlettype" : [ "" ], 1632 | "patching_rect" : [ 96.0, 203.0, 54.0, 22.0 ], 1633 | "text" : "cutoff $1" 1634 | } 1635 | 1636 | } 1637 | , { 1638 | "box" : { 1639 | "id" : "obj-41", 1640 | "maxclass" : "newobj", 1641 | "numinlets" : 2, 1642 | "numoutlets" : 1, 1643 | "outlettype" : [ "int" ], 1644 | "patching_rect" : [ 167.0, 203.0, 29.5, 22.0 ], 1645 | "text" : "+ 1" 1646 | } 1647 | 1648 | } 1649 | , { 1650 | "box" : { 1651 | "id" : "obj-32", 1652 | "maxclass" : "newobj", 1653 | "numinlets" : 1, 1654 | "numoutlets" : 0, 1655 | "patching_rect" : [ 167.0, 241.0, 51.0, 22.0 ], 1656 | "text" : "s output" 1657 | } 1658 | 1659 | } 1660 | , { 1661 | "box" : { 1662 | "id" : "obj-14", 1663 | "maxclass" : "newobj", 1664 | "numinlets" : 1, 1665 | "numoutlets" : 0, 1666 | "patching_rect" : [ 96.0, 241.0, 52.0, 22.0 ], 1667 | "text" : "s param" 1668 | } 1669 | 1670 | } 1671 | , { 1672 | "box" : { 1673 | "id" : "obj-2", 1674 | "maxclass" : "newobj", 1675 | "numinlets" : 1, 1676 | "numoutlets" : 0, 1677 | "patching_rect" : [ 999.0, 288.0, 41.0, 22.0 ], 1678 | "text" : "s type" 1679 | } 1680 | 1681 | } 1682 | , { 1683 | "box" : { 1684 | "id" : "obj-51", 1685 | "maxclass" : "live.dial", 1686 | "numinlets" : 1, 1687 | "numoutlets" : 2, 1688 | "outlettype" : [ "", "float" ], 1689 | "parameter_enable" : 1, 1690 | "patching_rect" : [ 913.0, 1257.0, 27.0, 54.0 ], 1691 | "presentation" : 1, 1692 | "presentation_rect" : [ 175.0, 1597.0, 35.0, 54.0 ], 1693 | "saved_attribute_attributes" : { 1694 | "valueof" : { 1695 | "parameter_initial" : [ 0 ], 1696 | "parameter_initial_enable" : 1, 1697 | "parameter_longname" : "Gain[2]", 1698 | "parameter_mmax" : 30.0, 1699 | "parameter_mmin" : -30.0, 1700 | "parameter_shortname" : "Gain", 1701 | "parameter_type" : 0, 1702 | "parameter_unitstyle" : 4 1703 | } 1704 | 1705 | } 1706 | , 1707 | "triangle" : 1, 1708 | "varname" : "fdbk[3]" 1709 | } 1710 | 1711 | } 1712 | , { 1713 | "box" : { 1714 | "id" : "obj-52", 1715 | "maxclass" : "live.dial", 1716 | "numinlets" : 1, 1717 | "numoutlets" : 2, 1718 | "outlettype" : [ "", "float" ], 1719 | "parameter_enable" : 1, 1720 | "patching_rect" : [ 836.0, 1257.0, 27.0, 48.0 ], 1721 | "presentation" : 1, 1722 | "presentation_rect" : [ 133.0, 1603.0, 39.0, 48.0 ], 1723 | "saved_attribute_attributes" : { 1724 | "valueof" : { 1725 | "parameter_exponent" : 3.0, 1726 | "parameter_initial" : [ 0 ], 1727 | "parameter_initial_enable" : 1, 1728 | "parameter_longname" : "Q[2]", 1729 | "parameter_mmax" : 100.0, 1730 | "parameter_shortname" : "Q", 1731 | "parameter_type" : 0, 1732 | "parameter_unitstyle" : 5 1733 | } 1734 | 1735 | } 1736 | , 1737 | "varname" : "q[2]" 1738 | } 1739 | 1740 | } 1741 | , { 1742 | "box" : { 1743 | "appearance" : 3, 1744 | "id" : "obj-53", 1745 | "maxclass" : "live.dial", 1746 | "numinlets" : 1, 1747 | "numoutlets" : 2, 1748 | "outlettype" : [ "", "float" ], 1749 | "parameter_enable" : 1, 1750 | "patching_rect" : [ 756.0, 1257.0, 50.0, 63.0 ], 1751 | "presentation" : 1, 1752 | "presentation_rect" : [ 80.0, 1588.0, 50.0, 63.0 ], 1753 | "saved_attribute_attributes" : { 1754 | "valueof" : { 1755 | "parameter_exponent" : 4.0, 1756 | "parameter_initial" : [ 1000.0 ], 1757 | "parameter_initial_enable" : 1, 1758 | "parameter_longname" : "Cutoff[17]", 1759 | "parameter_mmax" : 20000.0, 1760 | "parameter_shortname" : "Cutoff", 1761 | "parameter_type" : 0, 1762 | "parameter_unitstyle" : 3 1763 | } 1764 | 1765 | } 1766 | , 1767 | "varname" : "cutoff[13]" 1768 | } 1769 | 1770 | } 1771 | , { 1772 | "box" : { 1773 | "id" : "obj-45", 1774 | "maxclass" : "live.dial", 1775 | "numinlets" : 1, 1776 | "numoutlets" : 2, 1777 | "outlettype" : [ "", "float" ], 1778 | "parameter_enable" : 1, 1779 | "patching_rect" : [ 592.0, 1257.0, 27.0, 54.0 ], 1780 | "presentation" : 1, 1781 | "presentation_rect" : [ 175.0, 1477.0, 35.0, 54.0 ], 1782 | "saved_attribute_attributes" : { 1783 | "valueof" : { 1784 | "parameter_initial" : [ 0 ], 1785 | "parameter_initial_enable" : 1, 1786 | "parameter_longname" : "live.tab[8]", 1787 | "parameter_mmax" : 30.0, 1788 | "parameter_mmin" : -30.0, 1789 | "parameter_shortname" : "Gain", 1790 | "parameter_type" : 0, 1791 | "parameter_unitstyle" : 4 1792 | } 1793 | 1794 | } 1795 | , 1796 | "triangle" : 1, 1797 | "varname" : "fdbk[2]" 1798 | } 1799 | 1800 | } 1801 | , { 1802 | "box" : { 1803 | "id" : "obj-46", 1804 | "maxclass" : "live.dial", 1805 | "numinlets" : 1, 1806 | "numoutlets" : 2, 1807 | "outlettype" : [ "", "float" ], 1808 | "parameter_enable" : 1, 1809 | "patching_rect" : [ 513.0, 1257.0, 27.0, 48.0 ], 1810 | "presentation" : 1, 1811 | "presentation_rect" : [ 133.0, 1483.0, 39.0, 48.0 ], 1812 | "saved_attribute_attributes" : { 1813 | "valueof" : { 1814 | "parameter_exponent" : 3.0, 1815 | "parameter_initial" : [ 0 ], 1816 | "parameter_initial_enable" : 1, 1817 | "parameter_longname" : "Cutoff[9]", 1818 | "parameter_mmax" : 100.0, 1819 | "parameter_shortname" : "Q", 1820 | "parameter_type" : 0, 1821 | "parameter_unitstyle" : 5 1822 | } 1823 | 1824 | } 1825 | , 1826 | "varname" : "q[1]" 1827 | } 1828 | 1829 | } 1830 | , { 1831 | "box" : { 1832 | "appearance" : 3, 1833 | "id" : "obj-47", 1834 | "maxclass" : "live.dial", 1835 | "numinlets" : 1, 1836 | "numoutlets" : 2, 1837 | "outlettype" : [ "", "float" ], 1838 | "parameter_enable" : 1, 1839 | "patching_rect" : [ 435.0, 1257.0, 50.0, 63.0 ], 1840 | "presentation" : 1, 1841 | "presentation_rect" : [ 80.0, 1468.0, 50.0, 63.0 ], 1842 | "saved_attribute_attributes" : { 1843 | "valueof" : { 1844 | "parameter_exponent" : 4.0, 1845 | "parameter_initial" : [ 1000.0 ], 1846 | "parameter_initial_enable" : 1, 1847 | "parameter_longname" : "Cutoff[11]", 1848 | "parameter_mmax" : 20000.0, 1849 | "parameter_shortname" : "Cutoff", 1850 | "parameter_type" : 0, 1851 | "parameter_unitstyle" : 3 1852 | } 1853 | 1854 | } 1855 | , 1856 | "varname" : "cutoff[12]" 1857 | } 1858 | 1859 | } 1860 | , { 1861 | "box" : { 1862 | "id" : "obj-26", 1863 | "maxclass" : "live.dial", 1864 | "numinlets" : 1, 1865 | "numoutlets" : 2, 1866 | "outlettype" : [ "", "float" ], 1867 | "parameter_enable" : 1, 1868 | "patching_rect" : [ 165.0, 1257.0, 27.0, 48.0 ], 1869 | "presentation" : 1, 1870 | "presentation_rect" : [ 119.0, 1363.0, 39.0, 48.0 ], 1871 | "saved_attribute_attributes" : { 1872 | "valueof" : { 1873 | "parameter_exponent" : 3.0, 1874 | "parameter_initial" : [ 0 ], 1875 | "parameter_initial_enable" : 1, 1876 | "parameter_longname" : "Reso", 1877 | "parameter_mmax" : 100.0, 1878 | "parameter_shortname" : "Reso", 1879 | "parameter_type" : 0, 1880 | "parameter_unitstyle" : 5 1881 | } 1882 | 1883 | } 1884 | , 1885 | "varname" : "q" 1886 | } 1887 | 1888 | } 1889 | , { 1890 | "box" : { 1891 | "appearance" : 3, 1892 | "id" : "obj-27", 1893 | "maxclass" : "live.dial", 1894 | "numinlets" : 1, 1895 | "numoutlets" : 2, 1896 | "outlettype" : [ "", "float" ], 1897 | "parameter_enable" : 1, 1898 | "patching_rect" : [ 91.0, 1257.0, 50.0, 63.0 ], 1899 | "presentation" : 1, 1900 | "presentation_rect" : [ 66.0, 1348.0, 50.0, 63.0 ], 1901 | "saved_attribute_attributes" : { 1902 | "valueof" : { 1903 | "parameter_exponent" : 4.0, 1904 | "parameter_initial" : [ 1000.0 ], 1905 | "parameter_initial_enable" : 1, 1906 | "parameter_longname" : "Cutoff[16]", 1907 | "parameter_mmax" : 20000.0, 1908 | "parameter_shortname" : "Cutoff", 1909 | "parameter_type" : 0, 1910 | "parameter_unitstyle" : 3 1911 | } 1912 | 1913 | } 1914 | , 1915 | "varname" : "cutoff[11]" 1916 | } 1917 | 1918 | } 1919 | , { 1920 | "box" : { 1921 | "id" : "obj-22", 1922 | "maxclass" : "live.dial", 1923 | "numinlets" : 1, 1924 | "numoutlets" : 2, 1925 | "outlettype" : [ "", "float" ], 1926 | "parameter_enable" : 1, 1927 | "patching_rect" : [ 427.0, 997.0, 27.0, 48.0 ], 1928 | "presentation" : 1, 1929 | "presentation_rect" : [ 119.0, 1243.0, 39.0, 48.0 ], 1930 | "saved_attribute_attributes" : { 1931 | "valueof" : { 1932 | "parameter_exponent" : 3.0, 1933 | "parameter_initial" : [ 0 ], 1934 | "parameter_initial_enable" : 1, 1935 | "parameter_longname" : "Resonance[7]", 1936 | "parameter_mmax" : 100.0, 1937 | "parameter_shortname" : "Reso", 1938 | "parameter_type" : 0, 1939 | "parameter_unitstyle" : 5 1940 | } 1941 | 1942 | } 1943 | , 1944 | "varname" : "reso[7]" 1945 | } 1946 | 1947 | } 1948 | , { 1949 | "box" : { 1950 | "id" : "obj-23", 1951 | "maxclass" : "live.tab", 1952 | "num_lines_patching" : 3, 1953 | "num_lines_presentation" : 3, 1954 | "numinlets" : 1, 1955 | "numoutlets" : 3, 1956 | "outlettype" : [ "", "", "float" ], 1957 | "parameter_enable" : 1, 1958 | "patching_rect" : [ 500.5, 997.0, 47.0, 63.0 ], 1959 | "presentation" : 1, 1960 | "presentation_rect" : [ 165.0, 1228.0, 53.0, 63.0 ], 1961 | "saved_attribute_attributes" : { 1962 | "valueof" : { 1963 | "parameter_enum" : [ "LP", "HP", "BP" ], 1964 | "parameter_longname" : "live.tab[9]", 1965 | "parameter_mmax" : 2, 1966 | "parameter_shortname" : "live.tab", 1967 | "parameter_type" : 2, 1968 | "parameter_unitstyle" : 9 1969 | } 1970 | 1971 | } 1972 | , 1973 | "varname" : "live.tab[4]" 1974 | } 1975 | 1976 | } 1977 | , { 1978 | "box" : { 1979 | "appearance" : 3, 1980 | "id" : "obj-24", 1981 | "maxclass" : "live.dial", 1982 | "numinlets" : 1, 1983 | "numoutlets" : 2, 1984 | "outlettype" : [ "", "float" ], 1985 | "parameter_enable" : 1, 1986 | "patching_rect" : [ 353.0, 997.0, 50.0, 63.0 ], 1987 | "presentation" : 1, 1988 | "presentation_rect" : [ 66.0, 1228.0, 50.0, 63.0 ], 1989 | "saved_attribute_attributes" : { 1990 | "valueof" : { 1991 | "parameter_exponent" : 4.0, 1992 | "parameter_initial" : [ 1000.0 ], 1993 | "parameter_initial_enable" : 1, 1994 | "parameter_longname" : "Cutoff[15]", 1995 | "parameter_mmax" : 20000.0, 1996 | "parameter_shortname" : "Cutoff", 1997 | "parameter_type" : 0, 1998 | "parameter_unitstyle" : 3 1999 | } 2000 | 2001 | } 2002 | , 2003 | "varname" : "cutoff[10]" 2004 | } 2005 | 2006 | } 2007 | , { 2008 | "box" : { 2009 | "id" : "obj-18", 2010 | "maxclass" : "live.dial", 2011 | "numinlets" : 1, 2012 | "numoutlets" : 2, 2013 | "outlettype" : [ "", "float" ], 2014 | "parameter_enable" : 1, 2015 | "patching_rect" : [ 165.0, 997.0, 27.0, 48.0 ], 2016 | "presentation" : 1, 2017 | "presentation_rect" : [ 149.0, 1123.0, 39.0, 48.0 ], 2018 | "saved_attribute_attributes" : { 2019 | "valueof" : { 2020 | "parameter_exponent" : 3.0, 2021 | "parameter_initial" : [ 0 ], 2022 | "parameter_initial_enable" : 1, 2023 | "parameter_longname" : "Bw", 2024 | "parameter_mmax" : 100.0, 2025 | "parameter_shortname" : "Bw", 2026 | "parameter_type" : 0, 2027 | "parameter_unitstyle" : 5 2028 | } 2029 | 2030 | } 2031 | , 2032 | "varname" : "reso[6]" 2033 | } 2034 | 2035 | } 2036 | , { 2037 | "box" : { 2038 | "appearance" : 3, 2039 | "id" : "obj-20", 2040 | "maxclass" : "live.dial", 2041 | "numinlets" : 1, 2042 | "numoutlets" : 2, 2043 | "outlettype" : [ "", "float" ], 2044 | "parameter_enable" : 1, 2045 | "patching_rect" : [ 91.0, 997.0, 50.0, 63.0 ], 2046 | "presentation" : 1, 2047 | "presentation_rect" : [ 96.0, 1108.0, 50.0, 63.0 ], 2048 | "saved_attribute_attributes" : { 2049 | "valueof" : { 2050 | "parameter_exponent" : 4.0, 2051 | "parameter_initial" : [ 1000.0 ], 2052 | "parameter_initial_enable" : 1, 2053 | "parameter_longname" : "Cutoff[8]", 2054 | "parameter_mmax" : 20000.0, 2055 | "parameter_shortname" : "Cutoff", 2056 | "parameter_type" : 0, 2057 | "parameter_unitstyle" : 3 2058 | } 2059 | 2060 | } 2061 | , 2062 | "varname" : "cutoff[9]" 2063 | } 2064 | 2065 | } 2066 | , { 2067 | "box" : { 2068 | "id" : "obj-15", 2069 | "maxclass" : "live.dial", 2070 | "numinlets" : 1, 2071 | "numoutlets" : 2, 2072 | "outlettype" : [ "", "float" ], 2073 | "parameter_enable" : 1, 2074 | "patching_rect" : [ 748.0, 713.0, 27.0, 48.0 ], 2075 | "presentation" : 1, 2076 | "presentation_rect" : [ 128.0, 1003.0, 39.0, 48.0 ], 2077 | "saved_attribute_attributes" : { 2078 | "valueof" : { 2079 | "parameter_exponent" : 3.0, 2080 | "parameter_initial" : [ 0 ], 2081 | "parameter_initial_enable" : 1, 2082 | "parameter_longname" : "Resonance[5]", 2083 | "parameter_mmax" : 100.0, 2084 | "parameter_shortname" : "Reso", 2085 | "parameter_type" : 0, 2086 | "parameter_unitstyle" : 5 2087 | } 2088 | 2089 | } 2090 | , 2091 | "varname" : "reso[5]" 2092 | } 2093 | 2094 | } 2095 | , { 2096 | "box" : { 2097 | "appearance" : 3, 2098 | "id" : "obj-16", 2099 | "maxclass" : "live.dial", 2100 | "numinlets" : 1, 2101 | "numoutlets" : 2, 2102 | "outlettype" : [ "", "float" ], 2103 | "parameter_enable" : 1, 2104 | "patching_rect" : [ 672.0, 713.0, 50.0, 63.0 ], 2105 | "presentation" : 1, 2106 | "presentation_rect" : [ 75.0, 988.0, 50.0, 63.0 ], 2107 | "saved_attribute_attributes" : { 2108 | "valueof" : { 2109 | "parameter_exponent" : 4.0, 2110 | "parameter_initial" : [ 1000.0 ], 2111 | "parameter_initial_enable" : 1, 2112 | "parameter_longname" : "Cutoff[14]", 2113 | "parameter_mmax" : 20000.0, 2114 | "parameter_shortname" : "Cutoff", 2115 | "parameter_type" : 0, 2116 | "parameter_unitstyle" : 3 2117 | } 2118 | 2119 | } 2120 | , 2121 | "varname" : "cutoff[8]" 2122 | } 2123 | 2124 | } 2125 | , { 2126 | "box" : { 2127 | "id" : "obj-9", 2128 | "maxclass" : "live.dial", 2129 | "numinlets" : 1, 2130 | "numoutlets" : 2, 2131 | "outlettype" : [ "", "float" ], 2132 | "parameter_enable" : 1, 2133 | "patching_rect" : [ 453.0, 713.0, 27.0, 48.0 ], 2134 | "presentation" : 1, 2135 | "presentation_rect" : [ 149.0, 883.0, 39.0, 48.0 ], 2136 | "saved_attribute_attributes" : { 2137 | "valueof" : { 2138 | "parameter_exponent" : 3.0, 2139 | "parameter_initial" : [ 0 ], 2140 | "parameter_initial_enable" : 1, 2141 | "parameter_longname" : "Resonance[3]", 2142 | "parameter_mmax" : 100.0, 2143 | "parameter_shortname" : "Reso", 2144 | "parameter_type" : 0, 2145 | "parameter_unitstyle" : 5 2146 | } 2147 | 2148 | } 2149 | , 2150 | "varname" : "reso[3]" 2151 | } 2152 | 2153 | } 2154 | , { 2155 | "box" : { 2156 | "appearance" : 3, 2157 | "id" : "obj-10", 2158 | "maxclass" : "live.dial", 2159 | "numinlets" : 1, 2160 | "numoutlets" : 2, 2161 | "outlettype" : [ "", "float" ], 2162 | "parameter_enable" : 1, 2163 | "patching_rect" : [ 374.0, 713.0, 50.0, 63.0 ], 2164 | "presentation" : 1, 2165 | "presentation_rect" : [ 96.0, 868.0, 50.0, 63.0 ], 2166 | "saved_attribute_attributes" : { 2167 | "valueof" : { 2168 | "parameter_exponent" : 4.0, 2169 | "parameter_initial" : [ 1000.0 ], 2170 | "parameter_initial_enable" : 1, 2171 | "parameter_longname" : "Cutoff[12]", 2172 | "parameter_mmax" : 20000.0, 2173 | "parameter_shortname" : "Cutoff", 2174 | "parameter_type" : 0, 2175 | "parameter_unitstyle" : 3 2176 | } 2177 | 2178 | } 2179 | , 2180 | "varname" : "cutoff[6]" 2181 | } 2182 | 2183 | } 2184 | , { 2185 | "box" : { 2186 | "id" : "obj-11", 2187 | "maxclass" : "live.dial", 2188 | "numinlets" : 1, 2189 | "numoutlets" : 2, 2190 | "outlettype" : [ "", "float" ], 2191 | "parameter_enable" : 1, 2192 | "patching_rect" : [ 170.0, 713.0, 27.0, 48.0 ], 2193 | "presentation" : 1, 2194 | "presentation_rect" : [ 149.0, 763.0, 39.0, 48.0 ], 2195 | "saved_attribute_attributes" : { 2196 | "valueof" : { 2197 | "parameter_exponent" : 3.0, 2198 | "parameter_initial" : [ 0 ], 2199 | "parameter_initial_enable" : 1, 2200 | "parameter_longname" : "Resonance[4]", 2201 | "parameter_mmax" : 100.0, 2202 | "parameter_shortname" : "Reso", 2203 | "parameter_type" : 0, 2204 | "parameter_unitstyle" : 5 2205 | } 2206 | 2207 | } 2208 | , 2209 | "varname" : "reso[4]" 2210 | } 2211 | 2212 | } 2213 | , { 2214 | "box" : { 2215 | "appearance" : 3, 2216 | "id" : "obj-13", 2217 | "maxclass" : "live.dial", 2218 | "numinlets" : 1, 2219 | "numoutlets" : 2, 2220 | "outlettype" : [ "", "float" ], 2221 | "parameter_enable" : 1, 2222 | "patching_rect" : [ 91.0, 713.0, 50.0, 63.0 ], 2223 | "presentation" : 1, 2224 | "presentation_rect" : [ 96.0, 748.0, 50.0, 63.0 ], 2225 | "saved_attribute_attributes" : { 2226 | "valueof" : { 2227 | "parameter_exponent" : 4.0, 2228 | "parameter_initial" : [ 1000.0 ], 2229 | "parameter_initial_enable" : 1, 2230 | "parameter_longname" : "Cutoff[13]", 2231 | "parameter_mmax" : 20000.0, 2232 | "parameter_shortname" : "Cutoff", 2233 | "parameter_type" : 0, 2234 | "parameter_unitstyle" : 3 2235 | } 2236 | 2237 | } 2238 | , 2239 | "varname" : "cutoff[7]" 2240 | } 2241 | 2242 | } 2243 | , { 2244 | "box" : { 2245 | "id" : "obj-6", 2246 | "maxclass" : "live.dial", 2247 | "numinlets" : 1, 2248 | "numoutlets" : 2, 2249 | "outlettype" : [ "", "float" ], 2250 | "parameter_enable" : 1, 2251 | "patching_rect" : [ 752.0, 445.0, 27.0, 48.0 ], 2252 | "presentation" : 1, 2253 | "presentation_rect" : [ 149.0, 643.0, 39.0, 48.0 ], 2254 | "saved_attribute_attributes" : { 2255 | "valueof" : { 2256 | "parameter_exponent" : 3.0, 2257 | "parameter_initial" : [ 0 ], 2258 | "parameter_initial_enable" : 1, 2259 | "parameter_longname" : "Resonance[2]", 2260 | "parameter_mmax" : 100.0, 2261 | "parameter_shortname" : "Reso", 2262 | "parameter_type" : 0, 2263 | "parameter_unitstyle" : 5 2264 | } 2265 | 2266 | } 2267 | , 2268 | "varname" : "reso[2]" 2269 | } 2270 | 2271 | } 2272 | , { 2273 | "box" : { 2274 | "appearance" : 3, 2275 | "id" : "obj-7", 2276 | "maxclass" : "live.dial", 2277 | "numinlets" : 1, 2278 | "numoutlets" : 2, 2279 | "outlettype" : [ "", "float" ], 2280 | "parameter_enable" : 1, 2281 | "patching_rect" : [ 672.0, 445.0, 50.0, 63.0 ], 2282 | "presentation" : 1, 2283 | "presentation_rect" : [ 96.0, 628.0, 50.0, 63.0 ], 2284 | "saved_attribute_attributes" : { 2285 | "valueof" : { 2286 | "parameter_exponent" : 4.0, 2287 | "parameter_initial" : [ 1000.0 ], 2288 | "parameter_initial_enable" : 1, 2289 | "parameter_longname" : "Cutoff[18]", 2290 | "parameter_mmax" : 20000.0, 2291 | "parameter_shortname" : "Cutoff", 2292 | "parameter_type" : 0, 2293 | "parameter_unitstyle" : 3 2294 | } 2295 | 2296 | } 2297 | , 2298 | "varname" : "cutoff[1]" 2299 | } 2300 | 2301 | } 2302 | , { 2303 | "box" : { 2304 | "id" : "obj-1", 2305 | "maxclass" : "live.dial", 2306 | "numinlets" : 1, 2307 | "numoutlets" : 2, 2308 | "outlettype" : [ "", "float" ], 2309 | "parameter_enable" : 1, 2310 | "patching_rect" : [ 441.0, 445.0, 27.0, 48.0 ], 2311 | "presentation" : 1, 2312 | "presentation_rect" : [ 119.0, 523.0, 39.0, 48.0 ], 2313 | "saved_attribute_attributes" : { 2314 | "valueof" : { 2315 | "parameter_exponent" : 3.0, 2316 | "parameter_initial" : [ 0 ], 2317 | "parameter_initial_enable" : 1, 2318 | "parameter_longname" : "Resonance", 2319 | "parameter_mmax" : 100.0, 2320 | "parameter_shortname" : "Reso", 2321 | "parameter_type" : 0, 2322 | "parameter_unitstyle" : 5 2323 | } 2324 | 2325 | } 2326 | , 2327 | "varname" : "reso" 2328 | } 2329 | 2330 | } 2331 | , { 2332 | "box" : { 2333 | "id" : "obj-73", 2334 | "maxclass" : "message", 2335 | "numinlets" : 2, 2336 | "numoutlets" : 1, 2337 | "outlettype" : [ "" ], 2338 | "patching_rect" : [ 1069.0, 239.0, 68.0, 22.0 ], 2339 | "text" : "offset 0. $1" 2340 | } 2341 | 2342 | } 2343 | , { 2344 | "box" : { 2345 | "id" : "obj-71", 2346 | "maxclass" : "newobj", 2347 | "numinlets" : 2, 2348 | "numoutlets" : 1, 2349 | "outlettype" : [ "float" ], 2350 | "patching_rect" : [ 1069.0, 198.0, 44.0, 22.0 ], 2351 | "text" : "* -120." 2352 | } 2353 | 2354 | } 2355 | , { 2356 | "box" : { 2357 | "id" : "obj-4", 2358 | "maxclass" : "newobj", 2359 | "numinlets" : 1, 2360 | "numoutlets" : 2, 2361 | "outlettype" : [ "", "" ], 2362 | "patching_rect" : [ 1069.0, 288.0, 67.0, 22.0 ], 2363 | "save" : [ "#N", "thispatcher", ";", "#Q", "end", ";" ], 2364 | "text" : "thispatcher" 2365 | } 2366 | 2367 | } 2368 | , { 2369 | "box" : { 2370 | "comment" : "", 2371 | "id" : "obj-5", 2372 | "index" : 1, 2373 | "maxclass" : "inlet", 2374 | "numinlets" : 0, 2375 | "numoutlets" : 1, 2376 | "outlettype" : [ "" ], 2377 | "patching_rect" : [ 999.0, 121.0, 30.0, 30.0 ] 2378 | } 2379 | 2380 | } 2381 | , { 2382 | "box" : { 2383 | "id" : "obj-49", 2384 | "maxclass" : "live.dial", 2385 | "numinlets" : 1, 2386 | "numoutlets" : 2, 2387 | "outlettype" : [ "", "float" ], 2388 | "parameter_enable" : 1, 2389 | "patching_rect" : [ 670.0, 136.5, 27.0, 54.0 ], 2390 | "presentation" : 1, 2391 | "presentation_rect" : [ 142.0, 276.0, 27.0, 54.0 ], 2392 | "saved_attribute_attributes" : { 2393 | "valueof" : { 2394 | "parameter_initial" : [ 0 ], 2395 | "parameter_initial_enable" : 1, 2396 | "parameter_longname" : "Fdbk[1]", 2397 | "parameter_mmax" : 1.0, 2398 | "parameter_mmin" : -1.0, 2399 | "parameter_shortname" : "Fdbk", 2400 | "parameter_type" : 0, 2401 | "parameter_unitstyle" : 2 2402 | } 2403 | 2404 | } 2405 | , 2406 | "triangle" : 1, 2407 | "varname" : "fdbk" 2408 | } 2409 | 2410 | } 2411 | , { 2412 | "box" : { 2413 | "id" : "obj-48", 2414 | "maxclass" : "live.dial", 2415 | "numinlets" : 1, 2416 | "numoutlets" : 2, 2417 | "outlettype" : [ "", "float" ], 2418 | "parameter_enable" : 1, 2419 | "patching_rect" : [ 390.5, 129.0, 27.0, 54.0 ], 2420 | "presentation" : 1, 2421 | "presentation_rect" : [ 165.0, 157.0, 27.0, 54.0 ], 2422 | "saved_attribute_attributes" : { 2423 | "valueof" : { 2424 | "parameter_initial" : [ 0 ], 2425 | "parameter_initial_enable" : 1, 2426 | "parameter_longname" : "G[1]", 2427 | "parameter_mmax" : 1.0, 2428 | "parameter_mmin" : -1.0, 2429 | "parameter_shortname" : "G", 2430 | "parameter_type" : 0, 2431 | "parameter_unitstyle" : 2 2432 | } 2433 | 2434 | } 2435 | , 2436 | "triangle" : 1, 2437 | "varname" : "G" 2438 | } 2439 | 2440 | } 2441 | , { 2442 | "box" : { 2443 | "appearance" : 3, 2444 | "id" : "obj-40", 2445 | "maxclass" : "live.dial", 2446 | "numinlets" : 1, 2447 | "numoutlets" : 2, 2448 | "outlettype" : [ "", "float" ], 2449 | "parameter_enable" : 1, 2450 | "patching_rect" : [ 91.0, 445.0, 50.0, 63.0 ], 2451 | "presentation" : 1, 2452 | "presentation_rect" : [ 94.0, 388.0, 50.0, 63.0 ], 2453 | "saved_attribute_attributes" : { 2454 | "valueof" : { 2455 | "parameter_exponent" : 4.0, 2456 | "parameter_initial" : [ 1000.0 ], 2457 | "parameter_initial_enable" : 1, 2458 | "parameter_longname" : "Cutoff[7]", 2459 | "parameter_mmax" : 20000.0, 2460 | "parameter_shortname" : "Cutoff", 2461 | "parameter_type" : 0, 2462 | "parameter_unitstyle" : 3 2463 | } 2464 | 2465 | } 2466 | , 2467 | "varname" : "cutoff[4]" 2468 | } 2469 | 2470 | } 2471 | , { 2472 | "box" : { 2473 | "id" : "obj-36", 2474 | "maxclass" : "live.tab", 2475 | "num_lines_patching" : 4, 2476 | "num_lines_presentation" : 4, 2477 | "numinlets" : 1, 2478 | "numoutlets" : 3, 2479 | "outlettype" : [ "", "", "float" ], 2480 | "parameter_enable" : 1, 2481 | "patching_rect" : [ 516.5, 445.0, 49.0, 59.0 ], 2482 | "presentation" : 1, 2483 | "presentation_rect" : [ 165.0, 508.0, 53.0, 63.0 ], 2484 | "saved_attribute_attributes" : { 2485 | "valueof" : { 2486 | "parameter_enum" : [ "LP", "HP", "BP", "UBP", "N", "P", "AP" ], 2487 | "parameter_longname" : "live.tab[10]", 2488 | "parameter_mmax" : 6, 2489 | "parameter_shortname" : "live.tab", 2490 | "parameter_type" : 2, 2491 | "parameter_unitstyle" : 9 2492 | } 2493 | 2494 | } 2495 | , 2496 | "varname" : "live.tab[3]" 2497 | } 2498 | 2499 | } 2500 | , { 2501 | "box" : { 2502 | "appearance" : 3, 2503 | "id" : "obj-37", 2504 | "maxclass" : "live.dial", 2505 | "numinlets" : 1, 2506 | "numoutlets" : 2, 2507 | "outlettype" : [ "", "float" ], 2508 | "parameter_enable" : 1, 2509 | "patching_rect" : [ 374.0, 445.0, 50.0, 63.0 ], 2510 | "presentation" : 1, 2511 | "presentation_rect" : [ 66.0, 508.0, 50.0, 63.0 ], 2512 | "saved_attribute_attributes" : { 2513 | "valueof" : { 2514 | "parameter_exponent" : 4.0, 2515 | "parameter_initial" : [ 1000.0 ], 2516 | "parameter_initial_enable" : 1, 2517 | "parameter_longname" : "Cutoff[6]", 2518 | "parameter_mmax" : 20000.0, 2519 | "parameter_shortname" : "Cutoff", 2520 | "parameter_type" : 0, 2521 | "parameter_unitstyle" : 3 2522 | } 2523 | 2524 | } 2525 | , 2526 | "varname" : "cutoff[3]" 2527 | } 2528 | 2529 | } 2530 | , { 2531 | "box" : { 2532 | "id" : "obj-33", 2533 | "maxclass" : "live.tab", 2534 | "num_lines_patching" : 2, 2535 | "num_lines_presentation" : 2, 2536 | "numinlets" : 1, 2537 | "numoutlets" : 3, 2538 | "outlettype" : [ "", "", "float" ], 2539 | "parameter_enable" : 1, 2540 | "patching_rect" : [ 717.0, 136.5, 30.0, 48.0 ], 2541 | "presentation" : 1, 2542 | "presentation_rect" : [ 185.0, 289.0, 19.0, 38.0 ], 2543 | "saved_attribute_attributes" : { 2544 | "valueof" : { 2545 | "parameter_enum" : [ "+", "-" ], 2546 | "parameter_longname" : "live.tab[7]", 2547 | "parameter_mmax" : 1, 2548 | "parameter_shortname" : "live.tab", 2549 | "parameter_type" : 2, 2550 | "parameter_unitstyle" : 9 2551 | } 2552 | 2553 | } 2554 | , 2555 | "varname" : "live.tab[2]" 2556 | } 2557 | 2558 | } 2559 | , { 2560 | "box" : { 2561 | "appearance" : 3, 2562 | "id" : "obj-34", 2563 | "maxclass" : "live.dial", 2564 | "numinlets" : 1, 2565 | "numoutlets" : 2, 2566 | "outlettype" : [ "", "float" ], 2567 | "parameter_enable" : 1, 2568 | "patching_rect" : [ 606.0, 136.5, 50.0, 63.0 ], 2569 | "presentation" : 1, 2570 | "presentation_rect" : [ 84.0, 268.0, 50.0, 63.0 ], 2571 | "saved_attribute_attributes" : { 2572 | "valueof" : { 2573 | "parameter_exponent" : 4.0, 2574 | "parameter_initial" : [ 1000.0 ], 2575 | "parameter_initial_enable" : 1, 2576 | "parameter_longname" : "Cutoff[5]", 2577 | "parameter_mmax" : 20000.0, 2578 | "parameter_mmin" : 1.0, 2579 | "parameter_shortname" : "Cutoff", 2580 | "parameter_type" : 0, 2581 | "parameter_unitstyle" : 3 2582 | } 2583 | 2584 | } 2585 | , 2586 | "varname" : "cutoff[2]" 2587 | } 2588 | 2589 | } 2590 | , { 2591 | "box" : { 2592 | "appearance" : 3, 2593 | "id" : "obj-31", 2594 | "maxclass" : "live.dial", 2595 | "numinlets" : 1, 2596 | "numoutlets" : 2, 2597 | "outlettype" : [ "", "float" ], 2598 | "parameter_enable" : 1, 2599 | "patching_rect" : [ 285.5, 129.0, 50.0, 63.0 ], 2600 | "presentation" : 1, 2601 | "presentation_rect" : [ 94.0, 148.0, 50.0, 63.0 ], 2602 | "saved_attribute_attributes" : { 2603 | "valueof" : { 2604 | "parameter_exponent" : 4.0, 2605 | "parameter_initial" : [ 0 ], 2606 | "parameter_initial_enable" : 1, 2607 | "parameter_longname" : "Delay", 2608 | "parameter_mmax" : 1000.0, 2609 | "parameter_shortname" : "Delay", 2610 | "parameter_type" : 0, 2611 | "parameter_unitstyle" : 2 2612 | } 2613 | 2614 | } 2615 | , 2616 | "varname" : "delay" 2617 | } 2618 | 2619 | } 2620 | , { 2621 | "box" : { 2622 | "id" : "obj-69", 2623 | "maxclass" : "live.tab", 2624 | "num_lines_patching" : 2, 2625 | "num_lines_presentation" : 2, 2626 | "numinlets" : 1, 2627 | "numoutlets" : 3, 2628 | "outlettype" : [ "", "", "float" ], 2629 | "parameter_enable" : 1, 2630 | "patching_rect" : [ 167.0, 136.5, 30.0, 48.0 ], 2631 | "presentation" : 1, 2632 | "presentation_rect" : [ 165.0, 36.0, 27.0, 48.0 ], 2633 | "saved_attribute_attributes" : { 2634 | "valueof" : { 2635 | "parameter_enum" : [ "LP", "HP" ], 2636 | "parameter_longname" : "live.tab[11]", 2637 | "parameter_mmax" : 1, 2638 | "parameter_shortname" : "live.tab", 2639 | "parameter_type" : 2, 2640 | "parameter_unitstyle" : 9 2641 | } 2642 | 2643 | } 2644 | , 2645 | "varname" : "live.tab[6]" 2646 | } 2647 | 2648 | } 2649 | , { 2650 | "box" : { 2651 | "appearance" : 3, 2652 | "id" : "obj-68", 2653 | "maxclass" : "live.dial", 2654 | "numinlets" : 1, 2655 | "numoutlets" : 2, 2656 | "outlettype" : [ "", "float" ], 2657 | "parameter_enable" : 1, 2658 | "patching_rect" : [ 96.0, 129.0, 50.0, 63.0 ], 2659 | "presentation" : 1, 2660 | "presentation_rect" : [ 94.0, 28.0, 50.0, 63.0 ], 2661 | "saved_attribute_attributes" : { 2662 | "valueof" : { 2663 | "parameter_exponent" : 4.0, 2664 | "parameter_initial" : [ 1000.0 ], 2665 | "parameter_initial_enable" : 1, 2666 | "parameter_longname" : "Cutoff[10]", 2667 | "parameter_mmax" : 20000.0, 2668 | "parameter_shortname" : "Cutoff", 2669 | "parameter_type" : 0, 2670 | "parameter_unitstyle" : 3 2671 | } 2672 | 2673 | } 2674 | , 2675 | "varname" : "cutoff[5]" 2676 | } 2677 | 2678 | } 2679 | ], 2680 | "lines" : [ { 2681 | "patchline" : { 2682 | "destination" : [ "obj-78", 0 ], 2683 | "source" : [ "obj-1", 1 ] 2684 | } 2685 | 2686 | } 2687 | , { 2688 | "patchline" : { 2689 | "destination" : [ "obj-96", 0 ], 2690 | "source" : [ "obj-10", 0 ] 2691 | } 2692 | 2693 | } 2694 | , { 2695 | "patchline" : { 2696 | "destination" : [ "obj-101", 0 ], 2697 | "source" : [ "obj-100", 0 ] 2698 | } 2699 | 2700 | } 2701 | , { 2702 | "patchline" : { 2703 | "destination" : [ "obj-105", 0 ], 2704 | "source" : [ "obj-104", 0 ] 2705 | } 2706 | 2707 | } 2708 | , { 2709 | "patchline" : { 2710 | "destination" : [ "obj-107", 0 ], 2711 | "source" : [ "obj-106", 0 ] 2712 | } 2713 | 2714 | } 2715 | , { 2716 | "patchline" : { 2717 | "destination" : [ "obj-109", 0 ], 2718 | "source" : [ "obj-108", 0 ] 2719 | } 2720 | 2721 | } 2722 | , { 2723 | "patchline" : { 2724 | "destination" : [ "obj-90", 0 ], 2725 | "source" : [ "obj-11", 1 ] 2726 | } 2727 | 2728 | } 2729 | , { 2730 | "patchline" : { 2731 | "destination" : [ "obj-111", 0 ], 2732 | "source" : [ "obj-110", 0 ] 2733 | } 2734 | 2735 | } 2736 | , { 2737 | "patchline" : { 2738 | "destination" : [ "obj-113", 0 ], 2739 | "source" : [ "obj-112", 0 ] 2740 | } 2741 | 2742 | } 2743 | , { 2744 | "patchline" : { 2745 | "destination" : [ "obj-117", 0 ], 2746 | "source" : [ "obj-116", 0 ] 2747 | } 2748 | 2749 | } 2750 | , { 2751 | "patchline" : { 2752 | "destination" : [ "obj-119", 0 ], 2753 | "source" : [ "obj-118", 0 ] 2754 | } 2755 | 2756 | } 2757 | , { 2758 | "patchline" : { 2759 | "destination" : [ "obj-123", 0 ], 2760 | "source" : [ "obj-122", 0 ] 2761 | } 2762 | 2763 | } 2764 | , { 2765 | "patchline" : { 2766 | "destination" : [ "obj-125", 0 ], 2767 | "source" : [ "obj-124", 0 ] 2768 | } 2769 | 2770 | } 2771 | , { 2772 | "patchline" : { 2773 | "destination" : [ "obj-127", 0 ], 2774 | "source" : [ "obj-126", 0 ] 2775 | } 2776 | 2777 | } 2778 | , { 2779 | "patchline" : { 2780 | "destination" : [ "obj-92", 0 ], 2781 | "source" : [ "obj-13", 0 ] 2782 | } 2783 | 2784 | } 2785 | , { 2786 | "patchline" : { 2787 | "destination" : [ "obj-135", 0 ], 2788 | "source" : [ "obj-134", 0 ] 2789 | } 2790 | 2791 | } 2792 | , { 2793 | "patchline" : { 2794 | "destination" : [ "obj-137", 0 ], 2795 | "source" : [ "obj-136", 0 ] 2796 | } 2797 | 2798 | } 2799 | , { 2800 | "patchline" : { 2801 | "destination" : [ "obj-139", 0 ], 2802 | "source" : [ "obj-138", 0 ] 2803 | } 2804 | 2805 | } 2806 | , { 2807 | "patchline" : { 2808 | "destination" : [ "obj-141", 0 ], 2809 | "source" : [ "obj-140", 0 ] 2810 | } 2811 | 2812 | } 2813 | , { 2814 | "patchline" : { 2815 | "destination" : [ "obj-68", 0 ], 2816 | "order" : 1, 2817 | "source" : [ "obj-141", 0 ] 2818 | } 2819 | 2820 | } 2821 | , { 2822 | "patchline" : { 2823 | "destination" : [ "obj-69", 0 ], 2824 | "order" : 0, 2825 | "source" : [ "obj-141", 0 ] 2826 | } 2827 | 2828 | } 2829 | , { 2830 | "patchline" : { 2831 | "destination" : [ "obj-2", 0 ], 2832 | "source" : [ "obj-142", 0 ] 2833 | } 2834 | 2835 | } 2836 | , { 2837 | "patchline" : { 2838 | "destination" : [ "obj-31", 0 ], 2839 | "order" : 2, 2840 | "source" : [ "obj-143", 0 ] 2841 | } 2842 | 2843 | } 2844 | , { 2845 | "patchline" : { 2846 | "destination" : [ "obj-48", 0 ], 2847 | "order" : 1, 2848 | "source" : [ "obj-143", 0 ] 2849 | } 2850 | 2851 | } 2852 | , { 2853 | "patchline" : { 2854 | "destination" : [ "obj-55", 0 ], 2855 | "order" : 0, 2856 | "source" : [ "obj-143", 0 ] 2857 | } 2858 | 2859 | } 2860 | , { 2861 | "patchline" : { 2862 | "destination" : [ "obj-143", 0 ], 2863 | "source" : [ "obj-144", 0 ] 2864 | } 2865 | 2866 | } 2867 | , { 2868 | "patchline" : { 2869 | "destination" : [ "obj-33", 0 ], 2870 | "order" : 1, 2871 | "source" : [ "obj-145", 0 ] 2872 | } 2873 | 2874 | } 2875 | , { 2876 | "patchline" : { 2877 | "destination" : [ "obj-34", 0 ], 2878 | "order" : 3, 2879 | "source" : [ "obj-145", 0 ] 2880 | } 2881 | 2882 | } 2883 | , { 2884 | "patchline" : { 2885 | "destination" : [ "obj-49", 0 ], 2886 | "order" : 2, 2887 | "source" : [ "obj-145", 0 ] 2888 | } 2889 | 2890 | } 2891 | , { 2892 | "patchline" : { 2893 | "destination" : [ "obj-63", 0 ], 2894 | "order" : 0, 2895 | "source" : [ "obj-145", 0 ] 2896 | } 2897 | 2898 | } 2899 | , { 2900 | "patchline" : { 2901 | "destination" : [ "obj-145", 0 ], 2902 | "source" : [ "obj-146", 0 ] 2903 | } 2904 | 2905 | } 2906 | , { 2907 | "patchline" : { 2908 | "destination" : [ "obj-1", 0 ], 2909 | "order" : 1, 2910 | "source" : [ "obj-147", 0 ] 2911 | } 2912 | 2913 | } 2914 | , { 2915 | "patchline" : { 2916 | "destination" : [ "obj-36", 0 ], 2917 | "order" : 0, 2918 | "source" : [ "obj-147", 0 ] 2919 | } 2920 | 2921 | } 2922 | , { 2923 | "patchline" : { 2924 | "destination" : [ "obj-37", 0 ], 2925 | "order" : 2, 2926 | "source" : [ "obj-147", 0 ] 2927 | } 2928 | 2929 | } 2930 | , { 2931 | "patchline" : { 2932 | "destination" : [ "obj-147", 0 ], 2933 | "source" : [ "obj-148", 0 ] 2934 | } 2935 | 2936 | } 2937 | , { 2938 | "patchline" : { 2939 | "destination" : [ "obj-40", 0 ], 2940 | "order" : 1, 2941 | "source" : [ "obj-149", 0 ] 2942 | } 2943 | 2944 | } 2945 | , { 2946 | "patchline" : { 2947 | "destination" : [ "obj-8", 0 ], 2948 | "order" : 0, 2949 | "source" : [ "obj-149", 0 ] 2950 | } 2951 | 2952 | } 2953 | , { 2954 | "patchline" : { 2955 | "destination" : [ "obj-98", 0 ], 2956 | "source" : [ "obj-15", 1 ] 2957 | } 2958 | 2959 | } 2960 | , { 2961 | "patchline" : { 2962 | "destination" : [ "obj-149", 0 ], 2963 | "source" : [ "obj-150", 0 ] 2964 | } 2965 | 2966 | } 2967 | , { 2968 | "patchline" : { 2969 | "destination" : [ "obj-157", 0 ], 2970 | "source" : [ "obj-156", 0 ] 2971 | } 2972 | 2973 | } 2974 | , { 2975 | "patchline" : { 2976 | "destination" : [ "obj-156", 0 ], 2977 | "order" : 0, 2978 | "source" : [ "obj-158", 0 ] 2979 | } 2980 | 2981 | } 2982 | , { 2983 | "patchline" : { 2984 | "destination" : [ "obj-6", 0 ], 2985 | "order" : 1, 2986 | "source" : [ "obj-158", 0 ] 2987 | } 2988 | 2989 | } 2990 | , { 2991 | "patchline" : { 2992 | "destination" : [ "obj-7", 0 ], 2993 | "order" : 2, 2994 | "source" : [ "obj-158", 0 ] 2995 | } 2996 | 2997 | } 2998 | , { 2999 | "patchline" : { 3000 | "destination" : [ "obj-158", 0 ], 3001 | "source" : [ "obj-159", 0 ] 3002 | } 3003 | 3004 | } 3005 | , { 3006 | "patchline" : { 3007 | "destination" : [ "obj-100", 0 ], 3008 | "source" : [ "obj-16", 0 ] 3009 | } 3010 | 3011 | } 3012 | , { 3013 | "patchline" : { 3014 | "destination" : [ "obj-161", 0 ], 3015 | "source" : [ "obj-160", 0 ] 3016 | } 3017 | 3018 | } 3019 | , { 3020 | "patchline" : { 3021 | "destination" : [ "obj-163", 0 ], 3022 | "source" : [ "obj-162", 0 ] 3023 | } 3024 | 3025 | } 3026 | , { 3027 | "patchline" : { 3028 | "destination" : [ "obj-165", 0 ], 3029 | "source" : [ "obj-164", 0 ] 3030 | } 3031 | 3032 | } 3033 | , { 3034 | "patchline" : { 3035 | "destination" : [ "obj-11", 0 ], 3036 | "order" : 1, 3037 | "source" : [ "obj-166", 0 ] 3038 | } 3039 | 3040 | } 3041 | , { 3042 | "patchline" : { 3043 | "destination" : [ "obj-13", 0 ], 3044 | "order" : 2, 3045 | "source" : [ "obj-166", 0 ] 3046 | } 3047 | 3048 | } 3049 | , { 3050 | "patchline" : { 3051 | "destination" : [ "obj-164", 0 ], 3052 | "order" : 0, 3053 | "source" : [ "obj-166", 0 ] 3054 | } 3055 | 3056 | } 3057 | , { 3058 | "patchline" : { 3059 | "destination" : [ "obj-166", 0 ], 3060 | "source" : [ "obj-167", 0 ] 3061 | } 3062 | 3063 | } 3064 | , { 3065 | "patchline" : { 3066 | "destination" : [ "obj-10", 0 ], 3067 | "order" : 2, 3068 | "source" : [ "obj-168", 0 ] 3069 | } 3070 | 3071 | } 3072 | , { 3073 | "patchline" : { 3074 | "destination" : [ "obj-160", 0 ], 3075 | "order" : 0, 3076 | "source" : [ "obj-168", 0 ] 3077 | } 3078 | 3079 | } 3080 | , { 3081 | "patchline" : { 3082 | "destination" : [ "obj-9", 0 ], 3083 | "order" : 1, 3084 | "source" : [ "obj-168", 0 ] 3085 | } 3086 | 3087 | } 3088 | , { 3089 | "patchline" : { 3090 | "destination" : [ "obj-168", 0 ], 3091 | "source" : [ "obj-169", 0 ] 3092 | } 3093 | 3094 | } 3095 | , { 3096 | "patchline" : { 3097 | "destination" : [ "obj-152", 0 ], 3098 | "source" : [ "obj-17", 0 ] 3099 | } 3100 | 3101 | } 3102 | , { 3103 | "patchline" : { 3104 | "destination" : [ "obj-15", 0 ], 3105 | "order" : 1, 3106 | "source" : [ "obj-170", 0 ] 3107 | } 3108 | 3109 | } 3110 | , { 3111 | "patchline" : { 3112 | "destination" : [ "obj-16", 0 ], 3113 | "order" : 2, 3114 | "source" : [ "obj-170", 0 ] 3115 | } 3116 | 3117 | } 3118 | , { 3119 | "patchline" : { 3120 | "destination" : [ "obj-162", 0 ], 3121 | "order" : 0, 3122 | "source" : [ "obj-170", 0 ] 3123 | } 3124 | 3125 | } 3126 | , { 3127 | "patchline" : { 3128 | "destination" : [ "obj-170", 0 ], 3129 | "source" : [ "obj-171", 0 ] 3130 | } 3131 | 3132 | } 3133 | , { 3134 | "patchline" : { 3135 | "destination" : [ "obj-18", 0 ], 3136 | "order" : 1, 3137 | "source" : [ "obj-172", 0 ] 3138 | } 3139 | 3140 | } 3141 | , { 3142 | "patchline" : { 3143 | "destination" : [ "obj-197", 0 ], 3144 | "order" : 0, 3145 | "source" : [ "obj-172", 0 ] 3146 | } 3147 | 3148 | } 3149 | , { 3150 | "patchline" : { 3151 | "destination" : [ "obj-20", 0 ], 3152 | "order" : 2, 3153 | "source" : [ "obj-172", 0 ] 3154 | } 3155 | 3156 | } 3157 | , { 3158 | "patchline" : { 3159 | "destination" : [ "obj-172", 0 ], 3160 | "source" : [ "obj-173", 0 ] 3161 | } 3162 | 3163 | } 3164 | , { 3165 | "patchline" : { 3166 | "destination" : [ "obj-22", 0 ], 3167 | "order" : 1, 3168 | "source" : [ "obj-174", 0 ] 3169 | } 3170 | 3171 | } 3172 | , { 3173 | "patchline" : { 3174 | "destination" : [ "obj-23", 0 ], 3175 | "order" : 0, 3176 | "source" : [ "obj-174", 0 ] 3177 | } 3178 | 3179 | } 3180 | , { 3181 | "patchline" : { 3182 | "destination" : [ "obj-24", 0 ], 3183 | "order" : 2, 3184 | "source" : [ "obj-174", 0 ] 3185 | } 3186 | 3187 | } 3188 | , { 3189 | "patchline" : { 3190 | "destination" : [ "obj-174", 0 ], 3191 | "source" : [ "obj-175", 0 ] 3192 | } 3193 | 3194 | } 3195 | , { 3196 | "patchline" : { 3197 | "destination" : [ "obj-198", 0 ], 3198 | "order" : 0, 3199 | "source" : [ "obj-176", 0 ] 3200 | } 3201 | 3202 | } 3203 | , { 3204 | "patchline" : { 3205 | "destination" : [ "obj-26", 0 ], 3206 | "order" : 1, 3207 | "source" : [ "obj-176", 0 ] 3208 | } 3209 | 3210 | } 3211 | , { 3212 | "patchline" : { 3213 | "destination" : [ "obj-27", 0 ], 3214 | "order" : 2, 3215 | "source" : [ "obj-176", 0 ] 3216 | } 3217 | 3218 | } 3219 | , { 3220 | "patchline" : { 3221 | "destination" : [ "obj-176", 0 ], 3222 | "source" : [ "obj-177", 0 ] 3223 | } 3224 | 3225 | } 3226 | , { 3227 | "patchline" : { 3228 | "destination" : [ "obj-185", 0 ], 3229 | "order" : 0, 3230 | "source" : [ "obj-178", 0 ] 3231 | } 3232 | 3233 | } 3234 | , { 3235 | "patchline" : { 3236 | "destination" : [ "obj-45", 0 ], 3237 | "order" : 1, 3238 | "source" : [ "obj-178", 0 ] 3239 | } 3240 | 3241 | } 3242 | , { 3243 | "patchline" : { 3244 | "destination" : [ "obj-46", 0 ], 3245 | "order" : 2, 3246 | "source" : [ "obj-178", 0 ] 3247 | } 3248 | 3249 | } 3250 | , { 3251 | "patchline" : { 3252 | "destination" : [ "obj-47", 0 ], 3253 | "order" : 3, 3254 | "source" : [ "obj-178", 0 ] 3255 | } 3256 | 3257 | } 3258 | , { 3259 | "patchline" : { 3260 | "destination" : [ "obj-178", 0 ], 3261 | "source" : [ "obj-179", 0 ] 3262 | } 3263 | 3264 | } 3265 | , { 3266 | "patchline" : { 3267 | "destination" : [ "obj-104", 0 ], 3268 | "source" : [ "obj-18", 1 ] 3269 | } 3270 | 3271 | } 3272 | , { 3273 | "patchline" : { 3274 | "destination" : [ "obj-183", 0 ], 3275 | "order" : 0, 3276 | "source" : [ "obj-181", 0 ] 3277 | } 3278 | 3279 | } 3280 | , { 3281 | "patchline" : { 3282 | "destination" : [ "obj-51", 0 ], 3283 | "order" : 1, 3284 | "source" : [ "obj-181", 0 ] 3285 | } 3286 | 3287 | } 3288 | , { 3289 | "patchline" : { 3290 | "destination" : [ "obj-52", 0 ], 3291 | "order" : 2, 3292 | "source" : [ "obj-181", 0 ] 3293 | } 3294 | 3295 | } 3296 | , { 3297 | "patchline" : { 3298 | "destination" : [ "obj-53", 0 ], 3299 | "order" : 3, 3300 | "source" : [ "obj-181", 0 ] 3301 | } 3302 | 3303 | } 3304 | , { 3305 | "patchline" : { 3306 | "destination" : [ "obj-181", 0 ], 3307 | "source" : [ "obj-182", 0 ] 3308 | } 3309 | 3310 | } 3311 | , { 3312 | "patchline" : { 3313 | "destination" : [ "obj-184", 0 ], 3314 | "source" : [ "obj-183", 0 ] 3315 | } 3316 | 3317 | } 3318 | , { 3319 | "patchline" : { 3320 | "destination" : [ "obj-186", 0 ], 3321 | "source" : [ "obj-185", 0 ] 3322 | } 3323 | 3324 | } 3325 | , { 3326 | "patchline" : { 3327 | "destination" : [ "obj-193", 0 ], 3328 | "source" : [ "obj-192", 1 ] 3329 | } 3330 | 3331 | } 3332 | , { 3333 | "patchline" : { 3334 | "destination" : [ "obj-194", 0 ], 3335 | "source" : [ "obj-193", 0 ] 3336 | } 3337 | 3338 | } 3339 | , { 3340 | "patchline" : { 3341 | "destination" : [ "obj-103", 0 ], 3342 | "source" : [ "obj-197", 0 ] 3343 | } 3344 | 3345 | } 3346 | , { 3347 | "patchline" : { 3348 | "destination" : [ "obj-199", 0 ], 3349 | "source" : [ "obj-198", 0 ] 3350 | } 3351 | 3352 | } 3353 | , { 3354 | "patchline" : { 3355 | "destination" : [ "obj-188", 0 ], 3356 | "source" : [ "obj-199", 0 ] 3357 | } 3358 | 3359 | } 3360 | , { 3361 | "patchline" : { 3362 | "destination" : [ "obj-106", 0 ], 3363 | "source" : [ "obj-20", 0 ] 3364 | } 3365 | 3366 | } 3367 | , { 3368 | "patchline" : { 3369 | "destination" : [ "obj-208", 0 ], 3370 | "source" : [ "obj-200", 0 ] 3371 | } 3372 | 3373 | } 3374 | , { 3375 | "patchline" : { 3376 | "destination" : [ "obj-210", 0 ], 3377 | "source" : [ "obj-201", 1 ] 3378 | } 3379 | 3380 | } 3381 | , { 3382 | "patchline" : { 3383 | "destination" : [ "obj-212", 0 ], 3384 | "source" : [ "obj-202", 0 ] 3385 | } 3386 | 3387 | } 3388 | , { 3389 | "patchline" : { 3390 | "destination" : [ "obj-207", 0 ], 3391 | "source" : [ "obj-206", 0 ] 3392 | } 3393 | 3394 | } 3395 | , { 3396 | "patchline" : { 3397 | "destination" : [ "obj-209", 0 ], 3398 | "source" : [ "obj-208", 0 ] 3399 | } 3400 | 3401 | } 3402 | , { 3403 | "patchline" : { 3404 | "destination" : [ "obj-211", 0 ], 3405 | "source" : [ "obj-210", 0 ] 3406 | } 3407 | 3408 | } 3409 | , { 3410 | "patchline" : { 3411 | "destination" : [ "obj-213", 0 ], 3412 | "source" : [ "obj-212", 0 ] 3413 | } 3414 | 3415 | } 3416 | , { 3417 | "patchline" : { 3418 | "destination" : [ "obj-200", 0 ], 3419 | "order" : 1, 3420 | "source" : [ "obj-214", 0 ] 3421 | } 3422 | 3423 | } 3424 | , { 3425 | "patchline" : { 3426 | "destination" : [ "obj-201", 0 ], 3427 | "order" : 2, 3428 | "source" : [ "obj-214", 0 ] 3429 | } 3430 | 3431 | } 3432 | , { 3433 | "patchline" : { 3434 | "destination" : [ "obj-202", 0 ], 3435 | "order" : 3, 3436 | "source" : [ "obj-214", 0 ] 3437 | } 3438 | 3439 | } 3440 | , { 3441 | "patchline" : { 3442 | "destination" : [ "obj-206", 0 ], 3443 | "order" : 0, 3444 | "source" : [ "obj-214", 0 ] 3445 | } 3446 | 3447 | } 3448 | , { 3449 | "patchline" : { 3450 | "destination" : [ "obj-214", 0 ], 3451 | "source" : [ "obj-215", 0 ] 3452 | } 3453 | 3454 | } 3455 | , { 3456 | "patchline" : { 3457 | "destination" : [ "obj-110", 0 ], 3458 | "source" : [ "obj-22", 1 ] 3459 | } 3460 | 3461 | } 3462 | , { 3463 | "patchline" : { 3464 | "destination" : [ "obj-108", 0 ], 3465 | "source" : [ "obj-23", 0 ] 3466 | } 3467 | 3468 | } 3469 | , { 3470 | "patchline" : { 3471 | "destination" : [ "obj-112", 0 ], 3472 | "source" : [ "obj-24", 0 ] 3473 | } 3474 | 3475 | } 3476 | , { 3477 | "patchline" : { 3478 | "destination" : [ "obj-116", 0 ], 3479 | "source" : [ "obj-26", 1 ] 3480 | } 3481 | 3482 | } 3483 | , { 3484 | "patchline" : { 3485 | "destination" : [ "obj-118", 0 ], 3486 | "source" : [ "obj-27", 0 ] 3487 | } 3488 | 3489 | } 3490 | , { 3491 | "patchline" : { 3492 | "destination" : [ "obj-56", 0 ], 3493 | "source" : [ "obj-31", 1 ] 3494 | } 3495 | 3496 | } 3497 | , { 3498 | "patchline" : { 3499 | "destination" : [ "obj-72", 0 ], 3500 | "source" : [ "obj-33", 0 ] 3501 | } 3502 | 3503 | } 3504 | , { 3505 | "patchline" : { 3506 | "destination" : [ "obj-65", 0 ], 3507 | "source" : [ "obj-34", 0 ] 3508 | } 3509 | 3510 | } 3511 | , { 3512 | "patchline" : { 3513 | "destination" : [ "obj-80", 0 ], 3514 | "source" : [ "obj-36", 0 ] 3515 | } 3516 | 3517 | } 3518 | , { 3519 | "patchline" : { 3520 | "destination" : [ "obj-74", 0 ], 3521 | "source" : [ "obj-37", 0 ] 3522 | } 3523 | 3524 | } 3525 | , { 3526 | "patchline" : { 3527 | "destination" : [ "obj-84", 0 ], 3528 | "source" : [ "obj-40", 0 ] 3529 | } 3530 | 3531 | } 3532 | , { 3533 | "patchline" : { 3534 | "destination" : [ "obj-32", 0 ], 3535 | "source" : [ "obj-41", 0 ] 3536 | } 3537 | 3538 | } 3539 | , { 3540 | "patchline" : { 3541 | "destination" : [ "obj-14", 0 ], 3542 | "source" : [ "obj-44", 0 ] 3543 | } 3544 | 3545 | } 3546 | , { 3547 | "patchline" : { 3548 | "destination" : [ "obj-122", 0 ], 3549 | "source" : [ "obj-45", 0 ] 3550 | } 3551 | 3552 | } 3553 | , { 3554 | "patchline" : { 3555 | "destination" : [ "obj-124", 0 ], 3556 | "source" : [ "obj-46", 1 ] 3557 | } 3558 | 3559 | } 3560 | , { 3561 | "patchline" : { 3562 | "destination" : [ "obj-126", 0 ], 3563 | "source" : [ "obj-47", 0 ] 3564 | } 3565 | 3566 | } 3567 | , { 3568 | "patchline" : { 3569 | "destination" : [ "obj-61", 0 ], 3570 | "source" : [ "obj-48", 0 ] 3571 | } 3572 | 3573 | } 3574 | , { 3575 | "patchline" : { 3576 | "destination" : [ "obj-67", 0 ], 3577 | "source" : [ "obj-49", 0 ] 3578 | } 3579 | 3580 | } 3581 | , { 3582 | "patchline" : { 3583 | "destination" : [ "obj-142", 0 ], 3584 | "order" : 1, 3585 | "source" : [ "obj-5", 0 ] 3586 | } 3587 | 3588 | } 3589 | , { 3590 | "patchline" : { 3591 | "destination" : [ "obj-71", 0 ], 3592 | "order" : 0, 3593 | "source" : [ "obj-5", 0 ] 3594 | } 3595 | 3596 | } 3597 | , { 3598 | "patchline" : { 3599 | "destination" : [ "obj-134", 0 ], 3600 | "source" : [ "obj-51", 0 ] 3601 | } 3602 | 3603 | } 3604 | , { 3605 | "patchline" : { 3606 | "destination" : [ "obj-136", 0 ], 3607 | "source" : [ "obj-52", 1 ] 3608 | } 3609 | 3610 | } 3611 | , { 3612 | "patchline" : { 3613 | "destination" : [ "obj-138", 0 ], 3614 | "source" : [ "obj-53", 0 ] 3615 | } 3616 | 3617 | } 3618 | , { 3619 | "patchline" : { 3620 | "destination" : [ "obj-50", 0 ], 3621 | "source" : [ "obj-55", 0 ] 3622 | } 3623 | 3624 | } 3625 | , { 3626 | "patchline" : { 3627 | "destination" : [ "obj-57", 0 ], 3628 | "source" : [ "obj-56", 0 ] 3629 | } 3630 | 3631 | } 3632 | , { 3633 | "patchline" : { 3634 | "destination" : [ "obj-86", 0 ], 3635 | "source" : [ "obj-6", 1 ] 3636 | } 3637 | 3638 | } 3639 | , { 3640 | "patchline" : { 3641 | "destination" : [ "obj-62", 0 ], 3642 | "source" : [ "obj-61", 0 ] 3643 | } 3644 | 3645 | } 3646 | , { 3647 | "patchline" : { 3648 | "destination" : [ "obj-64", 0 ], 3649 | "source" : [ "obj-63", 0 ] 3650 | } 3651 | 3652 | } 3653 | , { 3654 | "patchline" : { 3655 | "destination" : [ "obj-66", 0 ], 3656 | "source" : [ "obj-65", 0 ] 3657 | } 3658 | 3659 | } 3660 | , { 3661 | "patchline" : { 3662 | "destination" : [ "obj-66", 0 ], 3663 | "midpoints" : [ 679.5, 265.5, 615.5, 265.5 ], 3664 | "source" : [ "obj-67", 0 ] 3665 | } 3666 | 3667 | } 3668 | , { 3669 | "patchline" : { 3670 | "destination" : [ "obj-44", 0 ], 3671 | "source" : [ "obj-68", 0 ] 3672 | } 3673 | 3674 | } 3675 | , { 3676 | "patchline" : { 3677 | "destination" : [ "obj-41", 0 ], 3678 | "source" : [ "obj-69", 0 ] 3679 | } 3680 | 3681 | } 3682 | , { 3683 | "patchline" : { 3684 | "destination" : [ "obj-88", 0 ], 3685 | "source" : [ "obj-7", 0 ] 3686 | } 3687 | 3688 | } 3689 | , { 3690 | "patchline" : { 3691 | "destination" : [ "obj-73", 0 ], 3692 | "source" : [ "obj-71", 0 ] 3693 | } 3694 | 3695 | } 3696 | , { 3697 | "patchline" : { 3698 | "destination" : [ "obj-66", 0 ], 3699 | "midpoints" : [ 726.5, 265.5, 615.5, 265.5 ], 3700 | "source" : [ "obj-72", 0 ] 3701 | } 3702 | 3703 | } 3704 | , { 3705 | "patchline" : { 3706 | "destination" : [ "obj-4", 0 ], 3707 | "source" : [ "obj-73", 0 ] 3708 | } 3709 | 3710 | } 3711 | , { 3712 | "patchline" : { 3713 | "destination" : [ "obj-75", 0 ], 3714 | "source" : [ "obj-74", 0 ] 3715 | } 3716 | 3717 | } 3718 | , { 3719 | "patchline" : { 3720 | "destination" : [ "obj-79", 0 ], 3721 | "source" : [ "obj-78", 0 ] 3722 | } 3723 | 3724 | } 3725 | , { 3726 | "patchline" : { 3727 | "destination" : [ "obj-17", 0 ], 3728 | "source" : [ "obj-8", 0 ] 3729 | } 3730 | 3731 | } 3732 | , { 3733 | "patchline" : { 3734 | "destination" : [ "obj-81", 0 ], 3735 | "source" : [ "obj-80", 0 ] 3736 | } 3737 | 3738 | } 3739 | , { 3740 | "patchline" : { 3741 | "destination" : [ "obj-85", 0 ], 3742 | "source" : [ "obj-84", 0 ] 3743 | } 3744 | 3745 | } 3746 | , { 3747 | "patchline" : { 3748 | "destination" : [ "obj-87", 0 ], 3749 | "source" : [ "obj-86", 0 ] 3750 | } 3751 | 3752 | } 3753 | , { 3754 | "patchline" : { 3755 | "destination" : [ "obj-89", 0 ], 3756 | "source" : [ "obj-88", 0 ] 3757 | } 3758 | 3759 | } 3760 | , { 3761 | "patchline" : { 3762 | "destination" : [ "obj-94", 0 ], 3763 | "source" : [ "obj-9", 1 ] 3764 | } 3765 | 3766 | } 3767 | , { 3768 | "patchline" : { 3769 | "destination" : [ "obj-91", 0 ], 3770 | "source" : [ "obj-90", 0 ] 3771 | } 3772 | 3773 | } 3774 | , { 3775 | "patchline" : { 3776 | "destination" : [ "obj-93", 0 ], 3777 | "source" : [ "obj-92", 0 ] 3778 | } 3779 | 3780 | } 3781 | , { 3782 | "patchline" : { 3783 | "destination" : [ "obj-95", 0 ], 3784 | "source" : [ "obj-94", 0 ] 3785 | } 3786 | 3787 | } 3788 | , { 3789 | "patchline" : { 3790 | "destination" : [ "obj-97", 0 ], 3791 | "source" : [ "obj-96", 0 ] 3792 | } 3793 | 3794 | } 3795 | , { 3796 | "patchline" : { 3797 | "destination" : [ "obj-99", 0 ], 3798 | "source" : [ "obj-98", 0 ] 3799 | } 3800 | 3801 | } 3802 | ] 3803 | } 3804 | 3805 | } 3806 | -------------------------------------------------------------------------------- /patchers/fc.allpass.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 679.0, 272.0, 598.0, 429.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-13", 44 | "maxclass" : "newobj", 45 | "numinlets" : 0, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "" ], 48 | "patching_rect" : [ 478.0, 15.0, 103.0, 22.0 ], 49 | "text" : "in 3 @comment g" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-9", 56 | "maxclass" : "newobj", 57 | "numinlets" : 1, 58 | "numoutlets" : 0, 59 | "patching_rect" : [ 15.0, 390.0, 141.0, 22.0 ], 60 | "text" : "out 1 @comment allpass" 61 | } 62 | 63 | } 64 | , { 65 | "box" : { 66 | "id" : "obj-7", 67 | "maxclass" : "newobj", 68 | "numinlets" : 0, 69 | "numoutlets" : 1, 70 | "outlettype" : [ "" ], 71 | "patching_rect" : [ 246.5, 15.0, 119.0, 22.0 ], 72 | "text" : "in 2 @comment time" 73 | } 74 | 75 | } 76 | , { 77 | "box" : { 78 | "id" : "obj-6", 79 | "maxclass" : "newobj", 80 | "numinlets" : 0, 81 | "numoutlets" : 1, 82 | "outlettype" : [ "" ], 83 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 84 | "text" : "in 1 @comment input" 85 | } 86 | 87 | } 88 | , { 89 | "box" : { 90 | "code" : "/* Variable delay allpass\n * stable g between -1 .. 1\r\n */\r\n\nallpass(d, xin, time, g) {\n z = d.read(time, interp = \"cubic\");\n\n x = xin + z * g;\n y = z + x * -g;\n\n d.write(x);\n\n return y;\n}\r\n\r\nDelay d0(samplerate);\r\ng_range = clip(in3, -1, 1);\r\n\r\nout1 = allpass(d0, in1, in2, g_range);", 91 | "fontface" : 0, 92 | "fontname" : "", 93 | "fontsize" : 12.0, 94 | "id" : "obj-5", 95 | "maxclass" : "codebox", 96 | "numinlets" : 3, 97 | "numoutlets" : 1, 98 | "outlettype" : [ "" ], 99 | "patching_rect" : [ 15.0, 53.0, 482.0, 322.0 ] 100 | } 101 | 102 | } 103 | ], 104 | "lines" : [ { 105 | "patchline" : { 106 | "destination" : [ "obj-5", 2 ], 107 | "source" : [ "obj-13", 0 ] 108 | } 109 | 110 | } 111 | , { 112 | "patchline" : { 113 | "destination" : [ "obj-9", 0 ], 114 | "source" : [ "obj-5", 0 ] 115 | } 116 | 117 | } 118 | , { 119 | "patchline" : { 120 | "destination" : [ "obj-5", 0 ], 121 | "source" : [ "obj-6", 0 ] 122 | } 123 | 124 | } 125 | , { 126 | "patchline" : { 127 | "destination" : [ "obj-5", 1 ], 128 | "source" : [ "obj-7", 0 ] 129 | } 130 | 131 | } 132 | ] 133 | } 134 | 135 | } 136 | -------------------------------------------------------------------------------- /patchers/fc.bell.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 444.0, 100.0, 755.0, 766.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-35", 44 | "maxclass" : "newobj", 45 | "numinlets" : 0, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "" ], 48 | "patching_rect" : [ 566.0, 15.0, 153.0, 22.0 ], 49 | "text" : "in 4 @comment \"gain (dB)\"" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-21", 56 | "maxclass" : "newobj", 57 | "numinlets" : 0, 58 | "numoutlets" : 1, 59 | "outlettype" : [ "" ], 60 | "patching_rect" : [ 382.333333333333314, 15.0, 103.0, 22.0 ], 61 | "text" : "in 3 @comment q" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "id" : "obj-9", 68 | "maxclass" : "newobj", 69 | "numinlets" : 1, 70 | "numoutlets" : 0, 71 | "patching_rect" : [ 15.0, 720.0, 117.0, 22.0 ], 72 | "text" : "out 1 @comment eq" 73 | } 74 | 75 | } 76 | , { 77 | "box" : { 78 | "id" : "obj-7", 79 | "maxclass" : "newobj", 80 | "numinlets" : 0, 81 | "numoutlets" : 1, 82 | "outlettype" : [ "" ], 83 | "patching_rect" : [ 198.666666666666657, 15.0, 149.0, 22.0 ], 84 | "text" : "in 2 @comment frequency" 85 | } 86 | 87 | } 88 | , { 89 | "box" : { 90 | "id" : "obj-6", 91 | "maxclass" : "newobj", 92 | "numinlets" : 0, 93 | "numoutlets" : 1, 94 | "outlettype" : [ "" ], 95 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 96 | "text" : "in 1 @comment input" 97 | } 98 | 99 | } 100 | , { 101 | "box" : { 102 | "code" : "/* SVF structure by Andrew Simper\r\n * Low, band, high, notch and peak with bounded terms\n * https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf\n *\r\n * stable cf between 0 .. sr/2\r\n */\n\n// Bell EQ\n\neq_bell(xin, cf, q, gain) {\n History y0(0), y1(0), a1(0), a2(0), a3(0);\n\n A = pow(10, gain / 40);\n\n g = tan(cf * pi / samplerate);\n r = 1 / (q * A);\n\n a1 = 1 / (1 + g * (g + r));\n a2 = g * a1;\n a3 = g * a2;\n\n m0 = 1;\n m1 = r * (A * A - 1);\n m2 = 0;\n\n v3 = xin - y1;\n v1 = a1 * y0 + a2 * v3;\n v2 = y1 + a2 * y0 + a3 * v3;\n\n y0 = 2 * v1 - y0;\n y1 = 2 * v2 - y1;\n\n return xin + m1 * v1;\n}\r\n\r\nlimit = samplerate / 2;\r\n\r\ncf = clip(in2, 0, limit);\r\nq = clip(in3, 0, 1) * 99 + 1;\r\ngain = clip(in4, -60, 60);\r\n\r\nout1 = eq_bell(in1, cf, q, gain);", 103 | "fontface" : 0, 104 | "fontname" : "", 105 | "fontsize" : 12.0, 106 | "id" : "obj-5", 107 | "maxclass" : "codebox", 108 | "numinlets" : 4, 109 | "numoutlets" : 1, 110 | "outlettype" : [ "" ], 111 | "patching_rect" : [ 15.0, 53.0, 570.0, 652.0 ] 112 | } 113 | 114 | } 115 | ], 116 | "lines" : [ { 117 | "patchline" : { 118 | "destination" : [ "obj-5", 2 ], 119 | "source" : [ "obj-21", 0 ] 120 | } 121 | 122 | } 123 | , { 124 | "patchline" : { 125 | "destination" : [ "obj-5", 3 ], 126 | "source" : [ "obj-35", 0 ] 127 | } 128 | 129 | } 130 | , { 131 | "patchline" : { 132 | "destination" : [ "obj-9", 0 ], 133 | "source" : [ "obj-5", 0 ] 134 | } 135 | 136 | } 137 | , { 138 | "patchline" : { 139 | "destination" : [ "obj-5", 0 ], 140 | "source" : [ "obj-6", 0 ] 141 | } 142 | 143 | } 144 | , { 145 | "patchline" : { 146 | "destination" : [ "obj-5", 1 ], 147 | "source" : [ "obj-7", 0 ] 148 | } 149 | 150 | } 151 | ] 152 | } 153 | 154 | } 155 | -------------------------------------------------------------------------------- /patchers/fc.comb.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 434.0, 394.0, 677.0, 397.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-17", 44 | "maxclass" : "newobj", 45 | "numinlets" : 0, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "" ], 48 | "patching_rect" : [ 478.0, 15.0, 177.0, 22.0 ], 49 | "text" : "in 4 @comment \"polarity (bool)\"" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-13", 56 | "maxclass" : "newobj", 57 | "numinlets" : 0, 58 | "numoutlets" : 1, 59 | "outlettype" : [ "" ], 60 | "patching_rect" : [ 323.666666666666686, 15.0, 145.0, 22.0 ], 61 | "text" : "in 3 @comment feedback" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "id" : "obj-9", 68 | "maxclass" : "newobj", 69 | "numinlets" : 1, 70 | "numoutlets" : 0, 71 | "patching_rect" : [ 15.0, 360.0, 133.0, 22.0 ], 72 | "text" : "out 1 @comment comb" 73 | } 74 | 75 | } 76 | , { 77 | "box" : { 78 | "id" : "obj-7", 79 | "maxclass" : "newobj", 80 | "numinlets" : 0, 81 | "numoutlets" : 1, 82 | "outlettype" : [ "" ], 83 | "patching_rect" : [ 169.333333333333343, 15.0, 149.0, 22.0 ], 84 | "text" : "in 2 @comment frequency" 85 | } 86 | 87 | } 88 | , { 89 | "box" : { 90 | "id" : "obj-6", 91 | "maxclass" : "newobj", 92 | "numinlets" : 0, 93 | "numoutlets" : 1, 94 | "outlettype" : [ "" ], 95 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 96 | "text" : "in 1 @comment input" 97 | } 98 | 99 | } 100 | , { 101 | "box" : { 102 | "code" : "/* Feedback comb filter\r\n * fb range safe between -1 .. 1\r\n */\n\ncomb_fb(xin, freq, fb, polarity) {\n History z0(0);\n Delay d0(samplerate);\n\n freq_ = samplerate / freq;\n\n d0.write(xin + (polarity ? z0 : -z0) * fb);\n z0 = d0.read(freq_, interp = \"linear\");\n\n return xin + polarity ? z0 : -z0;\n}\r\n\r\nfb = clip(in3, -1, 1);\r\n\r\nout1 = comb_fb(in1, in2, fb, in4);", 103 | "fontface" : 0, 104 | "fontname" : "", 105 | "fontsize" : 12.0, 106 | "id" : "obj-5", 107 | "maxclass" : "codebox", 108 | "numinlets" : 4, 109 | "numoutlets" : 1, 110 | "outlettype" : [ "" ], 111 | "patching_rect" : [ 15.0, 53.0, 482.0, 292.0 ] 112 | } 113 | 114 | } 115 | ], 116 | "lines" : [ { 117 | "patchline" : { 118 | "destination" : [ "obj-5", 2 ], 119 | "source" : [ "obj-13", 0 ] 120 | } 121 | 122 | } 123 | , { 124 | "patchline" : { 125 | "destination" : [ "obj-5", 3 ], 126 | "source" : [ "obj-17", 0 ] 127 | } 128 | 129 | } 130 | , { 131 | "patchline" : { 132 | "destination" : [ "obj-9", 0 ], 133 | "source" : [ "obj-5", 0 ] 134 | } 135 | 136 | } 137 | , { 138 | "patchline" : { 139 | "destination" : [ "obj-5", 0 ], 140 | "source" : [ "obj-6", 0 ] 141 | } 142 | 143 | } 144 | , { 145 | "patchline" : { 146 | "destination" : [ "obj-5", 1 ], 147 | "source" : [ "obj-7", 0 ] 148 | } 149 | 150 | } 151 | ] 152 | } 153 | 154 | } 155 | -------------------------------------------------------------------------------- /patchers/fc.diode.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 437.0, 100.0, 755.0, 766.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-35", 44 | "maxclass" : "newobj", 45 | "numinlets" : 0, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "" ], 48 | "patching_rect" : [ 581.0, 15.0, 149.0, 22.0 ], 49 | "text" : "in 4 @comment saturation" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-21", 56 | "maxclass" : "newobj", 57 | "numinlets" : 0, 58 | "numoutlets" : 1, 59 | "outlettype" : [ "" ], 60 | "patching_rect" : [ 392.333333333333314, 15.0, 103.0, 22.0 ], 61 | "text" : "in 3 @comment q" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "id" : "obj-9", 68 | "maxclass" : "newobj", 69 | "numinlets" : 1, 70 | "numoutlets" : 0, 71 | "patching_rect" : [ 15.0, 720.0, 147.0, 22.0 ], 72 | "text" : "out 1 @comment lowpass" 73 | } 74 | 75 | } 76 | , { 77 | "box" : { 78 | "id" : "obj-7", 79 | "maxclass" : "newobj", 80 | "numinlets" : 0, 81 | "numoutlets" : 1, 82 | "outlettype" : [ "" ], 83 | "patching_rect" : [ 203.666666666666657, 15.0, 149.0, 22.0 ], 84 | "text" : "in 2 @comment frequency" 85 | } 86 | 87 | } 88 | , { 89 | "box" : { 90 | "id" : "obj-6", 91 | "maxclass" : "newobj", 92 | "numinlets" : 0, 93 | "numoutlets" : 1, 94 | "outlettype" : [ "" ], 95 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 96 | "text" : "in 1 @comment input" 97 | } 98 | 99 | } 100 | , { 101 | "box" : { 102 | "code" : "/* Zero Delay Feedback filters\n * using trapezoidal integrator by Vadim Zavalishin\n * https://www.discodsp.net/VAFilterDesign_2.1.2.pdf\n *\n * based on implementations by Will Pirkle and Steven Yi for Csound\n * \n * http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.2.0.pdf\n * http://www.willpirkle.com/Downloads/AN-5Korg35_V3.pdf\n * http://www.willpirkle.com/Downloads/AN-6DiodeLadderFilter.pdf\n * http://www.willpirkle.com/Downloads/AN-7Korg35HPF_V2.pdf\n * https://github.com/csound/csound/blob/master/Opcodes/wpfilters.c\n */\r\n\r\n/* Diode ladder lowpass\n * stable cf between 0 .. sr/3\n * safe q between 0 .. 19\n */\n\nzdf_diode(xin, cf, q, sat) {\n History z0(0), z1(0), z2(0), z3(0),\n a1(1), a2(0.5), a3(0.5), a4(0.5);\n\n T = 1 / samplerate;\n T_div_two = T / 2;\n two_div_T = 2 / T;\n\n wd = twopi * cf;\n wa = two_div_T * tan(wd * T_div_two);\n\n g = wa * T_div_two;\n g_one = 1 + g;\n\n G4 = 0.5 * g / g_one;\n G3 = 0.5 * g / (g_one - 0.5 * g * G4);\n G2 = 0.5 * g / (g_one - 0.5 * g * G3);\n G1 = g / (g_one - g * G2);\n GAMMA = G4 * G3 * G2 * G1;\n\n SG1 = G4 * G3 * G2;\n SG2 = G4 * G3;\n SG3 = G4;\n SG4 = 1;\n\n alpha = g / g_one;\n\n beta1 = 1 / (g_one - g * G2);\n beta2 = 1 / (g_one - 0.5 * g * G3);\n beta3 = 1 / (g_one - 0.5 * g * G4);\n beta4 = 1 / g_one;\n\n gamma1 = 1 + G1 + G2;\n gamma2 = 1 + G2 * G3;\n gamma3 = 1 + G3 * G4;\n\n delta1 = g;\n delta3 = 0.5 * g;\n delta2 = delta3;\n\n epsilon1 = G2;\n epsilon2 = G3;\n epsilon3 = G4;\n\n // feedback inputs\n fb4 = beta4 * z3;\n fb3 = beta3 * (z2 + fb4 * delta3);\n fb2 = beta2 * (z1 + fb3 * delta2);\n\n // feedback process\n fbo1 = (beta1 * (z0 + fb2 * delta1));\n fbo2 = (beta2 * (z1 + fb3 * delta2));\n fbo3 = (beta3 * (z2 + fb4 * delta3));\n\n SIGMA = (SG1 * fbo1) + (SG2 * fbo2) + (SG3 * fbo3) + (SG4 * fb4);\n\n // non-linearity\n xin_tanh = (1 / tanh(sat) * tanh(sat * xin));\n\n un = (xin_tanh - q * SIGMA) / (1 + q * GAMMA);\n\n // 1st stage\n vin = un * gamma1 + fb2 + epsilon1 * fbo1;\n v = (a1 * vin - z0) * alpha;\n lp = v + z0;\n z0 = lp + v;\n\n // 2nd stage\n vin = lp * gamma2 + fb3 + epsilon2 * fbo2;\n v = (a2 * vin - z1) * alpha;\n lp = v + z1;\n z1 = lp + v;\n\n // 3rd stage\n vin = lp * gamma3 + fb4 + epsilon3 * fbo3;\n v = (a3 * vin - z3) * alpha;\n lp = v + z3;\n z3 = lp + v;\n\n // 4th stage\n v = (a4 * lp - z3) * alpha;\n lp = v + z3;\n z3 = lp + v;\n\n return lp;\n}\r\n\r\nlimit = samplerate / 3;\r\n\r\ncf = clip(in2, 0, limit);\r\nq = clip(in3, 0, 1) * 19;\r\nsat = clip(in4, 0, 1) * 30 + 0.001;\r\n\r\nout1 = zdf_diode(in1, cf, q, sat);", 103 | "fontface" : 0, 104 | "fontname" : "", 105 | "fontsize" : 12.0, 106 | "id" : "obj-5", 107 | "maxclass" : "codebox", 108 | "numinlets" : 4, 109 | "numoutlets" : 1, 110 | "outlettype" : [ "" ], 111 | "patching_rect" : [ 15.0, 53.0, 585.0, 652.0 ] 112 | } 113 | 114 | } 115 | ], 116 | "lines" : [ { 117 | "patchline" : { 118 | "destination" : [ "obj-5", 2 ], 119 | "source" : [ "obj-21", 0 ] 120 | } 121 | 122 | } 123 | , { 124 | "patchline" : { 125 | "destination" : [ "obj-5", 3 ], 126 | "source" : [ "obj-35", 0 ] 127 | } 128 | 129 | } 130 | , { 131 | "patchline" : { 132 | "destination" : [ "obj-9", 0 ], 133 | "source" : [ "obj-5", 0 ] 134 | } 135 | 136 | } 137 | , { 138 | "patchline" : { 139 | "destination" : [ "obj-5", 0 ], 140 | "source" : [ "obj-6", 0 ] 141 | } 142 | 143 | } 144 | , { 145 | "patchline" : { 146 | "destination" : [ "obj-5", 1 ], 147 | "source" : [ "obj-7", 0 ] 148 | } 149 | 150 | } 151 | ] 152 | } 153 | 154 | } 155 | -------------------------------------------------------------------------------- /patchers/fc.hishelf.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 444.0, 100.0, 755.0, 766.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-35", 44 | "maxclass" : "newobj", 45 | "numinlets" : 0, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "" ], 48 | "patching_rect" : [ 566.0, 15.0, 153.0, 22.0 ], 49 | "text" : "in 4 @comment \"gain (dB)\"" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-21", 56 | "maxclass" : "newobj", 57 | "numinlets" : 0, 58 | "numoutlets" : 1, 59 | "outlettype" : [ "" ], 60 | "patching_rect" : [ 382.333333333333314, 15.0, 103.0, 22.0 ], 61 | "text" : "in 3 @comment q" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "id" : "obj-9", 68 | "maxclass" : "newobj", 69 | "numinlets" : 1, 70 | "numoutlets" : 0, 71 | "patching_rect" : [ 15.0, 720.0, 117.0, 22.0 ], 72 | "text" : "out 1 @comment eq" 73 | } 74 | 75 | } 76 | , { 77 | "box" : { 78 | "id" : "obj-7", 79 | "maxclass" : "newobj", 80 | "numinlets" : 0, 81 | "numoutlets" : 1, 82 | "outlettype" : [ "" ], 83 | "patching_rect" : [ 198.666666666666657, 15.0, 149.0, 22.0 ], 84 | "text" : "in 2 @comment frequency" 85 | } 86 | 87 | } 88 | , { 89 | "box" : { 90 | "id" : "obj-6", 91 | "maxclass" : "newobj", 92 | "numinlets" : 0, 93 | "numoutlets" : 1, 94 | "outlettype" : [ "" ], 95 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 96 | "text" : "in 1 @comment input" 97 | } 98 | 99 | } 100 | , { 101 | "box" : { 102 | "code" : "/* SVF structure by Andrew Simper\r\n * Low, band, high, notch and peak with bounded terms\n * https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf\n *\r\n * stable cf between 0 .. sr/2\r\n */\n\n// High shelf EQ\n\neq_hishelf(xin, cf, q, gain) {\n History y0(0), y1(0), a1(0), a2(0), a3(0);\n\n A = dbtoa(gain);\n\n g = tan(cf * pi / samplerate) * sqrt(A);\n r = 1 / q;\n\n a1 = 1 / (1 + g * (g + r));\n a2 = g * a1;\n a3 = g * a2;\n\n m0 = A * A;\n m1 = r * (1 - A) * A;\n m2 = (1 - A * A);\n\n v3 = xin - y1;\n v1 = a1 * y0 + a2 * v3;\n v2 = y1 + a2 * y0 + a3 * v3;\n \n y0 = 2 * v1 - y0;\n y1 = 2 * v2 - y1;\n\n return m0 * xin + m1 * v1 + m2 * v2; \n}\r\n\r\nlimit = samplerate / 2;\r\n\r\ncf = clip(in2, 0, limit);\r\nq = clip(in3, 0, 1) * 99 + 1;\r\ngain = clip(in4, -60, 60);\r\n\r\nout1 = eq_hishelf(in1, cf, q, gain);", 103 | "fontface" : 0, 104 | "fontname" : "", 105 | "fontsize" : 12.0, 106 | "id" : "obj-5", 107 | "maxclass" : "codebox", 108 | "numinlets" : 4, 109 | "numoutlets" : 1, 110 | "outlettype" : [ "" ], 111 | "patching_rect" : [ 15.0, 53.0, 570.0, 652.0 ] 112 | } 113 | 114 | } 115 | ], 116 | "lines" : [ { 117 | "patchline" : { 118 | "destination" : [ "obj-5", 2 ], 119 | "source" : [ "obj-21", 0 ] 120 | } 121 | 122 | } 123 | , { 124 | "patchline" : { 125 | "destination" : [ "obj-5", 3 ], 126 | "source" : [ "obj-35", 0 ] 127 | } 128 | 129 | } 130 | , { 131 | "patchline" : { 132 | "destination" : [ "obj-9", 0 ], 133 | "source" : [ "obj-5", 0 ] 134 | } 135 | 136 | } 137 | , { 138 | "patchline" : { 139 | "destination" : [ "obj-5", 0 ], 140 | "source" : [ "obj-6", 0 ] 141 | } 142 | 143 | } 144 | , { 145 | "patchline" : { 146 | "destination" : [ "obj-5", 1 ], 147 | "source" : [ "obj-7", 0 ] 148 | } 149 | 150 | } 151 | ] 152 | } 153 | 154 | } 155 | -------------------------------------------------------------------------------- /patchers/fc.k35hp.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 299.0, 192.0, 749.0, 703.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-21", 44 | "maxclass" : "newobj", 45 | "numinlets" : 0, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "" ], 48 | "patching_rect" : [ 566.0, 15.0, 152.0, 22.0 ], 49 | "text" : "in 3 @comment resonance" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-9", 56 | "maxclass" : "newobj", 57 | "numinlets" : 1, 58 | "numoutlets" : 0, 59 | "patching_rect" : [ 15.0, 660.0, 151.0, 22.0 ], 60 | "text" : "out 1 @comment highpass" 61 | } 62 | 63 | } 64 | , { 65 | "box" : { 66 | "id" : "obj-7", 67 | "maxclass" : "newobj", 68 | "numinlets" : 0, 69 | "numoutlets" : 1, 70 | "outlettype" : [ "" ], 71 | "patching_rect" : [ 290.5, 15.0, 149.0, 22.0 ], 72 | "text" : "in 2 @comment frequency" 73 | } 74 | 75 | } 76 | , { 77 | "box" : { 78 | "id" : "obj-6", 79 | "maxclass" : "newobj", 80 | "numinlets" : 0, 81 | "numoutlets" : 1, 82 | "outlettype" : [ "" ], 83 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 84 | "text" : "in 1 @comment input" 85 | } 86 | 87 | } 88 | , { 89 | "box" : { 90 | "code" : "/* Korg 35 highpass\r\n * stable cf between 0 .. sr/2-ish\r\n * safe q between 0 .. 10\r\n */ \n\nk35_hp(xin, cf, q) {\n History z1(0), z2(0), z3(0), S35(0);\n\n T = 1 / samplerate;\n T_div_two = T / 2;\n two_div_T = 2 / T;\n\n wd = twopi * cf;\n wa = two_div_T * tan(wd * T_div_two);\n g = wa * T_div_two;\n G = g / (1 + g);\n\n K = 0.01 + ((2 - 0.01) * (q / 10));\n\n hpf2_beta = -G / (1 + g);\n lpf1_beta = 1 / (1 + g);\n alpha = 1 / (1 - (K * G) + (K * G * G));\n\n v1 = (xin - z1) * G;\n lp1 = v1 + z1;\n z1 = lp1 + v1;\n y1 = xin - lp1;\n\n u = alpha * (y1 + S35);\n y = K * u;\n\n v2 = (y - z2) * G;\n lp2 = v2 + z2;\n z2 = lp2 + v2;\n hp2 = y - lp2;\n\n v3 = (hp2 - z3) * G;\n lp3 = v3 + z3;\n z3 = lp3 + v3;\n\n S35 = (hpf2_beta * z2) + (lpf1_beta * z3);\n\n return (K > 0) ? (y / K) : y;\n}\r\n\r\nlimit = samplerate / 2 - 25;\r\n\r\ncf = clip(in2, 0, limit);\r\nq = clip(in3, 0, 1) * 10;\r\n\r\nout1 = k35_hp(in1, cf, q);", 91 | "fontface" : 0, 92 | "fontname" : "", 93 | "fontsize" : 12.0, 94 | "id" : "obj-5", 95 | "maxclass" : "codebox", 96 | "numinlets" : 3, 97 | "numoutlets" : 1, 98 | "outlettype" : [ "" ], 99 | "patching_rect" : [ 15.0, 53.0, 570.0, 592.0 ] 100 | } 101 | 102 | } 103 | ], 104 | "lines" : [ { 105 | "patchline" : { 106 | "destination" : [ "obj-5", 2 ], 107 | "source" : [ "obj-21", 0 ] 108 | } 109 | 110 | } 111 | , { 112 | "patchline" : { 113 | "destination" : [ "obj-9", 0 ], 114 | "source" : [ "obj-5", 0 ] 115 | } 116 | 117 | } 118 | , { 119 | "patchline" : { 120 | "destination" : [ "obj-5", 0 ], 121 | "source" : [ "obj-6", 0 ] 122 | } 123 | 124 | } 125 | , { 126 | "patchline" : { 127 | "destination" : [ "obj-5", 1 ], 128 | "source" : [ "obj-7", 0 ] 129 | } 130 | 131 | } 132 | ] 133 | } 134 | 135 | } 136 | -------------------------------------------------------------------------------- /patchers/fc.k35lp.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 299.0, 192.0, 749.0, 703.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-21", 44 | "maxclass" : "newobj", 45 | "numinlets" : 0, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "" ], 48 | "patching_rect" : [ 566.0, 15.0, 152.0, 22.0 ], 49 | "text" : "in 3 @comment resonance" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-9", 56 | "maxclass" : "newobj", 57 | "numinlets" : 1, 58 | "numoutlets" : 0, 59 | "patching_rect" : [ 15.0, 660.0, 147.0, 22.0 ], 60 | "text" : "out 1 @comment lowpass" 61 | } 62 | 63 | } 64 | , { 65 | "box" : { 66 | "id" : "obj-7", 67 | "maxclass" : "newobj", 68 | "numinlets" : 0, 69 | "numoutlets" : 1, 70 | "outlettype" : [ "" ], 71 | "patching_rect" : [ 290.5, 15.0, 149.0, 22.0 ], 72 | "text" : "in 2 @comment frequency" 73 | } 74 | 75 | } 76 | , { 77 | "box" : { 78 | "id" : "obj-6", 79 | "maxclass" : "newobj", 80 | "numinlets" : 0, 81 | "numoutlets" : 1, 82 | "outlettype" : [ "" ], 83 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 84 | "text" : "in 1 @comment input" 85 | } 86 | 87 | } 88 | , { 89 | "box" : { 90 | "code" : "/* Korg 35 lowpass\r\n * stable cf between 0 .. sr/2\r\n * safe q between 0 .. 10\r\n */ \n\nk35_lp(xin, cf, q) {\n History z1(0), z2(0), z3(0), S35(0);\n\n T = 1 / samplerate;\n T_div_two = T / 2;\n two_div_T = 2 / T;\n\n wd = twopi * cf;\n wa = two_div_T * tan(wd * T_div_two);\n g = wa * T_div_two;\n G = g / (1 + g);\n\n K = 0.01 + ((2 - 0.01) * (q / 10));\n\n lpf2_beta = (K - (K * G)) / (1 + g);\n hpf1_beta = -1 / (1 + g);\n alpha = 1 / (1 - (K * G) + (K * G * G));\n\n v1 = (xin - z1) * G;\n lp1 = v1 + z1;\n z1 = lp1 + v1;\n\n u = alpha * (lp1 + S35);\n\n v2 = (u - z2) * G;\n lp2 = v2 + z2;\n z2 = lp2 + v2;\n y = K * lp2;\n\n v3 = (y - z3) * G;\n lp3 = v3 + z3;\n z3 = lp3 + v3;\n\n S35 = (lpf2_beta * z2) + (hpf1_beta * z3);\n\n return (K > 0) ? (y / K) : y;\n}\r\n\r\nlimit = samplerate / 2 - 25;\r\n\r\ncf = clip(in2, 0, limit);\r\nq = clip(in3, 0, 1) * 10;\r\n\r\nout1 = k35_lp(in1, cf, q);", 91 | "fontface" : 0, 92 | "fontname" : "", 93 | "fontsize" : 12.0, 94 | "id" : "obj-5", 95 | "maxclass" : "codebox", 96 | "numinlets" : 3, 97 | "numoutlets" : 1, 98 | "outlettype" : [ "" ], 99 | "patching_rect" : [ 15.0, 53.0, 570.0, 592.0 ] 100 | } 101 | 102 | } 103 | ], 104 | "lines" : [ { 105 | "patchline" : { 106 | "destination" : [ "obj-5", 2 ], 107 | "source" : [ "obj-21", 0 ] 108 | } 109 | 110 | } 111 | , { 112 | "patchline" : { 113 | "destination" : [ "obj-9", 0 ], 114 | "source" : [ "obj-5", 0 ] 115 | } 116 | 117 | } 118 | , { 119 | "patchline" : { 120 | "destination" : [ "obj-5", 0 ], 121 | "source" : [ "obj-6", 0 ] 122 | } 123 | 124 | } 125 | , { 126 | "patchline" : { 127 | "destination" : [ "obj-5", 1 ], 128 | "source" : [ "obj-7", 0 ] 129 | } 130 | 131 | } 132 | ] 133 | } 134 | 135 | } 136 | -------------------------------------------------------------------------------- /patchers/fc.ladder.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 590.0, 107.0, 755.0, 766.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-21", 44 | "maxclass" : "newobj", 45 | "numinlets" : 0, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "" ], 48 | "patching_rect" : [ 581.0, 15.0, 103.0, 22.0 ], 49 | "text" : "in 3 @comment q" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-9", 56 | "maxclass" : "newobj", 57 | "numinlets" : 1, 58 | "numoutlets" : 0, 59 | "patching_rect" : [ 15.0, 720.0, 147.0, 22.0 ], 60 | "text" : "out 1 @comment lowpass" 61 | } 62 | 63 | } 64 | , { 65 | "box" : { 66 | "id" : "obj-7", 67 | "maxclass" : "newobj", 68 | "numinlets" : 0, 69 | "numoutlets" : 1, 70 | "outlettype" : [ "" ], 71 | "patching_rect" : [ 298.0, 15.0, 149.0, 22.0 ], 72 | "text" : "in 2 @comment frequency" 73 | } 74 | 75 | } 76 | , { 77 | "box" : { 78 | "id" : "obj-6", 79 | "maxclass" : "newobj", 80 | "numinlets" : 0, 81 | "numoutlets" : 1, 82 | "outlettype" : [ "" ], 83 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 84 | "text" : "in 1 @comment input" 85 | } 86 | 87 | } 88 | , { 89 | "box" : { 90 | "code" : "/* Zero Delay Feedback filters\n * using trapezoidal integrator by Vadim Zavalishin\n * https://www.discodsp.net/VAFilterDesign_2.1.2.pdf\n *\n * based on implementations by Will Pirkle and Steven Yi for Csound\n * \n * http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.2.0.pdf\n * http://www.willpirkle.com/Downloads/AN-5Korg35_V3.pdf\n * http://www.willpirkle.com/Downloads/AN-6DiodeLadderFilter.pdf\n * http://www.willpirkle.com/Downloads/AN-7Korg35HPF_V2.pdf\n * https://github.com/csound/csound/blob/master/Opcodes/wpfilters.c\n */\r\n\r\n/* Ladder lowpass\n * stable cf between 0 .. sr/2\n * (0 .. sr/4 recommended range)\n * safe q between 0.5 .. 24\n */\n\nzdf_ladder(xin, cf, q) {\n History z0(0), z1(0), z2(0), z3(0);\n\n T = 1 / samplerate;\n T_div_two = T / 2;\n two_div_T = 2 / T;\n\n k = (4 * (q - 0.5)) / (25 - 0.5);\n\n wd = twopi * cf;\n wa = two_div_T * tan(wd * T_div_two);\n\n g = wa * T_div_two;\n G = g / (1 + g);\n G2 = G * G;\n G3 = G2 * G;\n GAMMA = G2 * G2;\n\n g_one = g + 1;\n\n S0 = z0 / g_one;\n S1 = z1 / g_one;\n S2 = z2 / g_one;\n S3 = z3 / g_one;\n\n S = (G3 * S0) + (G2 * S1) + (G * S2) + S3;\n u = (xin - k * S) / (1 + k * GAMMA);\n\n // 1st stage\n v = (u - z0) * G;\n lp = v + z0;\n z0 = lp + v;\n\n // 2nd stage\n v = (lp - z1) * G;\n lp = v + z1;\n z1 = lp + v;\n\n // 3rd stage\n v = (lp - z2) * G;\n lp = v + z2;\n z2 = lp + v;\n\n // 4th stage\n v = (lp - z3) * G;\n lp = v + z3;\n z3 = lp + v;\n\n return lp;\n}\r\n\r\nlimit = samplerate / 2;\r\n\r\ncf = clip(in2, 0, limit);\r\nq = clip(in3, 0, 1) * 23.5 + 0.5;\r\n\r\nout1 = zdf_ladder(in1, cf, q);", 91 | "fontface" : 0, 92 | "fontname" : "", 93 | "fontsize" : 12.0, 94 | "id" : "obj-5", 95 | "maxclass" : "codebox", 96 | "numinlets" : 3, 97 | "numoutlets" : 1, 98 | "outlettype" : [ "" ], 99 | "patching_rect" : [ 15.0, 53.0, 585.0, 652.0 ] 100 | } 101 | 102 | } 103 | ], 104 | "lines" : [ { 105 | "patchline" : { 106 | "destination" : [ "obj-5", 2 ], 107 | "source" : [ "obj-21", 0 ] 108 | } 109 | 110 | } 111 | , { 112 | "patchline" : { 113 | "destination" : [ "obj-9", 0 ], 114 | "source" : [ "obj-5", 0 ] 115 | } 116 | 117 | } 118 | , { 119 | "patchline" : { 120 | "destination" : [ "obj-5", 0 ], 121 | "source" : [ "obj-6", 0 ] 122 | } 123 | 124 | } 125 | , { 126 | "patchline" : { 127 | "destination" : [ "obj-5", 1 ], 128 | "source" : [ "obj-7", 0 ] 129 | } 130 | 131 | } 132 | ] 133 | } 134 | 135 | } 136 | -------------------------------------------------------------------------------- /patchers/fc.loshelf.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 444.0, 100.0, 755.0, 766.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-35", 44 | "maxclass" : "newobj", 45 | "numinlets" : 0, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "" ], 48 | "patching_rect" : [ 566.0, 15.0, 153.0, 22.0 ], 49 | "text" : "in 4 @comment \"gain (dB)\"" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-21", 56 | "maxclass" : "newobj", 57 | "numinlets" : 0, 58 | "numoutlets" : 1, 59 | "outlettype" : [ "" ], 60 | "patching_rect" : [ 382.333333333333314, 15.0, 103.0, 22.0 ], 61 | "text" : "in 3 @comment q" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "id" : "obj-9", 68 | "maxclass" : "newobj", 69 | "numinlets" : 1, 70 | "numoutlets" : 0, 71 | "patching_rect" : [ 15.0, 720.0, 117.0, 22.0 ], 72 | "text" : "out 1 @comment eq" 73 | } 74 | 75 | } 76 | , { 77 | "box" : { 78 | "id" : "obj-7", 79 | "maxclass" : "newobj", 80 | "numinlets" : 0, 81 | "numoutlets" : 1, 82 | "outlettype" : [ "" ], 83 | "patching_rect" : [ 198.666666666666657, 15.0, 149.0, 22.0 ], 84 | "text" : "in 2 @comment frequency" 85 | } 86 | 87 | } 88 | , { 89 | "box" : { 90 | "id" : "obj-6", 91 | "maxclass" : "newobj", 92 | "numinlets" : 0, 93 | "numoutlets" : 1, 94 | "outlettype" : [ "" ], 95 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 96 | "text" : "in 1 @comment input" 97 | } 98 | 99 | } 100 | , { 101 | "box" : { 102 | "code" : "/* SVF structure by Andrew Simper\r\n * Low, band, high, notch and peak with bounded terms\n * https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf\n *\r\n * stable cf between 0 .. sr/2\r\n */\n\n// Low shelf EQ\n\neq_loshelf(xin, cf, q, gain) {\n History y0(0), y1(0), a1(0), a2(0), a3(0);\n\n A = dbtoa(gain);\n\n g = tan(cf * pi / samplerate) / sqrt(A);\n r = 1 / q;\n\n a1 = 1 / (1 + g * (g + r));\n a2 = g * a1;\n a3 = g * a2;\n\n m0 = 1;\n m1 = r * (A - 1);\n m2 = (A * A - 1);\n\n v3 = xin - y1;\n v1 = a1 * y0 + a2 * v3;\n v2 = y1 + a2 * y0 + a3 * v3;\n\n y0 = 2 * v1 - y0;\n y1 = 2 * v2 - y1;\n\n return m0 * xin + m1 * v1 + m2 * v2;\n}\r\n\r\nlimit = samplerate / 2;\r\n\r\ncf = clip(in2, 0, limit);\r\nq = clip(in3, 0, 1) * 99 + 1;\r\ngain = clip(in4, -60, 60);\r\n\r\nout1 = eq_loshelf(in1, cf, q, gain);", 103 | "fontface" : 0, 104 | "fontname" : "", 105 | "fontsize" : 12.0, 106 | "id" : "obj-5", 107 | "maxclass" : "codebox", 108 | "numinlets" : 4, 109 | "numoutlets" : 1, 110 | "outlettype" : [ "" ], 111 | "patching_rect" : [ 15.0, 53.0, 570.0, 652.0 ] 112 | } 113 | 114 | } 115 | ], 116 | "lines" : [ { 117 | "patchline" : { 118 | "destination" : [ "obj-5", 2 ], 119 | "source" : [ "obj-21", 0 ] 120 | } 121 | 122 | } 123 | , { 124 | "patchline" : { 125 | "destination" : [ "obj-5", 3 ], 126 | "source" : [ "obj-35", 0 ] 127 | } 128 | 129 | } 130 | , { 131 | "patchline" : { 132 | "destination" : [ "obj-9", 0 ], 133 | "source" : [ "obj-5", 0 ] 134 | } 135 | 136 | } 137 | , { 138 | "patchline" : { 139 | "destination" : [ "obj-5", 0 ], 140 | "source" : [ "obj-6", 0 ] 141 | } 142 | 143 | } 144 | , { 145 | "patchline" : { 146 | "destination" : [ "obj-5", 1 ], 147 | "source" : [ "obj-7", 0 ] 148 | } 149 | 150 | } 151 | ] 152 | } 153 | 154 | } 155 | -------------------------------------------------------------------------------- /patchers/fc.onepole.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 5, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 351.0, 395.0, 657.0, 421.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-2", 44 | "maxclass" : "newobj", 45 | "numinlets" : 1, 46 | "numoutlets" : 0, 47 | "patching_rect" : [ 478.0, 375.0, 151.0, 22.0 ], 48 | "text" : "out 2 @comment highpass" 49 | } 50 | 51 | } 52 | , { 53 | "box" : { 54 | "id" : "obj-9", 55 | "maxclass" : "newobj", 56 | "numinlets" : 1, 57 | "numoutlets" : 0, 58 | "patching_rect" : [ 15.0, 375.0, 147.0, 22.0 ], 59 | "text" : "out 1 @comment lowpass" 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "id" : "obj-7", 66 | "maxclass" : "newobj", 67 | "numinlets" : 0, 68 | "numoutlets" : 1, 69 | "outlettype" : [ "" ], 70 | "patching_rect" : [ 478.0, 15.0, 149.0, 22.0 ], 71 | "text" : "in 2 @comment frequency" 72 | } 73 | 74 | } 75 | , { 76 | "box" : { 77 | "id" : "obj-6", 78 | "maxclass" : "newobj", 79 | "numinlets" : 0, 80 | "numoutlets" : 1, 81 | "outlettype" : [ "" ], 82 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 83 | "text" : "in 1 @comment input" 84 | } 85 | 86 | } 87 | , { 88 | "box" : { 89 | "code" : "// 1-pole non-resonant lowpass/highpass\n\nonepole(xin, cf) {\n History state;\n\n g = tan((twopi * cf) / samplerate);\n gi = 1 / (1 + g);\n\n lp = (g * xin + state) * gi;\n state = g * (xin - lp) + lp;\n\n hp = xin - lp;\n\n return lp, hp;\n}\r\n\r\nlimit = samplerate / 4;\r\n\r\ncf = clip(in2, 0, limit);\r\nout1, out2 = onepole(in1, cf);", 90 | "fontface" : 0, 91 | "fontname" : "", 92 | "fontsize" : 12.0, 93 | "id" : "obj-5", 94 | "maxclass" : "codebox", 95 | "numinlets" : 2, 96 | "numoutlets" : 2, 97 | "outlettype" : [ "", "" ], 98 | "patching_rect" : [ 15.0, 53.0, 482.0, 307.0 ] 99 | } 100 | 101 | } 102 | ], 103 | "lines" : [ { 104 | "patchline" : { 105 | "destination" : [ "obj-2", 0 ], 106 | "source" : [ "obj-5", 1 ] 107 | } 108 | 109 | } 110 | , { 111 | "patchline" : { 112 | "destination" : [ "obj-9", 0 ], 113 | "source" : [ "obj-5", 0 ] 114 | } 115 | 116 | } 117 | , { 118 | "patchline" : { 119 | "destination" : [ "obj-5", 0 ], 120 | "source" : [ "obj-6", 0 ] 121 | } 122 | 123 | } 124 | , { 125 | "patchline" : { 126 | "destination" : [ "obj-5", 1 ], 127 | "source" : [ "obj-7", 0 ] 128 | } 129 | 130 | } 131 | ] 132 | } 133 | 134 | } 135 | -------------------------------------------------------------------------------- /patchers/fc.reson.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 411.0, 184.0, 736.0, 716.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-21", 44 | "maxclass" : "newobj", 45 | "numinlets" : 0, 46 | "numoutlets" : 1, 47 | "outlettype" : [ "" ], 48 | "patching_rect" : [ 566.0, 15.0, 151.0, 22.0 ], 49 | "text" : "in 3 @comment bandwidth" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-9", 56 | "maxclass" : "newobj", 57 | "numinlets" : 1, 58 | "numoutlets" : 0, 59 | "patching_rect" : [ 15.0, 675.0, 133.0, 22.0 ], 60 | "text" : "out 1 @comment reson" 61 | } 62 | 63 | } 64 | , { 65 | "box" : { 66 | "id" : "obj-7", 67 | "maxclass" : "newobj", 68 | "numinlets" : 0, 69 | "numoutlets" : 1, 70 | "outlettype" : [ "" ], 71 | "patching_rect" : [ 290.5, 15.0, 149.0, 22.0 ], 72 | "text" : "in 2 @comment frequency" 73 | } 74 | 75 | } 76 | , { 77 | "box" : { 78 | "id" : "obj-6", 79 | "maxclass" : "newobj", 80 | "numinlets" : 0, 81 | "numoutlets" : 1, 82 | "outlettype" : [ "" ], 83 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 84 | "text" : "in 1 @comment input" 85 | } 86 | 87 | } 88 | , { 89 | "box" : { 90 | "code" : "/* 2-pole 2-zero Reson Filter\n * based on the Csound implementation by Sean Costello\n * https://github.com/csound/csound\n *\n * An implementation of the 2-pole, 2-zero reson filter\n * described by Julius O. Smith and James B. Angell in\n * \"A Constant Gain Digital Resonator Tuned by a Single\n * Coefficient,\" Computer Music Journal, Vol. 6, No. 4,\n * Winter 1982, p.36-39. resonr implements the version\n * where the zeros are located at z = 1 and z = -1.\n *\n * Normalizing factors derived from equations in Ken Steiglitz,\n * \"A Note on Constant-Gain Digital Resonators,\" Computer\n * Music Journal, vol. 18, no. 4, pp. 8-10, Winter 1982.\n */\n\nreson(xin, cf, bw) {\n History x1(0), x2(0), y1(0), y2(0);\n\n r = exp((bw * pi / samplerate) * -1);\n c1 = 2 * r * cos(cf * twopi / samplerate);\n c2 = r * r;\n\n y = ((1 - c2) * 0.5) * (xin - x2) + c1 * y1 - c2 * y2;\n\n x2 = x1;\n x1 = xin;\n y2 = y1;\n y1 = y;\n \n return y;\n}\r\n\r\nlimit = samplerate / 2;\r\n\r\ncf = clip(in2, 0, limit);\r\nbw = clip(in3, 0, limit);\r\n\r\nout1 = reson(in1, cf, bw);", 91 | "fontface" : 0, 92 | "fontname" : "", 93 | "fontsize" : 12.0, 94 | "id" : "obj-5", 95 | "maxclass" : "codebox", 96 | "numinlets" : 3, 97 | "numoutlets" : 1, 98 | "outlettype" : [ "" ], 99 | "patching_rect" : [ 15.0, 53.0, 570.0, 607.0 ] 100 | } 101 | 102 | } 103 | ], 104 | "lines" : [ { 105 | "patchline" : { 106 | "destination" : [ "obj-5", 2 ], 107 | "source" : [ "obj-21", 0 ] 108 | } 109 | 110 | } 111 | , { 112 | "patchline" : { 113 | "destination" : [ "obj-9", 0 ], 114 | "source" : [ "obj-5", 0 ] 115 | } 116 | 117 | } 118 | , { 119 | "patchline" : { 120 | "destination" : [ "obj-5", 0 ], 121 | "source" : [ "obj-6", 0 ] 122 | } 123 | 124 | } 125 | , { 126 | "patchline" : { 127 | "destination" : [ "obj-5", 1 ], 128 | "source" : [ "obj-7", 0 ] 129 | } 130 | 131 | } 132 | ] 133 | } 134 | 135 | } 136 | -------------------------------------------------------------------------------- /patchers/fc.svf-as.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 624.0, 117.0, 755.0, 785.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-34", 44 | "maxclass" : "newobj", 45 | "numinlets" : 1, 46 | "numoutlets" : 0, 47 | "patching_rect" : [ 566.0, 735.0, 141.0, 22.0 ], 48 | "text" : "out 6 @comment allpass" 49 | } 50 | 51 | } 52 | , { 53 | "box" : { 54 | "id" : "obj-33", 55 | "maxclass" : "newobj", 56 | "numinlets" : 1, 57 | "numoutlets" : 0, 58 | "patching_rect" : [ 455.800000000000011, 690.0, 129.0, 22.0 ], 59 | "text" : "out 5 @comment peak" 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "id" : "obj-32", 66 | "maxclass" : "newobj", 67 | "numinlets" : 1, 68 | "numoutlets" : 0, 69 | "patching_rect" : [ 345.0, 735.0, 133.0, 22.0 ], 70 | "text" : "out 4 @comment notch" 71 | } 72 | 73 | } 74 | , { 75 | "box" : { 76 | "id" : "obj-31", 77 | "maxclass" : "newobj", 78 | "numinlets" : 1, 79 | "numoutlets" : 0, 80 | "patching_rect" : [ 125.199999999999989, 735.0, 151.0, 22.0 ], 81 | "text" : "out 2 @comment highpass" 82 | } 83 | 84 | } 85 | , { 86 | "box" : { 87 | "id" : "obj-30", 88 | "maxclass" : "newobj", 89 | "numinlets" : 1, 90 | "numoutlets" : 0, 91 | "patching_rect" : [ 235.400000000000006, 690.0, 155.0, 22.0 ], 92 | "text" : "out 3 @comment bandpass" 93 | } 94 | 95 | } 96 | , { 97 | "box" : { 98 | "id" : "obj-21", 99 | "maxclass" : "newobj", 100 | "numinlets" : 0, 101 | "numoutlets" : 1, 102 | "outlettype" : [ "" ], 103 | "patching_rect" : [ 566.0, 15.0, 152.0, 22.0 ], 104 | "text" : "in 3 @comment resonance" 105 | } 106 | 107 | } 108 | , { 109 | "box" : { 110 | "id" : "obj-9", 111 | "maxclass" : "newobj", 112 | "numinlets" : 1, 113 | "numoutlets" : 0, 114 | "patching_rect" : [ 15.0, 690.0, 147.0, 22.0 ], 115 | "text" : "out 1 @comment lowpass" 116 | } 117 | 118 | } 119 | , { 120 | "box" : { 121 | "id" : "obj-7", 122 | "maxclass" : "newobj", 123 | "numinlets" : 0, 124 | "numoutlets" : 1, 125 | "outlettype" : [ "" ], 126 | "patching_rect" : [ 290.5, 15.0, 149.0, 22.0 ], 127 | "text" : "in 2 @comment frequency" 128 | } 129 | 130 | } 131 | , { 132 | "box" : { 133 | "id" : "obj-6", 134 | "maxclass" : "newobj", 135 | "numinlets" : 0, 136 | "numoutlets" : 1, 137 | "outlettype" : [ "" ], 138 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 139 | "text" : "in 1 @comment input" 140 | } 141 | 142 | } 143 | , { 144 | "box" : { 145 | "code" : "/* SVF structure by Andrew Simper\r\n * Low, band, high, notch and peak with bounded terms\n * https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf\n *\r\n * stable cf between 0 .. sr/2\r\n */\n\nsvf_as(xin, cf, q) {\n History y0(0), y1(0), a1(0), a2(0), a3(0);\n\n g = tan(cf * pi / samplerate);\n r = 1 / q;\n\n a1 = 1 / (1 + g * (g + r));\n a2 = g * a1;\n a3 = g * a2;\n\n v3 = xin - y1;\n v1 = a1 * y0 + a2 * v3;\n v2 = y1 + a2 * y0 + a3 * v3;\n \n y0 = 2 * v1 - y0;\n y1 = 2 * v2 - y1;\n\n lp = v2;\n bp = v1;\n hp = xin - r * v1 - v2;\n notch = (lp + hp) + xin - r * v1;\n peak = (lp - hp) + 2 * v2 - xin + r * v1;\n all = (lp + hp - r * bp) + xin - 2 * r * v1;\n\n return lp, hp, bp, notch, peak, all;\n}\r\n\r\nlimit = samplerate / 2;\r\n\r\ncf = clip(in2, 0, limit);\r\nq = clip(in3, 0, 1) * 20 + 0.5;\r\n\r\nout1, out2, out3, out4, out5, out6 = svf_as(in1, cf, q);", 146 | "fontface" : 0, 147 | "fontname" : "", 148 | "fontsize" : 12.0, 149 | "id" : "obj-5", 150 | "maxclass" : "codebox", 151 | "numinlets" : 3, 152 | "numoutlets" : 6, 153 | "outlettype" : [ "", "", "", "", "", "" ], 154 | "patching_rect" : [ 15.0, 53.0, 570.0, 622.0 ] 155 | } 156 | 157 | } 158 | ], 159 | "lines" : [ { 160 | "patchline" : { 161 | "destination" : [ "obj-5", 2 ], 162 | "source" : [ "obj-21", 0 ] 163 | } 164 | 165 | } 166 | , { 167 | "patchline" : { 168 | "destination" : [ "obj-30", 0 ], 169 | "source" : [ "obj-5", 2 ] 170 | } 171 | 172 | } 173 | , { 174 | "patchline" : { 175 | "destination" : [ "obj-31", 0 ], 176 | "source" : [ "obj-5", 1 ] 177 | } 178 | 179 | } 180 | , { 181 | "patchline" : { 182 | "destination" : [ "obj-32", 0 ], 183 | "source" : [ "obj-5", 3 ] 184 | } 185 | 186 | } 187 | , { 188 | "patchline" : { 189 | "destination" : [ "obj-33", 0 ], 190 | "source" : [ "obj-5", 4 ] 191 | } 192 | 193 | } 194 | , { 195 | "patchline" : { 196 | "destination" : [ "obj-34", 0 ], 197 | "source" : [ "obj-5", 5 ] 198 | } 199 | 200 | } 201 | , { 202 | "patchline" : { 203 | "destination" : [ "obj-9", 0 ], 204 | "source" : [ "obj-5", 0 ] 205 | } 206 | 207 | } 208 | , { 209 | "patchline" : { 210 | "destination" : [ "obj-5", 0 ], 211 | "source" : [ "obj-6", 0 ] 212 | } 213 | 214 | } 215 | , { 216 | "patchline" : { 217 | "destination" : [ "obj-5", 1 ], 218 | "source" : [ "obj-7", 0 ] 219 | } 220 | 221 | } 222 | ] 223 | } 224 | 225 | } 226 | -------------------------------------------------------------------------------- /patchers/fc.svf-eg.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 865.0, 168.0, 766.0, 616.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-31", 44 | "maxclass" : "newobj", 45 | "numinlets" : 1, 46 | "numoutlets" : 0, 47 | "patching_rect" : [ 290.5, 570.0, 151.0, 22.0 ], 48 | "text" : "out 2 @comment highpass" 49 | } 50 | 51 | } 52 | , { 53 | "box" : { 54 | "id" : "obj-30", 55 | "maxclass" : "newobj", 56 | "numinlets" : 1, 57 | "numoutlets" : 0, 58 | "patching_rect" : [ 566.0, 570.0, 155.0, 22.0 ], 59 | "text" : "out 3 @comment bandpass" 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "id" : "obj-21", 66 | "maxclass" : "newobj", 67 | "numinlets" : 0, 68 | "numoutlets" : 1, 69 | "outlettype" : [ "" ], 70 | "patching_rect" : [ 566.0, 15.0, 152.0, 22.0 ], 71 | "text" : "in 3 @comment resonance" 72 | } 73 | 74 | } 75 | , { 76 | "box" : { 77 | "id" : "obj-9", 78 | "maxclass" : "newobj", 79 | "numinlets" : 1, 80 | "numoutlets" : 0, 81 | "patching_rect" : [ 15.0, 570.0, 147.0, 22.0 ], 82 | "text" : "out 1 @comment lowpass" 83 | } 84 | 85 | } 86 | , { 87 | "box" : { 88 | "id" : "obj-7", 89 | "maxclass" : "newobj", 90 | "numinlets" : 0, 91 | "numoutlets" : 1, 92 | "outlettype" : [ "" ], 93 | "patching_rect" : [ 290.5, 15.0, 149.0, 22.0 ], 94 | "text" : "in 2 @comment frequency" 95 | } 96 | 97 | } 98 | , { 99 | "box" : { 100 | "id" : "obj-6", 101 | "maxclass" : "newobj", 102 | "numinlets" : 0, 103 | "numoutlets" : 1, 104 | "outlettype" : [ "" ], 105 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 106 | "text" : "in 1 @comment input" 107 | } 108 | 109 | } 110 | , { 111 | "box" : { 112 | "code" : "/* SVF structure by Émilie Gillet\n * https://github.com/pichenettes/stmlib/blob/master/dsp/filter.h\r\n *\r\n * stable cf between 0 .. sr/2\r\n * q at 0 will self-oscillate\n */\n\nsvf_eg(xin, cf, q) {\n History y0(0), y1(0), lp(0), hp(0), bp(0);\n\n g = tan(cf * pi / samplerate);\n \n r = 1 / q;\n \n h = 1 / (1 + r * g + g * g);\n rpg = r + g;\n\n hp = (xin - rpg * y0 - y1) * h;\n bp = g * hp + y0;\n y0 = g * hp + bp;\n lp = g * bp + y1;\n y1 = g * bp + lp;\n\n return lp, hp, bp;\n}\r\n\r\nlimit = samplerate / 2;\r\n\r\ncf = clip(in2, 0, limit);\r\nq = clip(in3, 0, 1) * 20 + 0.5;\r\n\r\nout1, out2, out3 = svf_eg(in1, cf, q);", 113 | "fontface" : 0, 114 | "fontname" : "", 115 | "fontsize" : 12.0, 116 | "id" : "obj-5", 117 | "maxclass" : "codebox", 118 | "numinlets" : 3, 119 | "numoutlets" : 3, 120 | "outlettype" : [ "", "", "" ], 121 | "patching_rect" : [ 15.0, 53.0, 570.0, 502.0 ] 122 | } 123 | 124 | } 125 | ], 126 | "lines" : [ { 127 | "patchline" : { 128 | "destination" : [ "obj-5", 2 ], 129 | "source" : [ "obj-21", 0 ] 130 | } 131 | 132 | } 133 | , { 134 | "patchline" : { 135 | "destination" : [ "obj-30", 0 ], 136 | "source" : [ "obj-5", 2 ] 137 | } 138 | 139 | } 140 | , { 141 | "patchline" : { 142 | "destination" : [ "obj-31", 0 ], 143 | "source" : [ "obj-5", 1 ] 144 | } 145 | 146 | } 147 | , { 148 | "patchline" : { 149 | "destination" : [ "obj-9", 0 ], 150 | "source" : [ "obj-5", 0 ] 151 | } 152 | 153 | } 154 | , { 155 | "patchline" : { 156 | "destination" : [ "obj-5", 0 ], 157 | "source" : [ "obj-6", 0 ] 158 | } 159 | 160 | } 161 | , { 162 | "patchline" : { 163 | "destination" : [ "obj-5", 1 ], 164 | "source" : [ "obj-7", 0 ] 165 | } 166 | 167 | } 168 | ] 169 | } 170 | 171 | } 172 | -------------------------------------------------------------------------------- /patchers/fc.zdf-onepole.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 490.0, 153.0, 554.0, 573.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-19", 44 | "maxclass" : "newobj", 45 | "numinlets" : 1, 46 | "numoutlets" : 0, 47 | "patching_rect" : [ 386.0, 525.0, 151.0, 22.0 ], 48 | "text" : "out 2 @comment highpass" 49 | } 50 | 51 | } 52 | , { 53 | "box" : { 54 | "id" : "obj-9", 55 | "maxclass" : "newobj", 56 | "numinlets" : 1, 57 | "numoutlets" : 0, 58 | "patching_rect" : [ 15.0, 525.0, 147.0, 22.0 ], 59 | "text" : "out 1 @comment lowpass" 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "id" : "obj-7", 66 | "maxclass" : "newobj", 67 | "numinlets" : 0, 68 | "numoutlets" : 1, 69 | "outlettype" : [ "" ], 70 | "patching_rect" : [ 386.0, 15.0, 149.0, 22.0 ], 71 | "text" : "in 2 @comment frequency" 72 | } 73 | 74 | } 75 | , { 76 | "box" : { 77 | "id" : "obj-6", 78 | "maxclass" : "newobj", 79 | "numinlets" : 0, 80 | "numoutlets" : 1, 81 | "outlettype" : [ "" ], 82 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 83 | "text" : "in 1 @comment input" 84 | } 85 | 86 | } 87 | , { 88 | "box" : { 89 | "code" : "/* ZDF 1-pole\r\n * stable cf between 0 .. sr/2\r\n */\n\nzdf_one(xin, cf) {\n History z0;\n\n T = 1 / samplerate;\n Tdiv2 = T / 2;\n two_div_T = 2 / T;\n\n wd = twopi * cf;\n wa = two_div_T * tan(wd * Tdiv2);\n g = wa * Tdiv2;\n\n G = g / (1 + g);\n\n v = (xin - z0) * G;\n lp = v + z0;\n hp = xin - lp;\n\n z0 = lp + v;\n\n return lp, hp;\n}\r\n\r\nlimit = samplerate / 2;\r\n\r\ncf = clip(in2, 0, limit);\r\n\r\nout1, out2 = zdf_one(in1, cf);", 90 | "fontface" : 0, 91 | "fontname" : "", 92 | "fontsize" : 12.0, 93 | "id" : "obj-5", 94 | "maxclass" : "codebox", 95 | "numinlets" : 2, 96 | "numoutlets" : 2, 97 | "outlettype" : [ "", "" ], 98 | "patching_rect" : [ 15.0, 53.0, 390.0, 457.0 ] 99 | } 100 | 101 | } 102 | ], 103 | "lines" : [ { 104 | "patchline" : { 105 | "destination" : [ "obj-19", 0 ], 106 | "source" : [ "obj-5", 1 ] 107 | } 108 | 109 | } 110 | , { 111 | "patchline" : { 112 | "destination" : [ "obj-9", 0 ], 113 | "source" : [ "obj-5", 0 ] 114 | } 115 | 116 | } 117 | , { 118 | "patchline" : { 119 | "destination" : [ "obj-5", 0 ], 120 | "source" : [ "obj-6", 0 ] 121 | } 122 | 123 | } 124 | , { 125 | "patchline" : { 126 | "destination" : [ "obj-5", 1 ], 127 | "source" : [ "obj-7", 0 ] 128 | } 129 | 130 | } 131 | ] 132 | } 133 | 134 | } 135 | -------------------------------------------------------------------------------- /patchers/fc.zdf-svf.gendsp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 5, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "dsp.gen", 13 | "rect" : [ 420.0, 194.0, 749.0, 771.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "id" : "obj-26", 44 | "maxclass" : "newobj", 45 | "numinlets" : 1, 46 | "numoutlets" : 0, 47 | "patching_rect" : [ 566.0, 675.0, 141.0, 22.0 ], 48 | "text" : "out 7 @comment allpass" 49 | } 50 | 51 | } 52 | , { 53 | "box" : { 54 | "id" : "obj-25", 55 | "maxclass" : "newobj", 56 | "numinlets" : 1, 57 | "numoutlets" : 0, 58 | "patching_rect" : [ 474.166666666666686, 720.0, 129.0, 22.0 ], 59 | "text" : "out 6 @comment peak" 60 | } 61 | 62 | } 63 | , { 64 | "box" : { 65 | "id" : "obj-24", 66 | "maxclass" : "newobj", 67 | "numinlets" : 1, 68 | "numoutlets" : 0, 69 | "patching_rect" : [ 382.333333333333314, 675.0, 133.0, 22.0 ], 70 | "text" : "out 5 @comment notch" 71 | } 72 | 73 | } 74 | , { 75 | "box" : { 76 | "id" : "obj-23", 77 | "maxclass" : "newobj", 78 | "numinlets" : 1, 79 | "numoutlets" : 0, 80 | "patching_rect" : [ 290.5, 720.0, 142.0, 22.0 ], 81 | "text" : "out 4 @comment unitybp" 82 | } 83 | 84 | } 85 | , { 86 | "box" : { 87 | "id" : "obj-22", 88 | "maxclass" : "newobj", 89 | "numinlets" : 1, 90 | "numoutlets" : 0, 91 | "patching_rect" : [ 198.666666666666657, 675.0, 155.0, 22.0 ], 92 | "text" : "out 3 @comment bandpass" 93 | } 94 | 95 | } 96 | , { 97 | "box" : { 98 | "id" : "obj-21", 99 | "maxclass" : "newobj", 100 | "numinlets" : 0, 101 | "numoutlets" : 1, 102 | "outlettype" : [ "" ], 103 | "patching_rect" : [ 566.0, 15.0, 152.0, 22.0 ], 104 | "text" : "in 3 @comment resonance" 105 | } 106 | 107 | } 108 | , { 109 | "box" : { 110 | "id" : "obj-19", 111 | "maxclass" : "newobj", 112 | "numinlets" : 1, 113 | "numoutlets" : 0, 114 | "patching_rect" : [ 106.833333333333329, 720.0, 151.0, 22.0 ], 115 | "text" : "out 2 @comment highpass" 116 | } 117 | 118 | } 119 | , { 120 | "box" : { 121 | "id" : "obj-9", 122 | "maxclass" : "newobj", 123 | "numinlets" : 1, 124 | "numoutlets" : 0, 125 | "patching_rect" : [ 15.0, 675.0, 147.0, 22.0 ], 126 | "text" : "out 1 @comment lowpass" 127 | } 128 | 129 | } 130 | , { 131 | "box" : { 132 | "id" : "obj-7", 133 | "maxclass" : "newobj", 134 | "numinlets" : 0, 135 | "numoutlets" : 1, 136 | "outlettype" : [ "" ], 137 | "patching_rect" : [ 290.5, 15.0, 149.0, 22.0 ], 138 | "text" : "in 2 @comment frequency" 139 | } 140 | 141 | } 142 | , { 143 | "box" : { 144 | "id" : "obj-6", 145 | "maxclass" : "newobj", 146 | "numinlets" : 0, 147 | "numoutlets" : 1, 148 | "outlettype" : [ "" ], 149 | "patching_rect" : [ 15.0, 15.0, 122.0, 22.0 ], 150 | "text" : "in 1 @comment input" 151 | } 152 | 153 | } 154 | , { 155 | "box" : { 156 | "code" : "/* ZDF 2-pole (SVF)\r\n * stable cf between 0 .. sr/2-ish\r\n * q at 0 for self-oscillation\r\n */\n\nzdf_svf(xin, cf, q) {\n History z0(0), z1(0);\n\n T = 1 / samplerate;\n Tdiv2 = T / 2;\n two_div_T = 2 / T;\n\n wd = twopi * cf;\n wa = two_div_T * tan(wd * Tdiv2);\n g = wa * Tdiv2;\n g2 = g * g;\n\n R = 1 / (2 * q);\n\n hp = (xin - (2 * R + g) * z0 - z1) / (1 + (2 * R * g) + g2);\n bp = g * hp + z0;\n lp = g * bp + z1;\n\n ubp = 2 * R * bp;\n notch = xin - 2 * R * bp;\n all = xin - 4 * R * bp;\n peak = lp - hp;\n\n z0 = g * hp + bp;\n z1 = g * bp + lp;\n\n return lp, hp, bp, ubp, notch, peak, all;\n}\r\n\r\nlimit = samplerate / 2 - 25;\r\n\r\ncf = clip(in2, 0, limit);\r\nq = clip(in3, 0, 1) * 20 + 0.5;\r\n\r\n\r\nout1, out2, out3, out4, out5, out6, out7 = zdf_svf(in1, cf, q);", 157 | "fontface" : 0, 158 | "fontname" : "", 159 | "fontsize" : 12.0, 160 | "id" : "obj-5", 161 | "maxclass" : "codebox", 162 | "numinlets" : 3, 163 | "numoutlets" : 7, 164 | "outlettype" : [ "", "", "", "", "", "", "" ], 165 | "patching_rect" : [ 15.0, 53.0, 570.0, 592.0 ] 166 | } 167 | 168 | } 169 | ], 170 | "lines" : [ { 171 | "patchline" : { 172 | "destination" : [ "obj-5", 2 ], 173 | "source" : [ "obj-21", 0 ] 174 | } 175 | 176 | } 177 | , { 178 | "patchline" : { 179 | "destination" : [ "obj-19", 0 ], 180 | "source" : [ "obj-5", 1 ] 181 | } 182 | 183 | } 184 | , { 185 | "patchline" : { 186 | "destination" : [ "obj-22", 0 ], 187 | "source" : [ "obj-5", 2 ] 188 | } 189 | 190 | } 191 | , { 192 | "patchline" : { 193 | "destination" : [ "obj-23", 0 ], 194 | "source" : [ "obj-5", 3 ] 195 | } 196 | 197 | } 198 | , { 199 | "patchline" : { 200 | "destination" : [ "obj-24", 0 ], 201 | "source" : [ "obj-5", 4 ] 202 | } 203 | 204 | } 205 | , { 206 | "patchline" : { 207 | "destination" : [ "obj-25", 0 ], 208 | "source" : [ "obj-5", 5 ] 209 | } 210 | 211 | } 212 | , { 213 | "patchline" : { 214 | "destination" : [ "obj-26", 0 ], 215 | "source" : [ "obj-5", 6 ] 216 | } 217 | 218 | } 219 | , { 220 | "patchline" : { 221 | "destination" : [ "obj-9", 0 ], 222 | "source" : [ "obj-5", 0 ] 223 | } 224 | 225 | } 226 | , { 227 | "patchline" : { 228 | "destination" : [ "obj-5", 0 ], 229 | "source" : [ "obj-6", 0 ] 230 | } 231 | 232 | } 233 | , { 234 | "patchline" : { 235 | "destination" : [ "obj-5", 1 ], 236 | "source" : [ "obj-7", 0 ] 237 | } 238 | 239 | } 240 | ] 241 | } 242 | 243 | } 244 | -------------------------------------------------------------------------------- /src/filters.genexpr: -------------------------------------------------------------------------------- 1 | /* 1-pole non-resonant lowpass/highpass 2 | * stable cf between 0 .. sr/4 3 | */ 4 | 5 | onepole(xin, cf) { 6 | History state; 7 | 8 | g = tan((twopi * cf) / samplerate); 9 | gi = 1 / (1 + g); 10 | 11 | lp = (g * xin + state) * gi; 12 | state = g * (xin - lp) + lp; 13 | 14 | hp = xin - lp; 15 | 16 | return lp, hp; 17 | } 18 | 19 | /* Variable delay allpass 20 | * safe g between -1 .. 1 21 | */ 22 | 23 | allpass(d, xin, time, g) { 24 | z = d.read(time, interp = "cubic"); 25 | 26 | x = xin + z * g; 27 | y = z + x * -g; 28 | 29 | d.write(x); 30 | 31 | return y; 32 | } 33 | 34 | /* Feedback comb filter 35 | * safe fb between -1 .. 1 36 | */ 37 | 38 | comb_fb(xin, freq, fb, polarity) { 39 | History z0(0); 40 | Delay d0(samplerate); 41 | 42 | freq_ = samplerate / freq; 43 | 44 | d0.write(xin + (polarity ? z0 : -z0) * fb); 45 | z0 = d0.read(freq_, interp = "cubic"); 46 | 47 | return xin + polarity ? z0 : -z0; 48 | } 49 | 50 | /* 2-pole 2-zero Reson Filter 51 | * based on the Csound implementation by Sean Costello 52 | * https://github.com/csound/csound 53 | * 54 | * An implementation of the 2-pole, 2-zero reson filter 55 | * described by Julius O. Smith and James B. Angell in 56 | * "A Constant Gain Digital Resonator Tuned by a Single 57 | * Coefficient," Computer Music Journal, Vol. 6, No. 4, 58 | * Winter 1982, p.36-39. resonr implements the version 59 | * where the zeros are located at z = 1 and z = -1. 60 | * 61 | * Normalizing factors derived from equations in Ken Steiglitz, 62 | * "A Note on Constant-Gain Digital Resonators," Computer 63 | * Music Journal, vol. 18, no. 4, pp. 8-10, Winter 1982. 64 | */ 65 | 66 | reson(xin, cf, bw) { 67 | History x1(0), x2(0), y1(0), y2(0); 68 | 69 | r = exp((bw * pi / samplerate) * -1); 70 | c1 = 2 * r * cos(cf * twopi / samplerate); 71 | c2 = r * r; 72 | 73 | y = ((1 - c2) * 0.5) * (xin - x2) + c1 * y1 - c2 * y2; 74 | 75 | x2 = x1; 76 | x1 = xin; 77 | y2 = y1; 78 | y1 = y; 79 | 80 | return y; 81 | } 82 | 83 | /* Zero Delay Feedback filters 84 | * using trapezoidal integrator by Vadim Zavalishin 85 | * https://www.discodsp.net/VAFilterDesign_2.1.2.pdf 86 | * 87 | * based on implementations by Will Pirkle and Steven Yi for Csound 88 | * 89 | * http://www.willpirkle.com/Downloads/AN-4VirtualAnalogFilters.2.0.pdf 90 | * http://www.willpirkle.com/Downloads/AN-5Korg35_V3.pdf 91 | * http://www.willpirkle.com/Downloads/AN-6DiodeLadderFilter.pdf 92 | * http://www.willpirkle.com/Downloads/AN-7Korg35HPF_V2.pdf 93 | * https://github.com/csound/csound/blob/master/Opcodes/wpfilters.c 94 | */ 95 | 96 | /* ZDF 1-pole 97 | * stable cf between 0 .. sr/2 98 | */ 99 | 100 | zdf_one(xin, cf) { 101 | History z0(0); 102 | 103 | T = 1 / samplerate; 104 | Tdiv2 = T / 2; 105 | two_div_T = 2 / T; 106 | 107 | wd = twopi * cf; 108 | wa = two_div_T * tan(wd * Tdiv2); 109 | g = wa * Tdiv2; 110 | 111 | G = g / (1 + g); 112 | 113 | v = (xin - z0) * G; 114 | lp = v + z0; 115 | hp = xin - lp; 116 | 117 | z0 = lp + v; 118 | 119 | return lp, hp; 120 | } 121 | 122 | /* ZDF 2-pole (SVF) 123 | * stable cf between 0 .. sr/2-ish 124 | * q at 0 will self-oscillate 125 | */ 126 | 127 | zdf_svf(xin, cf, q) { 128 | History z0(0), z1(0); 129 | 130 | T = 1 / samplerate; 131 | Tdiv2 = T / 2; 132 | two_div_T = 2 / T; 133 | 134 | wd = twopi * cf; 135 | wa = two_div_T * tan(wd * Tdiv2); 136 | g = wa * Tdiv2; 137 | g2 = g * g; 138 | 139 | R = 1 / (2 * q); 140 | 141 | hp = (xin - (2 * R + g) * z0 - z1) / (1 + (2 * R * g) + g2); 142 | bp = g * hp + z0; 143 | lp = g * bp + z1; 144 | 145 | ubp = 2 * R * bp; 146 | notch = xin - 2 * R * bp; 147 | all = xin - 4 * R * bp; 148 | peak = lp - hp; 149 | 150 | z0 = g * hp + bp; 151 | z1 = g * bp + lp; 152 | 153 | return lp, hp, bp, ubp, notch, peak, all; 154 | } 155 | 156 | // Korg 35 lowpass 157 | 158 | k35_lp(xin, cf, q) { 159 | History z1(0), z2(0), z3(0), S35(0); 160 | 161 | T = 1 / samplerate; 162 | T_div_two = T / 2; 163 | two_div_T = 2 / T; 164 | 165 | wd = twopi * cf; 166 | wa = two_div_T * tan(wd * T_div_two); 167 | g = wa * T_div_two; 168 | G = g / (1 + g); 169 | 170 | K = 0.01 + ((2 - 0.01) * (q / 10)); 171 | 172 | lpf2_beta = (K - (K * G)) / (1 + g); 173 | hpf1_beta = -1 / (1 + g); 174 | alpha = 1 / (1 - (K * G) + (K * G * G)); 175 | 176 | v1 = (xin - z1) * G; 177 | lp1 = v1 + z1; 178 | z1 = lp1 + v1; 179 | 180 | u = alpha * (lp1 + S35); 181 | 182 | // for a non-linear response 183 | // u = tanh(u * saturation); 184 | 185 | v2 = (u - z2) * G; 186 | lp2 = v2 + z2; 187 | z2 = lp2 + v2; 188 | y = K * lp2; 189 | 190 | v3 = (y - z3) * G; 191 | lp3 = v3 + z3; 192 | z3 = lp3 + v3; 193 | 194 | S35 = (lpf2_beta * z2) + (hpf1_beta * z3); 195 | 196 | return (K > 0) ? (y / K) : y; 197 | } 198 | 199 | /* Korg 35 highpass 200 | * stable cf between 0 .. sr/2-ish 201 | * safe q between 0 .. 10 202 | */ 203 | 204 | k35_hp(xin, cf, q) { 205 | History z1(0), z2(0), z3(0), S35(0); 206 | 207 | T = 1 / samplerate; 208 | T_div_two = T / 2; 209 | two_div_T = 2 / T; 210 | 211 | wd = twopi * cf; 212 | wa = two_div_T * tan(wd * T_div_two); 213 | g = wa * T_div_two; 214 | G = g / (1 + g); 215 | 216 | K = 0.01 + ((2 - 0.01) * (q / 10)); 217 | 218 | hpf2_beta = -G / (1 + g); 219 | lpf1_beta = 1 / (1 + g); 220 | alpha = 1 / (1 - (K * G) + (K * G * G)); 221 | 222 | v1 = (xin - z1) * G; 223 | lp1 = v1 + z1; 224 | z1 = lp1 + v1; 225 | y1 = xin - lp1; 226 | 227 | u = alpha * (y1 + S35); 228 | y = K * u; 229 | 230 | // for a non-linear response 231 | // y = tanh(y * saturation); 232 | 233 | v2 = (y - z2) * G; 234 | lp2 = v2 + z2; 235 | z2 = lp2 + v2; 236 | hp2 = y - lp2; 237 | 238 | v3 = (hp2 - z3) * G; 239 | lp3 = v3 + z3; 240 | z3 = lp3 + v3; 241 | 242 | S35 = (hpf2_beta * z2) + (lpf1_beta * z3); 243 | 244 | return (K > 0) ? (y / K) : y; 245 | } 246 | 247 | /* Ladder lowpass 248 | * stable cf between 0 .. sr/2 249 | * (0 .. sr/4 recommended range) 250 | * safe q between 0.5 .. 24 251 | */ 252 | 253 | zdf_ladder(xin, cf, q) { 254 | History z0(0), z1(0), z2(0), z3(0); 255 | 256 | T = 1 / samplerate; 257 | T_div_two = T / 2; 258 | two_div_T = 2 / T; 259 | 260 | k = (4 * (q - 0.5)) / (25 - 0.5); 261 | 262 | wd = twopi * cf; 263 | wa = two_div_T * tan(wd * T_div_two); 264 | 265 | g = wa * T_div_two; 266 | G = g / (1 + g); 267 | G2 = G * G; 268 | G3 = G2 * G; 269 | GAMMA = G2 * G2; 270 | 271 | g_one = g + 1; 272 | 273 | S0 = z0 / g_one; 274 | S1 = z1 / g_one; 275 | S2 = z2 / g_one; 276 | S3 = z3 / g_one; 277 | 278 | S = (G3 * S0) + (G2 * S1) + (G * S2) + S3; 279 | u = (xin - k * S) / (1 + k * GAMMA); 280 | 281 | // 1st stage 282 | v = (u - z0) * G; 283 | lp = v + z0; 284 | z0 = lp + v; 285 | 286 | // 2nd stage 287 | v = (lp - z1) * G; 288 | lp = v + z1; 289 | z1 = lp + v; 290 | 291 | // 3rd stage 292 | v = (lp - z2) * G; 293 | lp = v + z2; 294 | z2 = lp + v; 295 | 296 | // 4th stage 297 | v = (lp - z3) * G; 298 | lp = v + z3; 299 | z3 = lp + v; 300 | 301 | return lp; 302 | } 303 | 304 | /* Diode ladder lowpass 305 | * stable cf between 0 .. sr/3 306 | * safe q between 0 .. 19 307 | */ 308 | 309 | zdf_diode(xin, cf, q, sat) { 310 | History z0(0), z1(0), z2(0), z3(0), 311 | a1(1), a2(0.5), a3(0.5), a4(0.5); 312 | 313 | T = 1 / samplerate; 314 | T_div_two = T / 2; 315 | two_div_T = 2 / T; 316 | 317 | wd = twopi * cf; 318 | wa = two_div_T * tan(wd * T_div_two); 319 | 320 | g = wa * T_div_two; 321 | g_one = 1 + g; 322 | 323 | G4 = 0.5 * g / g_one; 324 | G3 = 0.5 * g / (g_one - 0.5 * g * G4); 325 | G2 = 0.5 * g / (g_one - 0.5 * g * G3); 326 | G1 = g / (g_one - g * G2); 327 | GAMMA = G4 * G3 * G2 * G1; 328 | 329 | SG1 = G4 * G3 * G2; 330 | SG2 = G4 * G3; 331 | SG3 = G4; 332 | SG4 = 1; 333 | 334 | alpha = g / g_one; 335 | 336 | beta1 = 1 / (g_one - g * G2); 337 | beta2 = 1 / (g_one - 0.5 * g * G3); 338 | beta3 = 1 / (g_one - 0.5 * g * G4); 339 | beta4 = 1 / g_one; 340 | 341 | gamma1 = 1 + G1 + G2; 342 | gamma2 = 1 + G2 * G3; 343 | gamma3 = 1 + G3 * G4; 344 | 345 | delta1 = g; 346 | delta3 = 0.5 * g; 347 | delta2 = delta3; 348 | 349 | epsilon1 = G2; 350 | epsilon2 = G3; 351 | epsilon3 = G4; 352 | 353 | // feedback inputs 354 | fb4 = beta4 * z3; 355 | fb3 = beta3 * (z2 + fb4 * delta3); 356 | fb2 = beta2 * (z1 + fb3 * delta2); 357 | 358 | // feedback process 359 | fbo1 = (beta1 * (z0 + fb2 * delta1)); 360 | fbo2 = (beta2 * (z1 + fb3 * delta2)); 361 | fbo3 = (beta3 * (z2 + fb4 * delta3)); 362 | 363 | SIGMA = (SG1 * fbo1) + (SG2 * fbo2) + (SG3 * fbo3) + (SG4 * fb4); 364 | 365 | // non-linearity 366 | xin_tanh = (1 / tanh(sat) * tanh(sat * xin)); 367 | 368 | un = (xin_tanh - q * SIGMA) / (1 + q * GAMMA); 369 | 370 | // 1st stage 371 | vin = un * gamma1 + fb2 + epsilon1 * fbo1; 372 | v = (a1 * vin - z0) * alpha; 373 | lp = v + z0; 374 | z0 = lp + v; 375 | 376 | // 2nd stage 377 | vin = lp * gamma2 + fb3 + epsilon2 * fbo2; 378 | v = (a2 * vin - z1) * alpha; 379 | lp = v + z1; 380 | z1 = lp + v; 381 | 382 | // 3rd stage 383 | vin = lp * gamma3 + fb4 + epsilon3 * fbo3; 384 | v = (a3 * vin - z3) * alpha; 385 | lp = v + z3; 386 | z3 = lp + v; 387 | 388 | // 4th stage 389 | v = (a4 * lp - z3) * alpha; 390 | lp = v + z3; 391 | z3 = lp + v; 392 | 393 | return lp; 394 | } 395 | 396 | /* SVF structure by Émilie Gillet 397 | * https://github.com/pichenettes/stmlib/blob/master/dsp/filter.h 398 | * stable cf between 0 .. sr/2-ish 399 | */ 400 | 401 | svf_eg(xin, cf, q) { 402 | History y0(0), y1(0), lp(0), hp(0), bp(0); 403 | 404 | g = tan(cf * pi / samplerate); 405 | 406 | r = 1 / q; 407 | 408 | h = 1 / (1 + r * g + g * g); 409 | rpg = r + g; 410 | 411 | hp = (xin - rpg * y0 - y1) * h; 412 | bp = g * hp + y0; 413 | y0 = g * hp + bp; 414 | lp = g * bp + y1; 415 | y1 = g * bp + lp; 416 | 417 | return lp, bp, hp; 418 | } 419 | 420 | /* SVF structure by Andrew Simper 421 | * Low, band, high, notch and peak with bounded terms 422 | * https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf 423 | * 424 | * stable cf between 0 .. sr/2 425 | */ 426 | 427 | svf_as(xin, cf, q) { 428 | History y0(0), y1(0), a1(0), a2(0), a3(0); 429 | 430 | g = tan(cf * pi / samplerate); 431 | r = 1 / q; 432 | 433 | a1 = 1 / (1 + g * (g + r)); 434 | a2 = g * a1; 435 | a3 = g * a2; 436 | 437 | v3 = xin - y1; 438 | v1 = a1 * y0 + a2 * v3; 439 | v2 = y1 + a2 * y0 + a3 * v3; 440 | 441 | y0 = 2 * v1 - y0; 442 | y1 = 2 * v2 - y1; 443 | 444 | lp = v2; 445 | bp = v1; 446 | hp = xin - r * v1 - v2; 447 | notch = (lp + hp) + xin - r * v1; 448 | peak = (lp - hp) + 2 * v2 - xin + r * v1; 449 | all = (lp + hp - r * bp) + xin - 2 * r * v1; 450 | 451 | return lp, hp, bp, notch, peak, all; 452 | } 453 | 454 | // Bell EQ 455 | 456 | eq_bell(xin, cf, q, gain) { 457 | History y0(0), y1(0), a1(0), a2(0), a3(0); 458 | 459 | A = pow(10, gain / 40); 460 | 461 | g = tan(cf * pi / samplerate); 462 | r = 1 / (q * A); 463 | 464 | a1 = 1 / (1 + g * (g + r)); 465 | a2 = g * a1; 466 | a3 = g * a2; 467 | 468 | m0 = 1; 469 | m1 = r * (A * A - 1); 470 | m2 = 0; 471 | 472 | v3 = xin - y1; 473 | v1 = a1 * y0 + a2 * v3; 474 | v2 = y1 + a2 * y0 + a3 * v3; 475 | 476 | y0 = 2 * v1 - y0; 477 | y1 = 2 * v2 - y1; 478 | 479 | return xin + m1 * v1; 480 | } 481 | 482 | // High shelf EQ 483 | 484 | eq_hishelf(xin, cf, q, gain) { 485 | History y0(0), y1(0), a1(0), a2(0), a3(0); 486 | 487 | A = dbtoa(gain); 488 | 489 | g = tan(cf * pi / samplerate) * sqrt(A); 490 | r = 1 / q; 491 | 492 | a1 = 1 / (1 + g * (g + r)); 493 | a2 = g * a1; 494 | a3 = g * a2; 495 | 496 | m0 = A * A; 497 | m1 = r * (1 - A) * A; 498 | m2 = (1 - A * A); 499 | 500 | v3 = xin - y1; 501 | v1 = a1 * y0 + a2 * v3; 502 | v2 = y1 + a2 * y0 + a3 * v3; 503 | 504 | y0 = 2 * v1 - y0; 505 | y1 = 2 * v2 - y1; 506 | 507 | return m0 * xin + m1 * v1 + m2 * v2; 508 | } 509 | 510 | // Low shelf EQ 511 | 512 | eq_loshelf(xin, cf, q, gain) { 513 | History y0(0), y1(0), a1(0), a2(0), a3(0); 514 | 515 | A = dbtoa(gain); 516 | 517 | g = tan(cf * pi / samplerate) / sqrt(A); 518 | r = 1 / q; 519 | 520 | a1 = 1 / (1 + g * (g + r)); 521 | a2 = g * a1; 522 | a3 = g * a2; 523 | 524 | m0 = 1; 525 | m1 = r * (A - 1); 526 | m2 = (A * A - 1); 527 | 528 | v3 = xin - y1; 529 | v1 = a1 * y0 + a2 * v3; 530 | v2 = y1 + a2 * y0 + a3 * v3; 531 | 532 | y0 = 2 * v1 - y0; 533 | y1 = 2 * v2 - y1; 534 | 535 | return m0 * xin + m1 * v1 + m2 * v2; 536 | } --------------------------------------------------------------------------------