{"_id":"@audio/defeedback-notchbank","_rev":"4-7cea60d3cfc014300816ce3b77a87168","name":"@audio/defeedback-notchbank","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@audio/defeedback-notchbank","version":"1.0.0","keywords":["audio","dsp","feedback","howling","notchbank"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/defeedback-notchbank@1.0.0","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"dist":{"shasum":"f42460bc73a62dd86c7026399f0f4bdff02e18d2","tarball":"https://registry.npmjs.org/@audio/defeedback-notchbank/-/defeedback-notchbank-1.0.0.tgz","fileCount":2,"integrity":"sha512-XZpfw9UQa6u0Ev5z/NoGeaUQfgCQmSzbA99+zEiDtXvpfPM2m6ypQDES7MVSzxIEInVIp4OwX7wugcFJRezt8g==","signatures":[{"sig":"MEUCIESBTsGq9B/G2Dl9+o5VRgSnWR/4+bR3MWiKoJBfAnC/AiEA9pXgScr8QrHH6vkJNyVv/iJWOS+Ph3x6m0U/JaYMKBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3053},"main":"notchbank.js","type":"module","engines":{"node":">=18"},"exports":{".":"./notchbank.js","./package.json":"./package.json"},"gitHead":"e1776334d3299fbe875647cbc29b5c530e1969db","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"_npmVersion":"11.12.1","description":"Adaptive notch bank — pooled narrow IIR cuts, click-free coefficient morphing, deepen-on-redeploy","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"digital-filter":"^2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/defeedback-notchbank_1.0.0_1783540096848_0.24888830578458143","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@audio/defeedback-notchbank","version":"1.1.0","keywords":["audio","dsp","feedback","howling","notchbank"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/defeedback-notchbank@1.1.0","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"dist":{"shasum":"c67289a11b8e0ca5c91b57c19224618ec16c466e","tarball":"https://registry.npmjs.org/@audio/defeedback-notchbank/-/defeedback-notchbank-1.1.0.tgz","fileCount":2,"integrity":"sha512-QaTSaDCn9wl3xcYFCotIinIxMNQMej6PunWdTqrUawrhUwG8TQBbQ0Ef4NcENyLDYbeJnpfykbpd0wL4ejzPMg==","signatures":[{"sig":"MEYCIQC4XyQoPikyDjyRthEqbAS8mREhBpB28Gbd9m8AfMbVBAIhAL1bC9Jvko4dOxWx9Yapm2rTbESLeBlVRXCvhqhBATOb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3037},"main":"notchbank.js","type":"module","engines":{"node":">=18"},"exports":{".":"./notchbank.js","./package.json":"./package.json"},"gitHead":"789f3e484b7a00c95b7d2c8795ebd19fef4c1470","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"_npmVersion":"11.12.1","description":"Adaptive notch bank — pooled narrow IIR cuts, click-free coefficient morphing, deepen-on-redeploy","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"@audio/biquad":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/defeedback-notchbank_1.1.0_1783567869095_0.06636700663651718","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@audio/defeedback-notchbank","version":"1.1.1","keywords":["audio","dsp","feedback","howling","notchbank"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/defeedback-notchbank@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/defeedback#readme","bugs":{"url":"https://github.com/audiojs/defeedback/issues"},"dist":{"shasum":"ae59405e49471dade19887954af661b6dbd64401","tarball":"https://registry.npmjs.org/@audio/defeedback-notchbank/-/defeedback-notchbank-1.1.1.tgz","fileCount":4,"integrity":"sha512-Hgj89kXLoL+R3IabWjeo4KIDyr01ZcYalsY+l5Gg2SAwxMf5yAByW9GZ+/bORFVbZ2VgyNOviNArbp7SPEDtTw==","signatures":[{"sig":"MEUCIQCZ0t4zGO5qj9pnyn3J5K9jzFvNoIBHjrvYvGp+cSHB7wIgJjCYguqv9AInrPc0Ti6FXiM4YQY3q4Rnk5G67nkdMx4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6694},"main":"notchbank.js","type":"module","types":"./notchbank.d.ts","engines":{"node":">=18"},"exports":{".":"./notchbank.js","./package.json":"./package.json"},"funding":"https://github.com/sponsors/audiojs","gitHead":"9fd5adf8afa50119cf0db32b83331650a4847760","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/defeedback.git","type":"git","directory":"packages/defeedback-notchbank"},"_npmVersion":"11.12.1","description":"Adaptive notch bank — pooled narrow IIR cuts, click-free coefficient morphing, deepen-on-redeploy","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"@audio/biquad":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/defeedback-notchbank_1.1.1_1783731378925_0.9643131062326888","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"_id":"@audio/defeedback-notchbank@1.2.0","bugs":{"url":"https://github.com/audiojs/defeedback/issues"},"dist":{"shasum":"02ca50d1cb740a5b0e6c64404a3afcc3b93dad97","tarball":"https://registry.npmjs.org/@audio/defeedback-notchbank/-/defeedback-notchbank-1.2.0.tgz","fileCount":4,"integrity":"sha512-Dq9Wnr2CB/QtD4GD8KZJIw4MhcVJxaCzjjpm1yrsbEiMBX2SMzMOYqff9o4hFofDkYeXRv3jQdiq15M3VlOVsQ==","signatures":[{"sig":"MEYCIQDSUNyDe0LLw6cdYKLECgTUmalXcHRa9PEqKX6SzhrtHgIhAPryz20xg7MlZivAz7XCHOSlaUdMv9Opd9xdRkj7hhoZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCVzJDpNjt9COInUa1aBHalVQd74Pq8eUpxvLkrQCiAOwIhAIfTBYMSQqcOW2Yb5qQMuTX8j2gpAFIMx6HcruH4MPOl"}],"unpackedSize":6799},"main":"notchbank.js","name":"@audio/defeedback-notchbank","type":"module","types":"./notchbank.d.ts","author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"engines":{"node":">=18"},"exports":{".":"./notchbank.js","./package.json":"./package.json"},"funding":"https://github.com/sponsors/audiojs","gitHead":"b2526219c0699eae6e7cdf71c2a76695eebd2a61","license":"MIT","version":"1.2.0","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"homepage":"https://github.com/audiojs/defeedback#readme","keywords":["audio","dsp","feedback","howling","notchbank"],"repository":{"url":"git+https://github.com/audiojs/defeedback.git","type":"git","directory":"packages/defeedback-notchbank"},"_npmVersion":"11.12.1","description":"Adaptive notch bank — pooled narrow IIR cuts, click-free coefficient morphing, deepen-on-redeploy","directories":{},"maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"@audio/biquad":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/defeedback-notchbank_1.2.0_1790192697699_0.2655751027566753"}}},"time":{"created":"2026-07-08T19:48:16.701Z","modified":"2026-09-23T19:44:57.972Z","1.0.0":"2026-07-08T19:48:16.975Z","1.1.0":"2026-07-09T03:31:09.217Z","1.1.1":"2026-07-11T00:56:19.057Z","1.2.0":"2026-09-23T19:44:57.788Z"},"bugs":{"url":"https://github.com/audiojs/defeedback/issues"},"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","homepage":"https://github.com/audiojs/defeedback#readme","keywords":["audio","dsp","feedback","howling","notchbank"],"repository":{"url":"git+https://github.com/audiojs/defeedback.git","type":"git","directory":"packages/defeedback-notchbank"},"description":"Adaptive notch bank — pooled narrow IIR cuts, click-free coefficient morphing, deepen-on-redeploy","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"readme":"# @audio/defeedback-notchbank [![npm](https://img.shields.io/npm/v/@audio/defeedback-notchbank)](https://www.npmjs.com/package/@audio/defeedback-notchbank) [![MIT](https://img.shields.io/badge/MIT-%E0%A5%90-white)](https://github.com/krishnized/license)\n\nAdaptive notch bank — pooled narrow IIR cuts, click-free coefficient morphing, deepen-on-redeploy\n\n```\nnpm install @audio/defeedback-notchbank\n```\n\n```js\nimport notchbank from '@audio/defeedback-notchbank'\n```\n\nA pool of narrow peaking-EQ cuts sitting directly in the signal path — pure IIR, **zero added latency**. `deploy(freq)` activates a free slot at that frequency (or, if the pool is full, steals the shallowest cut); a repeated `deploy` at a frequency already covered deepens that notch instead of adding a new one (residual howl still growing → cut harder, down to `maxDepth`). Coefficients morph linearly over `ramp` samples on every deploy, so cuts fade in/deepen without clicks.\n\n```js\nlet notches = notchbank({ fs: 48000, size: 12, Q: 30, depth: -9 })\n\nnotches.deploy(2340)              // cut a howl at 2340 Hz\nlet out = notches.process(chunk)  // apply the active cuts, in place\nnotches.notches()                 // → [{ freq, gain }, ...] currently active\n```\n\n| Param | Default | |\n|---|---|---|\n| `fs` | `44100` | Hz |\n| `size` | `12` | pooled notch slots |\n| `Q` | `30` | notch Q (sharpness; `q` still accepted) |\n| `depth` | `-9` | dB cut per `deploy` call |\n| `maxDepth` | `-24` | dB, deepest a single notch can reach |\n| `ramp` | `256` | samples, coefficient morph length |\n\nReturns `{ process(chunk): chunk, deploy(freq): void, notches(): Array<{freq, gain}> }`. `process` mutates and returns `chunk` in place.\n\n**Use when:** the direct audio path of an AFS chain — pair with [`@audio/defeedback-analyzer`](https://github.com/audiojs/defeedback-analyzer) + [`@audio/defeedback-tracker`](https://github.com/audiojs/defeedback-tracker) to decide *when* to `deploy`.<br>\n**Not for:** detection — this module only applies cuts, it has no howl criteria of its own.\n\n---\n\nPart of [@audio/defeedback](https://github.com/audiojs/defeedback) — the defeedback family umbrella.\n\nMIT © [audiojs](https://github.com/audiojs)\n","readmeFilename":"README.md"}