memlnaut-nisps/playground/faust/fm-matrix.json
monkey-w1n5t0n afff406d92 feat(playground): add Modular audio mode with shared mod pool
New "Modular" engine in a-immersive with three hot-swappable Faust
sub-engines (subtractive/additive/fm) sharing a common modulation pool:
16 ADSR slots + 32 LFO slots (single-knob sine->tri->square->saw
wavemorph) routed through a 48-source x 10-destination matrix per
engine. Per-connection scalar amounts in [-1, 1], summed at each
destination. Default MLP output count is 512 (32 mod-source params +
480 matrix cells); model reinits on sub-engine swap, count change, or
engine-param exposure toggle.

Faust layer:
- mod-pool.lib: shared ADSR/LFO/source-bus library
- gen-modular-dsp.py: byte-reproducible generator (source of truth)
- modular-subtractive: faithful Minimoog (3 osc, ladder filter, no envs)
- modular-additive: 64-partial, spectral shape + formants, no envs/LFOs
- modular-fm: 4-op matrix + self-feedback, no envs
- All three share d08=amp, d09=pan conventions
- MODULAR_DESTINATIONS.md: authoritative destination table

JS layer:
- ModularEngine: self-contained SynthEngine with getState/setState,
  setSubEngine, setModSourceCount, setExposeEngineParam
- modular-ui: drawer with sub-engine toggle, ADSR/LFO count steppers,
  per-slot enable switches, matrix grid editor (tap-cycle, long-press
  precise, right-click menu, negative amounts), preset overlay
- modular-presets: 6 named presets (Slow pad, Plucky bass, Crystal,
  DX bell, Morphing drone + default)
- a-app.js: Modular mode registered, paramMeta:change -> resizeMLP,
  modular DSP state persisted under modularDspState, window.__nisps
  debug hooks for programmatic control

Tests: tests/e2e/modular-mode.spec.js (11 Playwright tests, all passing
including DSP state survives reload, sub-engine swap keeps paramCount,
preset apply verification).

Also fixes a pre-existing build.sh bug where the -e flag caused faust
to overwrite .wasm outputs with expanded DSP source text, leaving
additive/fm-matrix/eoc-* committed as invalid WebAssembly. Rebuilt all
affected engines with the corrected script. Added an early-message
buffer to faust-worklet-processor.js so setParam calls arriving before
wasm instantiation are queued rather than dropped (needed when the user
configures modular state before clicking Start Audio).
2026-04-11 07:34:41 +02:00

1 line
No EOL
32 KiB
JSON

