{"_id":"@audio/filter-diode-ladder","_rev":"6-cf898d6316c70ac40faf3128ffdc9e59","name":"@audio/filter-diode-ladder","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.0":{"name":"@audio/filter-diode-ladder","version":"1.0.0","keywords":["audio","dsp","filter","diode-ladder"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/filter-diode-ladder@1.0.0","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"homepage":"https://github.com/audiojs/filter/tree/main/packages/filter-diode-ladder","bugs":{"url":"https://github.com/audiojs/filter/issues"},"dist":{"shasum":"b47edbe243b4ba986da4cfce55610a1e3fc4be49","tarball":"https://registry.npmjs.org/@audio/filter-diode-ladder/-/filter-diode-ladder-1.0.0.tgz","fileCount":2,"integrity":"sha512-4LOp6SEncDf2ZkuctBz6U8m7ZnhiYINWnyHAOJK+SUASfLcxs/HK1ShZNukGwzWb5trSiRZxTsBETsHyA4F2Zg==","signatures":[{"sig":"MEUCIDmEfy0jq+9fl70Etyy0LfyW+mqy2lWgP1Pj3KxT6LdGAiEArsfITUotkd3YeZUUNPsRAl9SMIQP9AFrax8FSCJHQEA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4719},"main":"diode-ladder.js","type":"module","engines":{"node":">=18"},"exports":{".":"./diode-ladder.js","./package.json":"./package.json"},"gitHead":"df0c10910638b429ad2e246e6c0df608999d85cc","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/filter.git","type":"git","directory":"packages/filter-diode-ladder"},"_npmVersion":"11.12.1","description":"Diode ladder filter (Roland TB-303 / EMS VCS3 style)","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/filter-diode-ladder_1.0.0_1783539823644_0.9017451031486663","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@audio/filter-diode-ladder","version":"1.1.0","keywords":["audio","dsp","filter","diode-ladder"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/filter-diode-ladder@1.1.0","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"homepage":"https://github.com/audiojs/filter/tree/main/packages/filter-diode-ladder","bugs":{"url":"https://github.com/audiojs/filter/issues"},"atom":"./atom.js","dist":{"shasum":"fec4f76cf2e1865e135c458f9808d11df5ce4563","tarball":"https://registry.npmjs.org/@audio/filter-diode-ladder/-/filter-diode-ladder-1.1.0.tgz","fileCount":3,"integrity":"sha512-Eyqq02p8xQnPgh5jbNFlCop0/OGDhfxPswYI74f7ZAB6lWAGbmIc2qFtld4sfJ6X77O8u5lL7JrRjX8eVG7GBQ==","signatures":[{"sig":"MEYCIQDVXEtmm+YbOruOJIrKq0VhPc1z3b3Flr6wPzSAFg8biAIhAJXtxilwArVQlOc/5GCVt9IrYlAMuXbfUa9QVJuNsaqB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5846},"main":"diode-ladder.js","type":"module","engines":{"node":">=18"},"exports":{".":"./diode-ladder.js","./atom":"./atom.js","./package.json":"./package.json"},"gitHead":"41975fc4f2ec6f0f72da7b3848e7a0509df6f148","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/filter.git","type":"git","directory":"packages/filter-diode-ladder"},"_npmVersion":"11.12.1","description":"Diode ladder filter (Roland TB-303 / EMS VCS3 style)","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/filter-diode-ladder_1.1.0_1783635144099_0.8622186795059328","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@audio/filter-diode-ladder","version":"1.1.1","keywords":["audio","dsp","filter","diode-ladder"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/filter-diode-ladder@1.1.1","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"homepage":"https://github.com/audiojs/filter/tree/main/packages/filter-diode-ladder","bugs":{"url":"https://github.com/audiojs/filter/issues"},"dist":{"shasum":"b9dcda86e9ce1a3ecf032864e6cda3cd79cac6ee","tarball":"https://registry.npmjs.org/@audio/filter-diode-ladder/-/filter-diode-ladder-1.1.1.tgz","fileCount":3,"integrity":"sha512-4a0CClFveYiKwh7PB+03HOJAyMmD8Q4cPpXoE1wSDqzEwq+oY/EqfGUY6zFZ0mviC8+NpCQX4gRrfGpO4/93ig==","signatures":[{"sig":"MEQCIGsPtpK/fohAsF2ojCI8WKoXV1TboXBWopgoQwICDNn9AiB4Gzel0HY2JPa4dUm9XT8dhQJI2UHer91VGm9NhC6JyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5854},"main":"diode-ladder.js","type":"module","audio":"./audio.js","engines":{"node":">=18"},"exports":{".":"./diode-ladder.js","./audio":"./audio.js","./package.json":"./package.json"},"gitHead":"b16f16abf03c4b73cb65bdecbba4359933b9d9fe","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/filter.git","type":"git","directory":"packages/filter-diode-ladder"},"_npmVersion":"11.12.1","description":"Diode ladder filter (Roland TB-303 / EMS VCS3 style)","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/filter-diode-ladder_1.1.1_1783644922249_0.40875674283472274","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@audio/filter-diode-ladder","version":"1.1.2","keywords":["audio","dsp","filter","diode-ladder"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/filter-diode-ladder@1.1.2","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"homepage":"https://github.com/audiojs/filter/tree/main/packages/filter-diode-ladder","bugs":{"url":"https://github.com/audiojs/filter/issues"},"dist":{"shasum":"8b901fb9aa9cd706f5d45667aa362f19e6c53dea","tarball":"https://registry.npmjs.org/@audio/filter-diode-ladder/-/filter-diode-ladder-1.1.2.tgz","fileCount":4,"integrity":"sha512-GcLnbSuYGtgOib/gL+UNu1CLLN8zp68C7MJ3s6cJnG9sC6dciQ5vfROtQOGgH+fQPQIYZaUYF2WwNO3M9BPMSA==","signatures":[{"sig":"MEQCIHfIxZjUc+dumjmTpxXvhlJ5M8OdYFv9KUqHqCX6NwqaAiBeCRhy0YutOjSUE5In8qpAU68ZLQj6GCT8+xFhq1XGUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7304},"main":"diode-ladder.js","type":"module","audio":"./audio.js","engines":{"node":">=18"},"exports":{".":"./diode-ladder.js","./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"gitHead":"1d208e2a19acb6248ca6c47fd9211a2f2ee340f4","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/filter.git","type":"git","directory":"packages/filter-diode-ladder"},"_npmVersion":"11.12.1","description":"Diode ladder filter (Roland TB-303 / EMS VCS3 style)","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/filter-diode-ladder_1.1.2_1783701721513_0.7806860181986592","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@audio/filter-diode-ladder","version":"1.2.0","keywords":["audio","dsp","filter","diode-ladder"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/filter-diode-ladder@1.2.0","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"homepage":"https://github.com/audiojs/filter/tree/main/packages/filter-diode-ladder","bugs":{"url":"https://github.com/audiojs/filter/issues"},"dist":{"shasum":"507d1724876b3ea80850e3a42aa5a68c9adf1319","tarball":"https://registry.npmjs.org/@audio/filter-diode-ladder/-/filter-diode-ladder-1.2.0.tgz","fileCount":4,"integrity":"sha512-h17sMMjuo0By8znGJyssX+VtZgRCmPeJgk3jgUqeNgwImxAC0VGk22x4JRyZpD6sN3Sc756J1ufh66IfKWZHHw==","signatures":[{"sig":"MEYCIQDrJ71TwedAjU0lp/f9/Z5ky3AGIiVhFjEosxTvmYA7hAIhAJ29D7J7+xvqBAHYm6qBB+ICBpOjHwu7InuGsne90cU4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7296},"main":"diode-ladder.js","type":"module","audio":"./audio.js","engines":{"node":">=18"},"exports":{".":"./diode-ladder.js","./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"gitHead":"5e37f6c50e48b5296fee32e00faae5f243eaef9e","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/filter.git","type":"git","directory":"packages/filter-diode-ladder"},"_npmVersion":"11.12.1","description":"Diode ladder filter (Roland TB-303 / EMS VCS3 style)","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/filter-diode-ladder_1.2.0_1783724455485_0.038222897024187796","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@audio/filter-diode-ladder","version":"1.2.1","description":"Diode ladder filter (Roland TB-303 / EMS VCS3 style)","type":"module","sideEffects":false,"main":"diode-ladder.js","types":"./diode-ladder.d.ts","exports":{".":{"types":"./diode-ladder.d.ts","default":"./diode-ladder.js"},"./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"keywords":["audio","dsp","filter","diode-ladder"],"license":"MIT","author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/audiojs/filter.git","directory":"packages/filter-diode-ladder"},"homepage":"https://github.com/audiojs/filter/tree/main/packages/filter-diode-ladder","bugs":{"url":"https://github.com/audiojs/filter/issues"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"audio":"./audio.js","funding":"https://github.com/sponsors/audiojs","gitHead":"5182c8649144d83c9fda67a36db76f3b195588a3","_id":"@audio/filter-diode-ladder@1.2.1","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-MIcH5PpnIPg4/JGV8eKku4dYP9L1177Pf/TOhFNRdJiytkLTXFlv3p0ABzh1TbIqJqE9AKxddzcOtrFBs/QZew==","shasum":"61401a8dc3d2a34c61c628020842d2481702c594","tarball":"https://registry.npmjs.org/@audio/filter-diode-ladder/-/filter-diode-ladder-1.2.1.tgz","fileCount":6,"unpackedSize":10936,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDKmoh0jzR4HMF6RuWyb2lIUSwUUC6HraEmImsfpxnotQIgAWNczMztt853LZunjJT9LBkQrsek4hWaZc635ymgIqo="}]},"_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"directories":{},"maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/filter-diode-ladder_1.2.1_1783731581138_0.5091750244638122"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-08T19:43:43.481Z","modified":"2026-07-11T00:59:41.393Z","1.0.0":"2026-07-08T19:43:43.786Z","1.1.0":"2026-07-09T22:12:24.246Z","1.1.1":"2026-07-10T00:55:22.393Z","1.1.2":"2026-07-10T16:42:01.665Z","1.2.0":"2026-07-10T23:00:55.643Z","1.2.1":"2026-07-11T00:59:41.264Z"},"bugs":{"url":"https://github.com/audiojs/filter/issues"},"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","homepage":"https://github.com/audiojs/filter/tree/main/packages/filter-diode-ladder","keywords":["audio","dsp","filter","diode-ladder"],"repository":{"type":"git","url":"git+https://github.com/audiojs/filter.git","directory":"packages/filter-diode-ladder"},"description":"Diode ladder filter (Roland TB-303 / EMS VCS3 style)","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"readme":"# @audio/filter-diode-ladder [![npm](https://img.shields.io/npm/v/@audio/filter-diode-ladder)](https://www.npmjs.com/package/@audio/filter-diode-ladder) [![MIT](https://img.shields.io/badge/MIT-%E0%A5%90-white)](https://github.com/krishnized/license)\n\nDiode ladder filter (Roland TB-303 / EMS VCS3 style)\n\n```\nnpm install @audio/filter-diode-ladder\n```\n\n```js\nimport diodeLadder from '@audio/filter-diode-ladder'\n```\n\nRoland TB-303 / EMS VCS3 style — per-stage saturation gives the characteristic acid \"squelch\".\n\n**Circuit**: Roland TB-303, EMS VCS3, EDP Wasp<br>\n**Key difference from Moog**: stages are bidirectionally coupled — no unity-gain buffers between them (unlike Moog), so each stage loads its neighbors; solved as one tridiagonal system per sample (Thomas algorithm) instead of Moog's simple forward cascade<br>\n**Character**: preserves more bass at high resonance than Moog — closed-form DC gain $1/(1 + 4\\cdot\\text{resonance})$ vs Moog's $1/(1 + 4\\cdot\\text{resonance}\\cdot(1+G+G^2+G^3+G^4))$, $G<1$ — and more \"squelchy\"/aggressive due to the per-stage $\\tanh$<br>\n**Implementation**: ZDF (zero-delay feedback) via trapezoidal integration — Zavalishin, *The Art of VA Filter Design* (2012); Pirkle, *Designing Audio Effect Plugins in C++*, 2nd ed. (2019), Ch. 10<br>\n**Stability**: bounded (per-stage $\\tanh$-saturated) across the documented 0–1 range and well beyond; self-oscillates near resonance≈1.15–1.2 — higher than Moog's exact 1, since the extra per-stage $\\tanh$ adds damping\n\n```js\nlet params = { fc: 500, resonance: 0.8, fs: 44100 }\ndiodeLadder(buffer, params)\n```\n\n| Param | Default | |\n|---|---|---|\n| `fc` | `1000` | cutoff frequency, Hz |\n| `resonance` | `0` | 0–1; feedback k = 4·resonance (same mapping as `moogLadder`); self-oscillates near ≈1.15–1.2 |\n| `fs` | `44100` | sample rate, Hz |\n| `drive` | `1` | input gain into each stage's tanh saturation; `0` mutes the signal |\n\nPass the same `params` object on every call to persist the 4 stage states across blocks.\n\n**Use when:** acid basslines, squelchy synth leads — resonance character that stays bounded (not self-oscillating) across most of the range, unlike `moogLadder`.\n\n---\n\nPart of [@audio/filter](https://github.com/audiojs/filter) — the filter family umbrella. This README is generated from the umbrella docs.\n\nMIT © [audiojs](https://github.com/audiojs)\n","readmeFilename":"README.md"}