{"name": "fm-matrix","filename": "fm-matrix.dsp","version": "2.79.3","compile_options": "-lang wasm -ct 1 -cn fm_matrix -es 1 -mcd 16 -mdd 1024 -mdy 33 -single -ftz 0","library_list": ["/nix/store/yjqpc2a6b2m08zwwrgsdlqsi40m5wnpp-faust-2.79.3/share/faust/stdfaust.lib","/nix/store/yjqpc2a6b2m08zwwrgsdlqsi40m5wnpp-faust-2.79.3/share/faust/signals.lib","/nix/store/yjqpc2a6b2m08zwwrgsdlqsi40m5wnpp-faust-2.79.3/share/faust/maths.lib","/nix/store/yjqpc2a6b2m08zwwrgsdlqsi40m5wnpp-faust-2.79.3/share/faust/platform.lib","/nix/store/yjqpc2a6b2m08zwwrgsdlqsi40m5wnpp-faust-2.79.3/share/faust/envelopes.lib","/nix/store/yjqpc2a6b2m08zwwrgsdlqsi40m5wnpp-faust-2.79.3/share/faust/oscillators.lib","/nix/store/yjqpc2a6b2m08zwwrgsdlqsi40m5wnpp-faust-2.79.3/share/faust/filters.lib","/nix/store/yjqpc2a6b2m08zwwrgsdlqsi40m5wnpp-faust-2.79.3/share/faust/basics.lib"],"include_pathnames": ["/nix/store/yjqpc2a6b2m08zwwrgsdlqsi40m5wnpp-faust-2.79.3/share/faust","/usr/local/share/faust","/usr/share/faust",".","/home/w1n5t0n/src/MEMLNaut-NISPS/playground/faust"],"size": 344892,"code": "Ly8gZm0tbWF0cml4LmRzcCDigJQgRnVsbCA1Ni1wYXJhbWV0ZXIgNC1vcGVyYXRvciBGTSBzeW50aGVzaXplciB3aXRoIGNvbnRpbnVvdXMgcm91dGluZyBtYXRyaXgKLy8KLy8gRGVzaWduOiA0IG9wZXJhdG9ycyB3aXRoIGZ1bGx5IGNvbnRpbnVvdXMgTsOXTiBjcm9zcy1tb2R1bGF0aW9uIG1hdHJpeC4KLy8gTm8gZml4ZWQgYWxnb3JpdGhtIHNsb3RzIOKAlCB0aGUgYWxnb3JpdGhtIGVtZXJnZXMgZnJvbSBtb2R1bGF0aW9uIGluZGV4IHZhbHVlcy4KLy8gV2hlbiBhbGwgcm91dGluZyBtYXRyaXggaW5kaWNlcyBhcmUgbmVhciAwOiBhZGRpdGl2ZSBzeW50aGVzaXMuCi8vIEFzIGluZGljZXMgZ3JvdzogaW5jcmVhc2luZ2x5IGNvbXBsZXggRk0gdGltYnJlcyBlbWVyZ2UuCi8vCi8vIFBhcmFtZXRlciBvcmRlcmluZyAoNTYgdG90YWwsIG1hcHMgdG8gTUxQIG91dHB1dCBpbmRpY2VzIDDigJM1NSk6Ci8vICAgMOKAkzIzOiAgT3BlcmF0b3IgQ29yZSDDlyA0IChyYXRpbywgbGV2ZWwsIGF0dGFjaywgZGVjYXksIHN1c3RhaW4sIHJlbGVhc2UpCi8vICAgMjTigJMzNTogQ3Jvc3MtTW9kdWxhdGlvbiBNYXRyaXggKDEyIGRpcmVjdGVkIHBhaXJzKQovLyAgIDM24oCTMzk6IFNlbGYtRmVlZGJhY2sgw5cgNAovLyAgIDQw4oCTNDc6IEdsb2JhbCBNb2R1bGF0aW9uIChMRk8sIHBpdGNoIGVudiwgdmVsb2NpdHkpCi8vICAgNDjigJM1NTogTWFzdGVyIChsZXZlbCwgdmVsIHNlbnMsIGdsaWRlLCBmaW5lIHR1bmUsIHdhdmVmb3JtIGJsZW5kLCBzdGVyZW8gc3ByZWFkLAovLyAgICAgICAgICAgb3V0cHV0IHNhdHVyYXRpb24sIG91dHB1dCBIUCkKLy8KLy8gSGlkZGVuIHBhcmFtcyAobm90IGluIHRoZSA1Ni1wYXJhbSBOSVNQUyBsaXN0KToKLy8gICBmcmVxICDigJQgc2V0IGJ5IG5vdGVPbiAoSHopCi8vICAgZ2F0ZSAg4oCUIHNldCBieSBub3RlT24vbm90ZU9mZiAoMC8xKQovLyAgIF92ZWwgIOKAlCBzZXQgYnkgbm90ZU9uICh2ZWxvY2l0eSAw4oCTMSkKLy8KLy8gRk0gaW1wbGVtZW50YXRpb246IGVhY2ggb3BlcmF0b3IgcGhhc2UtbW9kdWxhdGVzIG90aGVycyB2aWEgYSAxLXNhbXBsZSBkZWxheWVkCi8vIGZlZWRiYWNrIGJ1cy4gVGhlIDQgb3BlcmF0b3Igb3V0cHV0cyBhcmUgY29sbGVjdGVkIGludG8gYSA0LWNoYW5uZWwgYnVzIGFuZAovLyBsb29wZWQgdmlhIH4uIFRoaXMgaXMgdGhlIHN0YW5kYXJkIEZhdXN0IEZNIHBhdHRlcm4uCi8vCi8vIEJ1aWxkOgovLyAgIG5peC1zaGVsbCAtcCBmYXVzdCAtLXJ1biBcCi8vICAgICAiZmF1c3QgLWxhbmcgd2FzbSAtY24gZm1fbWF0cml4IGZtLW1hdHJpeC5kc3AgLW8gZm0tbWF0cml4Lndhc20iCgppbXBvcnQoInN0ZGZhdXN0LmxpYiIpOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEhpZGRlbiBjb250cm9sIHBhcmFtcyAoZHJpdmVuIGJ5IG5vdGVPbi9ub3RlT2ZmLCBub3QgTklTUFMpCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZnJlcSA9IGhzbGlkZXIoIk1hc3Rlci9mcmVxW2hpZGRlbjoxXVt1bml0Okh6XSIsIDIyMCwgMjAsIDQwMDAsIDAuMDEpOwpnYXRlID0gYnV0dG9uKCJNYXN0ZXIvZ2F0ZVtoaWRkZW46MV0iKTsKdmVsICA9IGhzbGlkZXIoIk1hc3Rlci9fdmVsW2hpZGRlbjoxXSIsIDAuNywgMC4wLCAxLjAsIDAuMDAxKSA6IHNpLnNtb287CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gR3JvdXAgMSDigJQgT3BlcmF0b3IgQ29yZSDDlyA0ICAocGFyYW1zIDDigJMyMykKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpvcDFfcmF0aW8gICA9IGhzbGlkZXIoIk9wZXJhdG9ycy9PcCAxL29wMV9yYXRpbyIsICAgMS4wLCAwLjEyNSwgMTYuMCwgMC4wMDEpIDogc2kuc21vbzsKb3AxX2xldmVsICAgPSBoc2xpZGVyKCJPcGVyYXRvcnMvT3AgMS9vcDFfbGV2ZWwiLCAgIDAuOCwgMC4wLCAgIDEuMCwgIDAuMDAxKSA6IHNpLnNtb287Cm9wMV9hdHRhY2sgID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDEvb3AxX2F0dGFjayIsICAwLjAxLCAwLjAwMSwgNS4wLCAwLjAwMSk7Cm9wMV9kZWNheSAgID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDEvb3AxX2RlY2F5IiwgICAwLjMsIDAuMDAxLCAxMC4wLCAwLjAwMSk7Cm9wMV9zdXN0YWluID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDEvb3AxX3N1c3RhaW4iLCAwLjcsIDAuMCwgICAxLjAsICAwLjAwMSk7Cm9wMV9yZWxlYXNlID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDEvb3AxX3JlbGVhc2UiLCAwLjUsIDAuMDEsICAxMC4wLCAwLjAwMSk7CgpvcDJfcmF0aW8gICA9IGhzbGlkZXIoIk9wZXJhdG9ycy9PcCAyL29wMl9yYXRpbyIsICAgMi4wLCAwLjEyNSwgMTYuMCwgMC4wMDEpIDogc2kuc21vbzsKb3AyX2xldmVsICAgPSBoc2xpZGVyKCJPcGVyYXRvcnMvT3AgMi9vcDJfbGV2ZWwiLCAgIDAuNiwgMC4wLCAgIDEuMCwgIDAuMDAxKSA6IHNpLnNtb287Cm9wMl9hdHRhY2sgID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDIvb3AyX2F0dGFjayIsICAwLjAxLCAwLjAwMSwgNS4wLCAwLjAwMSk7Cm9wMl9kZWNheSAgID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDIvb3AyX2RlY2F5IiwgICAwLjMsIDAuMDAxLCAxMC4wLCAwLjAwMSk7Cm9wMl9zdXN0YWluID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDIvb3AyX3N1c3RhaW4iLCAwLjcsIDAuMCwgICAxLjAsICAwLjAwMSk7Cm9wMl9yZWxlYXNlID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDIvb3AyX3JlbGVhc2UiLCAwLjUsIDAuMDEsICAxMC4wLCAwLjAwMSk7CgpvcDNfcmF0aW8gICA9IGhzbGlkZXIoIk9wZXJhdG9ycy9PcCAzL29wM19yYXRpbyIsICAgMy4wLCAwLjEyNSwgMTYuMCwgMC4wMDEpIDogc2kuc21vbzsKb3AzX2xldmVsICAgPSBoc2xpZGVyKCJPcGVyYXRvcnMvT3AgMy9vcDNfbGV2ZWwiLCAgIDAuNCwgMC4wLCAgIDEuMCwgIDAuMDAxKSA6IHNpLnNtb287Cm9wM19hdHRhY2sgID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDMvb3AzX2F0dGFjayIsICAwLjAxLCAwLjAwMSwgNS4wLCAwLjAwMSk7Cm9wM19kZWNheSAgID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDMvb3AzX2RlY2F5IiwgICAwLjMsIDAuMDAxLCAxMC4wLCAwLjAwMSk7Cm9wM19zdXN0YWluID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDMvb3AzX3N1c3RhaW4iLCAwLjcsIDAuMCwgICAxLjAsICAwLjAwMSk7Cm9wM19yZWxlYXNlID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDMvb3AzX3JlbGVhc2UiLCAwLjUsIDAuMDEsICAxMC4wLCAwLjAwMSk7CgpvcDRfcmF0aW8gICA9IGhzbGlkZXIoIk9wZXJhdG9ycy9PcCA0L29wNF9yYXRpbyIsICAgMC41LCAwLjEyNSwgMTYuMCwgMC4wMDEpIDogc2kuc21vbzsKb3A0X2xldmVsICAgPSBoc2xpZGVyKCJPcGVyYXRvcnMvT3AgNC9vcDRfbGV2ZWwiLCAgIDAuMywgMC4wLCAgIDEuMCwgIDAuMDAxKSA6IHNpLnNtb287Cm9wNF9hdHRhY2sgID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDQvb3A0X2F0dGFjayIsICAwLjAxLCAwLjAwMSwgNS4wLCAwLjAwMSk7Cm9wNF9kZWNheSAgID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDQvb3A0X2RlY2F5IiwgICAwLjMsIDAuMDAxLCAxMC4wLCAwLjAwMSk7Cm9wNF9zdXN0YWluID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDQvb3A0X3N1c3RhaW4iLCAwLjcsIDAuMCwgICAxLjAsICAwLjAwMSk7Cm9wNF9yZWxlYXNlID0gaHNsaWRlcigiT3BlcmF0b3JzL09wIDQvb3A0X3JlbGVhc2UiLCAwLjUsIDAuMDEsICAxMC4wLCAwLjAwMSk7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gR3JvdXAgMiDigJQgQ3Jvc3MtTW9kdWxhdGlvbiBNYXRyaXggKHBhcmFtcyAyNOKAkzM1KQovLyBtWFkgPSBvcCBYIG1vZHVsYXRlcyBvcCBZIChYJ3Mgb3V0cHV0IGlzIGFkZGVkIHRvIFkncyBwaGFzZSkKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgptMTIgPSBoc2xpZGVyKCJNYXRyaXgvbTEyIiwgMC4wLCAwLjAsIDEwLjAsIDAuMDAxKSA6IHNpLnNtb287Cm0xMyA9IGhzbGlkZXIoIk1hdHJpeC9tMTMiLCAwLjAsIDAuMCwgMTAuMCwgMC4wMDEpIDogc2kuc21vbzsKbTE0ID0gaHNsaWRlcigiTWF0cml4L20xNCIsIDAuMCwgMC4wLCAxMC4wLCAwLjAwMSkgOiBzaS5zbW9vOwptMjEgPSBoc2xpZGVyKCJNYXRyaXgvbTIxIiwgMS4wLCAwLjAsIDEwLjAsIDAuMDAxKSA6IHNpLnNtb287Cm0yMyA9IGhzbGlkZXIoIk1hdHJpeC9tMjMiLCAwLjAsIDAuMCwgMTAuMCwgMC4wMDEpIDogc2kuc21vbzsKbTI0ID0gaHNsaWRlcigiTWF0cml4L20yNCIsIDAuMCwgMC4wLCAxMC4wLCAwLjAwMSkgOiBzaS5zbW9vOwptMzEgPSBoc2xpZGVyKCJNYXRyaXgvbTMxIiwgMC4wLCAwLjAsIDEwLjAsIDAuMDAxKSA6IHNpLnNtb287Cm0zMiA9IGhzbGlkZXIoIk1hdHJpeC9tMzIiLCAwLjAsIDAuMCwgMTAuMCwgMC4wMDEpIDogc2kuc21vbzsKbTM0ID0gaHNsaWRlcigiTWF0cml4L20zNCIsIDAuMCwgMC4wLCAxMC4wLCAwLjAwMSkgOiBzaS5zbW9vOwptNDEgPSBoc2xpZGVyKCJNYXRyaXgvbTQxIiwgMC4wLCAwLjAsIDEwLjAsIDAuMDAxKSA6IHNpLnNtb287Cm00MiA9IGhzbGlkZXIoIk1hdHJpeC9tNDIiLCAwLjAsIDAuMCwgMTAuMCwgMC4wMDEpIDogc2kuc21vbzsKbTQzID0gaHNsaWRlcigiTWF0cml4L200MyIsIDAuMCwgMC4wLCAxMC4wLCAwLjAwMSkgOiBzaS5zbW9vOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEdyb3VwIDMg4oCUIFNlbGYtRmVlZGJhY2sgw5cgNCAgKHBhcmFtcyAzNuKAkzM5KQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmZiMSA9IGhzbGlkZXIoIkZlZWRiYWNrL2ZiMSIsIDAuMCwgMC4wLCAxLjAsIDAuMDAxKSA6IHNpLnNtb287CmZiMiA9IGhzbGlkZXIoIkZlZWRiYWNrL2ZiMiIsIDAuMCwgMC4wLCAxLjAsIDAuMDAxKSA6IHNpLnNtb287CmZiMyA9IGhzbGlkZXIoIkZlZWRiYWNrL2ZiMyIsIDAuMCwgMC4wLCAxLjAsIDAuMDAxKSA6IHNpLnNtb287CmZiNCA9IGhzbGlkZXIoIkZlZWRiYWNrL2ZiNCIsIDAuMCwgMC4wLCAxLjAsIDAuMDAxKSA6IHNpLnNtb287CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gR3JvdXAgNCDigJQgR2xvYmFsIE1vZHVsYXRpb24gIChwYXJhbXMgNDDigJM0NykKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpsZm9fcmF0ZSAgICAgICAgID0gaHNsaWRlcigiR2xvYmFsL2xmb19yYXRlIiwgICAgICAgICA1LjAsICAgMC4wMSwgIDIwLjAsICAwLjAwMSk7Cmxmb19kZXB0aCAgICAgICAgPSBoc2xpZGVyKCJHbG9iYWwvbGZvX2RlcHRoIiwgICAgICAgIDAuMCwgICAwLjAsICAgMS4wLCAgIDAuMDAxKSA6IHNpLnNtb287Cmxmb19waXRjaCAgICAgICAgPSBoc2xpZGVyKCJHbG9iYWwvbGZvX3BpdGNoIiwgICAgICAgIDAuNSwgICAwLjAsICAgMS4wLCAgIDAuMDAxKSA6IHNpLnNtb287Cmxmb19sZXZlbHMgICAgICAgPSBoc2xpZGVyKCJHbG9iYWwvbGZvX2xldmVscyIsICAgICAgIDAuNSwgICAwLjAsICAgMS4wLCAgIDAuMDAxKSA6IHNpLnNtb287Cmxmb193YXZlZm9ybSAgICAgPSBoc2xpZGVyKCJHbG9iYWwvbGZvX3dhdmVmb3JtIiwgICAgIDAuMCwgICAwLjAsICAgMS4wLCAgIDAuMDAxKTsKcGl0Y2hfZW52X2Ftb3VudCA9IGhzbGlkZXIoIkdsb2JhbC9waXRjaF9lbnZfYW1vdW50IiwgMC4wLCAgIDAuMCwgICAxLjAsICAgMC4wMDEpIDogc2kuc21vbzsKcGl0Y2hfZW52X2RlY2F5ICA9IGhzbGlkZXIoIkdsb2JhbC9waXRjaF9lbnZfZGVjYXkiLCAgMC4xLCAgIDAuMDAxLCAyLjAsICAgMC4wMDEpOwp2ZWxfaW5kZXhfc2NhbGUgID0gaHNsaWRlcigiR2xvYmFsL3ZlbF9pbmRleF9zY2FsZSIsICAwLjAsICAgMC4wLCAgIDEuMCwgICAwLjAwMSkgOiBzaS5zbW9vOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEdyb3VwIDUg4oCUIE1hc3RlciAgKHBhcmFtcyA0OOKAkzU1KQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm1hc3Rlcl9sZXZlbCAgICAgICA9IGhzbGlkZXIoIk1hc3Rlci9sZXZlbCIsICAgICAgICAgICAgICAwLjcsICAwLjAsICAgMS4wLCAgIDAuMDAxKSA6IHNpLnNtb287CnZlbF9zZW5zICAgICAgICAgICA9IGhzbGlkZXIoIk1hc3Rlci92ZWxfc2VucyIsICAgICAgICAgICAwLjUsICAwLjAsICAgMS4wLCAgIDAuMDAxKTsKcGl0Y2hfZ2xpZGUgICAgICAgID0gaHNsaWRlcigiTWFzdGVyL3BpdGNoX2dsaWRlIiwgICAgICAgIDAuMCwgIDAuMCwgICAxMC4wLCAgMC4wMDEpOwpmaW5lX3R1bmUgICAgICAgICAgPSBoc2xpZGVyKCJNYXN0ZXIvZmluZV90dW5lW3VuaXQ6Y2VudHNdIiwgMC4wLCAtNTAuMCwgNTAuMCwgMC4wMSk7CndhdmVmb3JtX2JsZW5kICAgICA9IGhzbGlkZXIoIk1hc3Rlci93YXZlZm9ybV9ibGVuZCIsICAgICAwLjAsICAwLjAsICAgMS4wLCAgIDAuMDAxKSA6IHNpLnNtb287CnN0ZXJlb19zcHJlYWQgICAgICA9IGhzbGlkZXIoIk1hc3Rlci9zdGVyZW9fc3ByZWFkIiwgICAgICAwLjEsICAwLjAsICAgMS4wLCAgIDAuMDAxKSA6IHNpLnNtb287Cm91dHB1dF9zYXR1cmF0aW9uICA9IGhzbGlkZXIoIk1hc3Rlci9vdXRwdXRfc2F0dXJhdGlvbiIsICAwLjAsICAwLjAsICAgMS4wLCAgIDAuMDAxKSA6IHNpLnNtb287Cm91dHB1dF9ocCAgICAgICAgICA9IGhzbGlkZXIoIk1hc3Rlci9vdXRwdXRfaHBbdW5pdDpIel0iLCAyMC4wLCAyMC4wLCAyMDAuMCwgIDAuMSk7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gRGVyaXZlZCB2YWx1ZXMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBDZW50cyDihpIgZnJlcXVlbmN5IHJhdGlvCmNlbnQycmF0aW8oYykgPSBwb3coMi4wLCBjIC8gMTIwMC4wKTsKCi8vIEJhc2UgZnJlcXVlbmN5IHdpdGggZmluZS10dW5lCmJhc2VfZnJlcSA9IGZyZXEgKiBjZW50MnJhdGlvKGZpbmVfdHVuZSk7CgovLyBWZWxvY2l0eSBnYWluOiBibGVuZCBiZXR3ZWVuIDEuMCAobm8gdmVsb2NpdHkpIGFuZCBhY3R1YWwgdmVsb2NpdHkKdmVsX2dhaW4gPSAoMS4wIC0gdmVsX3NlbnMpICsgdmVsX3NlbnMgKiB2ZWw7CgovLyBWZWxvY2l0eS1zY2FsZWQgRk0gaW5kZXggbXVsdGlwbGllcgovLyB2ZWxfaW5kZXhfc2NhbGU9MDogdmVsb2NpdHkgZG9lc24ndCBhZmZlY3QgRk0gaW5kaWNlcwovLyB2ZWxfaW5kZXhfc2NhbGU9MTogRk0gaW5kaWNlcyBhcmUgZnVsbHkgc2NhbGVkIGJ5IHZlbG9jaXR5CnZlbF9pZHhfbXVsdCA9ICgxLjAgLSB2ZWxfaW5kZXhfc2NhbGUpICsgdmVsX2luZGV4X3NjYWxlICogdmVsOwoKLy8gTEZPOiA0IHdhdmVmb3JtcyBjcm9zc2ZhZGVkCi8vIFNlZ21lbnRzOiBbMCwwLjMzMyk9c2luZeKGknRyaSwgWzAuMzMzLDAuNjY3KT10cmnihpJzYXcsIFswLjY2NywxXT1zYXfihpJzcXVhcmUKbGZvX3NpZyA9CiAgYmEuaWYobGZvX3dhdmVmb3JtIDwgMC4zMzMsCiAgICAoMS4wIC0gbGZvX3dhdmVmb3JtKjMuMCkgKiBvcy5vc2MobGZvX3JhdGUpICAgICAgKyBsZm9fd2F2ZWZvcm0qMy4wICAgICAgKiBvcy50cmlhbmdsZShsZm9fcmF0ZSksCiAgICBiYS5pZihsZm9fd2F2ZWZvcm0gPCAwLjY2NywKICAgICAgKDEuMCAtIChsZm9fd2F2ZWZvcm0tMC4zMzMpKjMuMCkgKiBvcy50cmlhbmdsZShsZm9fcmF0ZSkgKyAobGZvX3dhdmVmb3JtLTAuMzMzKSozLjAgKiBvcy5zYXd0b290aChsZm9fcmF0ZSksCiAgICAgICgxLjAgLSAobGZvX3dhdmVmb3JtLTAuNjY3KSozLjApICogb3Muc2F3dG9vdGgobGZvX3JhdGUpICsgKGxmb193YXZlZm9ybS0wLjY2NykqMy4wICogb3Muc3F1YXJlKGxmb19yYXRlKSkpOwoKLy8gUGl0Y2ggZW52ZWxvcGU6IGZhc3QgYXR0YWNrLCBjb25maWd1cmFibGUgZGVjYXksIHRyaWdnZXJlZCBieSBnYXRlCnBpdGNoX2VudiA9IGVuLmFyKDAuMDAxLCBwaXRjaF9lbnZfZGVjYXksIGdhdGUpOwoKLy8gTW9kdWxhdGVkIGZyZXF1ZW5jeTogZmluZS10dW5lICsgTEZPIHBpdGNoICsgcGl0Y2ggZW52ZWxvcGUKLy8gTEZPIHBpdGNoOiDCsTAuMDgzMyBzZW1pdG9uZXMgcGVyIHVuaXQgZGVwdGggKHN1YnRsZSB2aWJyYXRvKQovLyBQaXRjaCBlbnY6IHVwIHRvICsxIG9jdGF2ZSAocmF0aW8gKzEuMCA9ICtvY3RhdmUpCmxmb19waXRjaF9vZmZzZXQgPSBsZm9fc2lnICogbGZvX2RlcHRoICogbGZvX3BpdGNoICogMC4wMDgzOyAgIC8vIH4wLjEgc2VtaXRvbmUgbWF4CnBpdGNoX2Vudl9vZmZzZXQgPSBwaXRjaF9lbnYgKiBwaXRjaF9lbnZfYW1vdW50OyAgICAgICAgICAgICAgICAgLy8gMC4uMSBvY3QKbW9kX2ZyZXEgPSBiYXNlX2ZyZXEgKiBwb3coMi4wLCBsZm9fcGl0Y2hfb2Zmc2V0ICsgcGl0Y2hfZW52X29mZnNldCk7CgovLyBMRk8gbGV2ZWwgbW9kdWxhdGlvbiAodHJlbW9sbyk6IDEuMCB3aGVuIGRlcHRoPTAsIGRpcHMgdG8gKDEtMC41KmRlcHRoKmxmb19sZXZlbHMpIGF0IHRyb3VnaApsZm9fbGV2ZWxfZmFjdG9yID0gMS4wIC0gbGZvX2RlcHRoICogbGZvX2xldmVscyAqIDAuNSAqICgxLjAgLSBsZm9fc2lnKSAqIDAuNTsKCi8vIFBlci1vcGVyYXRvciBvc2NpbGxhdG9yOiBibGVuZCBzaW5lICgwKSDihpIgdHJpYW5nbGUgKDEpCm9wX29zYyhmKSA9ICgxLjAgLSB3YXZlZm9ybV9ibGVuZCkgKiBvcy5vc2MoZikgKyB3YXZlZm9ybV9ibGVuZCAqIG9zLnRyaWFuZ2xlKGYpOwoKLy8gUGVyLW9wZXJhdG9yIEFEU1IgZW52ZWxvcGVzCmVudjEgPSBlbi5hZHNyKG9wMV9hdHRhY2ssIG9wMV9kZWNheSwgb3AxX3N1c3RhaW4sIG9wMV9yZWxlYXNlLCBnYXRlKTsKZW52MiA9IGVuLmFkc3Iob3AyX2F0dGFjaywgb3AyX2RlY2F5LCBvcDJfc3VzdGFpbiwgb3AyX3JlbGVhc2UsIGdhdGUpOwplbnYzID0gZW4uYWRzcihvcDNfYXR0YWNrLCBvcDNfZGVjYXksIG9wM19zdXN0YWluLCBvcDNfcmVsZWFzZSwgZ2F0ZSk7CmVudjQgPSBlbi5hZHNyKG9wNF9hdHRhY2ssIG9wNF9kZWNheSwgb3A0X3N1c3RhaW4sIG9wNF9yZWxlYXNlLCBnYXRlKTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyA0LU9wZXJhdG9yIEZNIFJvdXRpbmcKLy8KLy8gSW1wbGVtZW50YXRpb24gc3RyYXRlZ3k6IGJ1aWxkIGEgcmVjdXJzaXZlIDQtY2hhbm5lbCBidXMgdXNpbmcgfgovLyBUaGUgYnVzIGNhcnJpZXMgKG9wMV9vdXQsIG9wMl9vdXQsIG9wM19vdXQsIG9wNF9vdXQpIHdpdGggMS1zYW1wbGUgZGVsYXkuCi8vIEVhY2ggZnJhbWUsIHdlIGNvbXB1dGUgbmV3IG91dHB1dHMgZnJvbSBkZWxheWVkIHByZXZpb3VzIG91dHB1dHMuCi8vCi8vIGZtYnVzOiAoZDEsZDIsZDMsZDQpIOKGkiAob3AxX291dCxvcDJfb3V0LG9wM19vdXQsb3A0X291dCkKLy8gd2hlcmUgZE4gYXJlIHRoZSAxLXNhbXBsZS1kZWxheWVkIHByZXZpb3VzIG91dHB1dHMgKHZpYSB+KQovLwovLyBGTSBwaGFzZSBkZXZpYXRpb246IGRldmlhdGlvbl9oeiA9IGluZGV4ICogbW9kdWxhdG9yX291dCAqIGNhcnJpZXJfZnJlcQovLyBUaGlzIGlzIHRoZSBzdGFuZGFyZCAiZnJlcXVlbmN5IG1vZHVsYXRpb24iIGZvcm11bGEgd2hlcmUgbW9kdWxhdG9yX291dCDiiIggWy0xLDFdCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZm1idXMoZDEsZDIsZDMsZDQpID0KICBvcDFfb3V0LCBvcDJfb3V0LCBvcDNfb3V0LCBvcDRfb3V0CndpdGggewogIC8vIEVmZmVjdGl2ZSBpbmRpY2VzIHNjYWxlZCBieSB2ZWxvY2l0eQogIG0xMmUgPSBtMTIgKiB2ZWxfaWR4X211bHQ7ICBtMTNlID0gbTEzICogdmVsX2lkeF9tdWx0OyAgbTE0ZSA9IG0xNCAqIHZlbF9pZHhfbXVsdDsKICBtMjFlID0gbTIxICogdmVsX2lkeF9tdWx0OyAgbTIzZSA9IG0yMyAqIHZlbF9pZHhfbXVsdDsgIG0yNGUgPSBtMjQgKiB2ZWxfaWR4X211bHQ7CiAgbTMxZSA9IG0zMSAqIHZlbF9pZHhfbXVsdDsgIG0zMmUgPSBtMzIgKiB2ZWxfaWR4X211bHQ7ICBtMzRlID0gbTM0ICogdmVsX2lkeF9tdWx0OwogIG00MWUgPSBtNDEgKiB2ZWxfaWR4X211bHQ7ICBtNDJlID0gbTQyICogdmVsX2lkeF9tdWx0OyAgbTQzZSA9IG00MyAqIHZlbF9pZHhfbXVsdDsKICBmYjFlID0gZmIxICogdmVsX2lkeF9tdWx0OyAgZmIyZSA9IGZiMiAqIHZlbF9pZHhfbXVsdDsKICBmYjNlID0gZmIzICogdmVsX2lkeF9tdWx0OyAgZmI0ZSA9IGZiNCAqIHZlbF9pZHhfbXVsdDsKCiAgZjEgPSBtb2RfZnJlcSAqIG9wMV9yYXRpbzsKICBmMiA9IG1vZF9mcmVxICogb3AyX3JhdGlvOwogIGYzID0gbW9kX2ZyZXEgKiBvcDNfcmF0aW87CiAgZjQgPSBtb2RfZnJlcSAqIG9wNF9yYXRpbzsKCiAgb3AxX291dCA9IGVudjEgKiBvcDFfbGV2ZWwgKiBsZm9fbGV2ZWxfZmFjdG9yICogdmVsX2dhaW4gKgogICAgb3Bfb3NjKGYxICsgKG0yMWUqZDIgKyBtMzFlKmQzICsgbTQxZSpkNCArIGZiMWUqZDEpICogZjEpOwoKICBvcDJfb3V0ID0gZW52MiAqIG9wMl9sZXZlbCAqIGxmb19sZXZlbF9mYWN0b3IgKiB2ZWxfZ2FpbiAqCiAgICBvcF9vc2MoZjIgKyAobTEyZSpkMSArIG0zMmUqZDMgKyBtNDJlKmQ0ICsgZmIyZSpkMikgKiBmMik7CgogIG9wM19vdXQgPSBlbnYzICogb3AzX2xldmVsICogbGZvX2xldmVsX2ZhY3RvciAqIHZlbF9nYWluICoKICAgIG9wX29zYyhmMyArIChtMTNlKmQxICsgbTIzZSpkMiArIG00M2UqZDQgKyBmYjNlKmQzKSAqIGYzKTsKCiAgb3A0X291dCA9IGVudjQgKiBvcDRfbGV2ZWwgKiBsZm9fbGV2ZWxfZmFjdG9yICogdmVsX2dhaW4gKgogICAgb3Bfb3NjKGY0ICsgKG0xNGUqZDEgKyBtMjRlKmQyICsgbTM0ZSpkMyArIGZiNGUqZDQpICogZjQpOwp9OwoKLy8gUm91dGUgNC1jaGFubmVsIGJ1cyB0aHJvdWdoIGZlZWRiYWNrIGxvb3AgKGludHJvZHVjZXMgbWFuZGF0b3J5IDEtc2FtcGxlIGRlbGF5KQovLyBPdXRwdXQgb2YgZm1idXMgaXMgKG9wMSxvcDIsb3AzLG9wNCk7IHN1bSBhbGwgZm9yIGF1ZGlvIG91dApmbV9vdXQgPSAoZm1idXMgfiAoc2kuYnVzKDQpKSkgOiAoXywgXywgXywgXykgOj4gXzsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBQb3N0LXByb2Nlc3NpbmcKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBTb2Z0IGNsaXA6IHRhbmggYXBwcm94aW1hdGlvbiAoZHJpdmUgY29udHJvbGxlZCBieSBvdXRwdXRfc2F0dXJhdGlvbikKLy8gQXQgMDogbGluZWFyIHBhc3N0aHJvdWdoLiBBdCAxOiBjbGlwcyBhdCDCsX4wLjYKc29mdF9jbGlwKHgpID0geCAvIG1heCgwLjAwMSwgMS4wICsgb3V0cHV0X3NhdHVyYXRpb24gKiBhYnMoeCkpOwoKLy8gU3RlcmVvIHNwcmVhZCB2aWEgc2xpZ2h0IHBpdGNoIGRldHVuaW5nIEwgdnMgUgpzcHJlYWRfY2VudHMgPSBzdGVyZW9fc3ByZWFkICogNS4wOyAgIC8vIMKxNSBjZW50cyBtYXgKCi8vIEhQIGZpbHRlciByZW1vdmVzIERDIG9mZnNldCBmcm9tIGhlYXZ5IGZlZWRiYWNrIEZNCmhwX291dCh4KSA9IGZpLmhpZ2hwYXNzKDEsIG91dHB1dF9ocCwgeCk7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gcHJvY2VzczogbW9ubyBGTSBzdW0g4oaSIHNjYWxlIOKGkiBzb2Z0LWNsaXAg4oaSIEhQIOKGkiBzdGVyZW8gc3ByZWFkCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKcHJvY2VzcyA9CiAgZm1fb3V0CiAgOiAqKG1hc3Rlcl9sZXZlbCAqIDAuMjUpICAgICAgIC8vIDQgb3BzIHN1bW1pbmc6IHNjYWxlIHRvIHNhZmUgcmFuZ2UKICA6IHNvZnRfY2xpcAogIDogaHBfb3V0CiAgPDogKihjZW50MnJhdGlvKHNwcmVhZF9jZW50cykpLCAqKGNlbnQycmF0aW8oMC4wIC0gc3ByZWFkX2NlbnRzKSk7Cg==","inputs": 0,"outputs": 2,"meta": [ { "basics.lib/name": "Faust Basic Element Library" },{ "basics.lib/version": "1.21.0" },{ "compile_options": "-lang wasm -ct 1 -cn fm_matrix -es 1 -mcd 16 -mdd 1024 -mdy 33 -single -ftz 0" },{ "envelopes.lib/adsr:author": "Yann Orlarey and Andrey Bundin" },{ "envelopes.lib/ar:author": "Yann Orlarey, Stéphane Letz" },{ "envelopes.lib/author": "GRAME" },{ "envelopes.lib/copyright": "GRAME" },{ "envelopes.lib/license": "LGPL with exception" },{ "envelopes.lib/name": "Faust Envelope Library" },{ "envelopes.lib/version": "1.3.0" },{ "filename": "fm-matrix.dsp" },{ "filters.lib/highpass:author": "Julius O. Smith III" },{ "filters.lib/highpass:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III <jos@ccrma.stanford.edu>" },{ "filters.lib/lowpass0_highpass1": "Copyright (C) 2003-2019 by Julius O. Smith III <jos@ccrma.stanford.edu>" },{ "filters.lib/lowpass0_highpass1:author": "Julius O. Smith III" },{ "filters.lib/name": "Faust Filters Library" },{ "filters.lib/pole:author": "Julius O. Smith III" },{ "filters.lib/pole:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III <jos@ccrma.stanford.edu>" },{ "filters.lib/pole:license": "MIT-style STK-4.3 license" },{ "filters.lib/tf1:author": "Julius O. Smith III" },{ "filters.lib/tf1:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III <jos@ccrma.stanford.edu>" },{ "filters.lib/tf1:license": "MIT-style STK-4.3 license" },{ "filters.lib/tf1s:author": "Julius O. Smith III" },{ "filters.lib/tf1s:copyright": "Copyright (C) 2003-2019 by Julius O. Smith III <jos@ccrma.stanford.edu>" },{ "filters.lib/tf1s:license": "MIT-style STK-4.3 license" },{ "filters.lib/version": "1.7.1" },{ "maths.lib/author": "GRAME" },{ "maths.lib/copyright": "GRAME" },{ "maths.lib/license": "LGPL with exception" },{ "maths.lib/name": "Faust Math Library" },{ "maths.lib/version": "2.8.1" },{ "name": "fm-matrix" },{ "oscillators.lib/lf_sawpos:author": "Bart Brouns, revised by Stéphane Letz" },{ "oscillators.lib/lf_sawpos:licence": "STK-4.3" },{ "oscillators.lib/name": "Faust Oscillator Library" },{ "oscillators.lib/saw2ptr:author": "Julius O. Smith III" },{ "oscillators.lib/saw2ptr:license": "STK-4.3" },{ "oscillators.lib/sawN:author": "Julius O. Smith III" },{ "oscillators.lib/sawN:license": "STK-4.3" },{ "oscillators.lib/version": "1.6.0" },{ "platform.lib/name": "Generic Platform Library" },{ "platform.lib/version": "1.3.0" },{ "signals.lib/name": "Faust Signal Routing Library" },{ "signals.lib/version": "1.6.0" }],"ui": [ {"type": "vgroup","label": "fm-matrix","items": [ {"type": "hslider","label": "Feedback/fb1","varname": "fHslider3","shortname": "Feedback_fb1","address": "/fm-matrix/Feedback_fb1","index": 262200,"init": 0,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Feedback/fb2","varname": "fHslider26","shortname": "Feedback_fb2","address": "/fm-matrix/Feedback_fb2","index": 295312,"init": 0,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Feedback/fb3","varname": "fHslider36","shortname": "Feedback_fb3","address": "/fm-matrix/Feedback_fb3","index": 311824,"init": 0,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Feedback/fb4","varname": "fHslider46","shortname": "Feedback_fb4","address": "/fm-matrix/Feedback_fb4","index": 328336,"init": 0,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Global/lfo_depth","varname": "fHslider14","shortname": "Global_lfo_depth","address": "/fm-matrix/Global_lfo_depth","index": 278784,"init": 0,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Global/lfo_levels","varname": "fHslider20","shortname": "Global_lfo_levels","address": "/fm-matrix/Global_lfo_levels","index": 295248,"init": 0.5,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Global/lfo_pitch","varname": "fHslider13","shortname": "Global_lfo_pitch","address": "/fm-matrix/Global_lfo_pitch","index": 278772,"init": 0.5,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Global/lfo_rate","varname": "fHslider12","shortname": "Global_lfo_rate","address": "/fm-matrix/Global_lfo_rate","index": 262320,"init": 5,"min": 0.01,"max": 20,"step": 0.001},{"type": "hslider","label": "Global/lfo_waveform","varname": "fHslider11","shortname": "Global_lfo_waveform","address": "/fm-matrix/Global_lfo_waveform","index": 262316,"init": 0,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Global/pitch_env_amount","varname": "fHslider10","shortname": "Global_pitch_env_amount","address": "/fm-matrix/Global_pitch_env_amount","index": 262304,"init": 0,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Global/pitch_env_decay","varname": "fHslider9","shortname": "Global_pitch_env_decay","address": "/fm-matrix/Global_pitch_env_decay","index": 262300,"init": 0.1,"min": 0.001,"max": 2,"step": 0.001},{"type": "hslider","label": "Global/vel_index_scale","varname": "fHslider8","shortname": "Global_vel_index_scale","address": "/fm-matrix/Global_vel_index_scale","index": 262260,"init": 0,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Master/_vel","varname": "fHslider7","shortname": "Master_vel","address": "/fm-matrix/Master__vel","index": 262248,"meta": [{ "hidden": "1" }],"init": 0.7,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Master/fine_tune","varname": "fHslider16","shortname": "Master_fine_tune","address": "/fm-matrix/Master_fine_tune","index": 278808,"meta": [{ "unit": "cents" }],"init": 0,"min": -50,"max": 50,"step": 0.01},{"type": "hslider","label": "Master/freq","varname": "fHslider17","shortname": "Master_freq","address": "/fm-matrix/Master_freq","index": 278812,"meta": [{ "hidden": "1" },{ "unit": "Hz" }],"init": 220,"min": 20,"max": 4000,"step": 0.01},{"type": "button","label": "Master/gate","varname": "fButton0","shortname": "Master_gate","address": "/fm-matrix/Master_gate","index": 262272,"meta": [{ "hidden": "1" }]},{"type": "hslider","label": "Master/level","varname": "fHslider2","shortname": "Master_level","address": "/fm-matrix/Master_level","index": 262188,"init": 0.7,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Master/output_hp","varname": "fHslider1","shortname": "Master_output_hp","address": "/fm-matrix/Master_output_hp","index": 262180,"meta": [{ "unit": "Hz" }],"init": 20,"min": 20,"max": 200,"step": 0.1},{"type": "hslider","label": "Master/output_saturation","varname": "fHslider56","shortname": "Master_output_saturation","address": "/fm-matrix/Master_output_saturation","index": 344848,"init": 0,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Master/stereo_spread","varname": "fHslider0","shortname": "Master_stereo_spread","address": "/fm-matrix/Master_stereo_spread","index": 262168,"init": 0.1,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Master/vel_sens","varname": "fHslider19","shortname": "Master_vel_sens","address": "/fm-matrix/Master_vel_sens","index": 295244,"init": 0.5,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Master/waveform_blend","varname": "fHslider18","shortname": "Master_waveform_blend","address": "/fm-matrix/Master_waveform_blend","index": 295224,"init": 0,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Matrix/m12","varname": "fHslider29","shortname": "Matrix_m12","address": "/fm-matrix/Matrix_m12","index": 295348,"init": 0,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Matrix/m13","varname": "fHslider39","shortname": "Matrix_m13","address": "/fm-matrix/Matrix_m13","index": 311860,"init": 0,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Matrix/m14","varname": "fHslider49","shortname": "Matrix_m14","address": "/fm-matrix/Matrix_m14","index": 328372,"init": 0,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Matrix/m21","varname": "fHslider6","shortname": "Matrix_m21","address": "/fm-matrix/Matrix_m21","index": 262236,"init": 1,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Matrix/m23","varname": "fHslider38","shortname": "Matrix_m23","address": "/fm-matrix/Matrix_m23","index": 311848,"init": 0,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Matrix/m24","varname": "fHslider48","shortname": "Matrix_m24","address": "/fm-matrix/Matrix_m24","index": 328360,"init": 0,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Matrix/m31","varname": "fHslider5","shortname": "Matrix_m31","address": "/fm-matrix/Matrix_m31","index": 262224,"init": 0,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Matrix/m32","varname": "fHslider28","shortname": "Matrix_m32","address": "/fm-matrix/Matrix_m32","index": 295336,"init": 0,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Matrix/m34","varname": "fHslider47","shortname": "Matrix_m34","address": "/fm-matrix/Matrix_m34","index": 328348,"init": 0,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Matrix/m41","varname": "fHslider4","shortname": "Matrix_m41","address": "/fm-matrix/Matrix_m41","index": 262212,"init": 0,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Matrix/m42","varname": "fHslider27","shortname": "Matrix_m42","address": "/fm-matrix/Matrix_m42","index": 295324,"init": 0,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Matrix/m43","varname": "fHslider37","shortname": "Matrix_m43","address": "/fm-matrix/Matrix_m43","index": 311836,"init": 0,"min": 0,"max": 10,"step": 0.001},{"type": "hslider","label": "Operators/Op 1/op1_attack","varname": "fHslider22","shortname": "Operators_Op_1_op1_attack","address": "/fm-matrix/Operators_Op_1_op1_attack","index": 295280,"init": 0.01,"min": 0.001,"max": 5,"step": 0.001},{"type": "hslider","label": "Operators/Op 1/op1_decay","varname": "fHslider23","shortname": "Operators_Op_1_op1_decay","address": "/fm-matrix/Operators_Op_1_op1_decay","index": 295284,"init": 0.3,"min": 0.001,"max": 10,"step": 0.001},{"type": "hslider","label": "Operators/Op 1/op1_level","varname": "fHslider25","shortname": "Operators_Op_1_op1_level","address": "/fm-matrix/Operators_Op_1_op1_level","index": 295292,"init": 0.8,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Operators/Op 1/op1_ratio","varname": "fHslider15","shortname": "Operators_Op_1_op1_ratio","address": "/fm-matrix/Operators_Op_1_op1_ratio","index": 278796,"init": 1,"min": 0.125,"max": 16,"step": 0.001},{"type": "hslider","label": "Operators/Op 1/op1_release","varname": "fHslider21","shortname": "Operators_Op_1_op1_release","address": "/fm-matrix/Operators_Op_1_op1_release","index": 295268,"init": 0.5,"min": 0.01,"max": 10,"step": 0.001},{"type": "hslider","label": "Operators/Op 1/op1_sustain","varname": "fHslider24","shortname": "Operators_Op_1_op1_sustain","address": "/fm-matrix/Operators_Op_1_op1_sustain","index": 295288,"init": 0.7,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Operators/Op 2/op2_attack","varname": "fHslider32","shortname": "Operators_Op_2_op2_attack","address": "/fm-matrix/Operators_Op_2_op2_attack","index": 311792,"init": 0.01,"min": 0.001,"max": 5,"step": 0.001},{"type": "hslider","label": "Operators/Op 2/op2_decay","varname": "fHslider33","shortname": "Operators_Op_2_op2_decay","address": "/fm-matrix/Operators_Op_2_op2_decay","index": 311796,"init": 0.3,"min": 0.001,"max": 10,"step": 0.001},{"type": "hslider","label": "Operators/Op 2/op2_level","varname": "fHslider35","shortname": "Operators_Op_2_op2_level","address": "/fm-matrix/Operators_Op_2_op2_level","index": 311804,"init": 0.6,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Operators/Op 2/op2_ratio","varname": "fHslider30","shortname": "Operators_Op_2_op2_ratio","address": "/fm-matrix/Operators_Op_2_op2_ratio","index": 295360,"init": 2,"min": 0.125,"max": 16,"step": 0.001},{"type": "hslider","label": "Operators/Op 2/op2_release","varname": "fHslider31","shortname": "Operators_Op_2_op2_release","address": "/fm-matrix/Operators_Op_2_op2_release","index": 311788,"init": 0.5,"min": 0.01,"max": 10,"step": 0.001},{"type": "hslider","label": "Operators/Op 2/op2_sustain","varname": "fHslider34","shortname": "Operators_Op_2_op2_sustain","address": "/fm-matrix/Operators_Op_2_op2_sustain","index": 311800,"init": 0.7,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Operators/Op 3/op3_attack","varname": "fHslider42","shortname": "Operators_Op_3_op3_attack","address": "/fm-matrix/Operators_Op_3_op3_attack","index": 328304,"init": 0.01,"min": 0.001,"max": 5,"step": 0.001},{"type": "hslider","label": "Operators/Op 3/op3_decay","varname": "fHslider43","shortname": "Operators_Op_3_op3_decay","address": "/fm-matrix/Operators_Op_3_op3_decay","index": 328308,"init": 0.3,"min": 0.001,"max": 10,"step": 0.001},{"type": "hslider","label": "Operators/Op 3/op3_level","varname": "fHslider45","shortname": "Operators_Op_3_op3_level","address": "/fm-matrix/Operators_Op_3_op3_level","index": 328316,"init": 0.4,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Operators/Op 3/op3_ratio","varname": "fHslider40","shortname": "Operators_Op_3_op3_ratio","address": "/fm-matrix/Operators_Op_3_op3_ratio","index": 311872,"init": 3,"min": 0.125,"max": 16,"step": 0.001},{"type": "hslider","label": "Operators/Op 3/op3_release","varname": "fHslider41","shortname": "Operators_Op_3_op3_release","address": "/fm-matrix/Operators_Op_3_op3_release","index": 328300,"init": 0.5,"min": 0.01,"max": 10,"step": 0.001},{"type": "hslider","label": "Operators/Op 3/op3_sustain","varname": "fHslider44","shortname": "Operators_Op_3_op3_sustain","address": "/fm-matrix/Operators_Op_3_op3_sustain","index": 328312,"init": 0.7,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Operators/Op 4/op4_attack","varname": "fHslider52","shortname": "Operators_Op_4_op4_attack","address": "/fm-matrix/Operators_Op_4_op4_attack","index": 344816,"init": 0.01,"min": 0.001,"max": 5,"step": 0.001},{"type": "hslider","label": "Operators/Op 4/op4_decay","varname": "fHslider53","shortname": "Operators_Op_4_op4_decay","address": "/fm-matrix/Operators_Op_4_op4_decay","index": 344820,"init": 0.3,"min": 0.001,"max": 10,"step": 0.001},{"type": "hslider","label": "Operators/Op 4/op4_level","varname": "fHslider55","shortname": "Operators_Op_4_op4_level","address": "/fm-matrix/Operators_Op_4_op4_level","index": 344828,"init": 0.3,"min": 0,"max": 1,"step": 0.001},{"type": "hslider","label": "Operators/Op 4/op4_ratio","varname": "fHslider50","shortname": "Operators_Op_4_op4_ratio","address": "/fm-matrix/Operators_Op_4_op4_ratio","index": 328384,"init": 0.5,"min": 0.125,"max": 16,"step": 0.001},{"type": "hslider","label": "Operators/Op 4/op4_release","varname": "fHslider51","shortname": "Operators_Op_4_op4_release","address": "/fm-matrix/Operators_Op_4_op4_release","index": 344812,"init": 0.5,"min": 0.01,"max": 10,"step": 0.001},{"type": "hslider","label": "Operators/Op 4/op4_sustain","varname": "fHslider54","shortname": "Operators_Op_4_op4_sustain","address": "/fm-matrix/Operators_Op_4_op4_sustain","index": 344824,"init": 0.7,"min": 0,"max": 1,"step": 0.001}]}]}