{"_id":"@audio/dynamics-transient-shaper","_rev":"7-6eb025d3d0218ccf5a804a88cdb0cc79","name":"@audio/dynamics-transient-shaper","dist-tags":{"latest":"0.1.6"},"versions":{"0.1.0":{"name":"@audio/dynamics-transient-shaper","version":"0.1.0","keywords":["audio","dsp","dynamics","transient-shaper"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/dynamics-transient-shaper@0.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/dynamics/tree/main/packages/dynamics-transient-shaper","bugs":{"url":"https://github.com/audiojs/dynamics/issues"},"dist":{"shasum":"e6314821a02df80fa327e6522434c456c7fc2986","tarball":"https://registry.npmjs.org/@audio/dynamics-transient-shaper/-/dynamics-transient-shaper-0.1.0.tgz","fileCount":2,"integrity":"sha512-pDQnU5YJ8Byfcea5jESk35S1vMj7mxdlzizW7N6M2FCIUhH9ssLLfGImIf1gcnj0YbLExv51lwImTXvMbP753w==","signatures":[{"sig":"MEUCIDn5xATXxAsKVQefz1FrkVBoRZuh6EHzargDfZ43WsyWAiEAjy+SUMg5QrkYp4LaUi1xKJGACvUsjr3yD7VsvIzahOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2241},"main":"transient-shaper.js","type":"module","engines":{"node":">=18"},"exports":{".":"./transient-shaper.js","./package.json":"./package.json"},"gitHead":"7c71fa7240f20cea48a583fecdd02cdc0db12852","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/dynamics.git","type":"git","directory":"packages/dynamics-transient-shaper"},"_npmVersion":"11.12.1","description":"Transient shaper — independently boosts/cuts attack and sustain portions","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dynamics-transient-shaper_0.1.0_1783540360811_0.5956688413835662","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@audio/dynamics-transient-shaper","version":"0.1.1","keywords":["audio","dsp","dynamics","transient-shaper"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/dynamics-transient-shaper@0.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/dynamics/tree/main/packages/dynamics-transient-shaper","bugs":{"url":"https://github.com/audiojs/dynamics/issues"},"dist":{"shasum":"40819dffd2a560a2f7fa2c6ef127c36405580ae9","tarball":"https://registry.npmjs.org/@audio/dynamics-transient-shaper/-/dynamics-transient-shaper-0.1.1.tgz","fileCount":3,"integrity":"sha512-/zzNe2XXBErixYvctERVNinlT5MV/gD+2P7ZHocuthN5I8eBeSvuMvMg4DWgUCsQPkrlUUAyScPPL3yNtb3pmQ==","signatures":[{"sig":"MEQCIFYQqiIFrlmakSE4zjMp6hM/HO0bRnt+SbAaDgGW6049AiBfO36EMP/ZYLawUIVOIc8XspjL+HXWUL1z8quRdLD5sQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4352},"main":"transient-shaper.js","type":"module","engines":{"node":">=18"},"exports":{".":"./transient-shaper.js","./audio-module":"./audio-module.js","./package.json":"./package.json"},"gitHead":"e2561f0437324f9569e232ee5ea1a21f08cf8ce8","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/dynamics.git","type":"git","directory":"packages/dynamics-transient-shaper"},"_npmVersion":"11.12.1","description":"Transient shaper — independently boosts/cuts attack and sustain portions","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dynamics-transient-shaper_0.1.1_1783545782918_0.8758429458362396","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@audio/dynamics-transient-shaper","version":"0.1.2","keywords":["audio","dsp","dynamics","transient-shaper"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/dynamics-transient-shaper@0.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/dynamics/tree/main/packages/dynamics-transient-shaper","bugs":{"url":"https://github.com/audiojs/dynamics/issues"},"dist":{"shasum":"4e296962340e42c92d1b6fce3f57f53d1cad53de","tarball":"https://registry.npmjs.org/@audio/dynamics-transient-shaper/-/dynamics-transient-shaper-0.1.2.tgz","fileCount":3,"integrity":"sha512-zOzl9c2i3bWnKFOtdu6bs23wCdRckyf5VtUnpWGt53D+PdxaibI3nSe2fgmfp7oDPoWp1kH0CKVF3iuQFjK1Rw==","signatures":[{"sig":"MEUCIAI1fXiKZx9UL7uRsbQMhYzQscRAftQCkxtRYe1bc/LJAiEAwDzFMtryZ3UlkxEf5qQ/1iTBReCJYKjAZ4BhK6HKdhQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4318},"main":"transient-shaper.js","type":"module","engines":{"node":">=18"},"exports":{".":"./transient-shaper.js","./atom":"./atom.js","./package.json":"./package.json"},"gitHead":"0c7653428afcbf8f0bf8de9dc2021b086881b341","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/dynamics.git","type":"git","directory":"packages/dynamics-transient-shaper"},"_npmVersion":"11.12.1","description":"Transient shaper — independently boosts/cuts attack and sustain portions","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dynamics-transient-shaper_0.1.2_1783560240403_0.3122041892874916","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@audio/dynamics-transient-shaper","version":"0.1.3","keywords":["audio","dsp","dynamics","transient-shaper"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/dynamics-transient-shaper@0.1.3","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/dynamics/tree/main/packages/dynamics-transient-shaper","bugs":{"url":"https://github.com/audiojs/dynamics/issues"},"dist":{"shasum":"085cda789bb731cfc9e8a8ea6846073ae847ed0a","tarball":"https://registry.npmjs.org/@audio/dynamics-transient-shaper/-/dynamics-transient-shaper-0.1.3.tgz","fileCount":3,"integrity":"sha512-LH21J0Njhs8dOgRmDhm47paIkza1FP6uFF2c2sixxPrabDy83z3vXhtgU8WD1N/A+CCzT20zzYIOq8RchxjDJA==","signatures":[{"sig":"MEUCIQDLGLBOoIpigS+a1B1SXk8SMpRrEISFwRTJPi9DDI1+kQIgaUIj8h+sY4h4lE4auzr6QRbiubc8dJHgB/LAheLiYxk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4349},"main":"transient-shaper.js","type":"module","audio":"./audio.js","engines":{"node":">=18"},"exports":{".":"./transient-shaper.js","./audio":"./audio.js","./package.json":"./package.json"},"gitHead":"bd990cde847fa5c7f7cc09e0cbf6fa6958c402ee","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/dynamics.git","type":"git","directory":"packages/dynamics-transient-shaper"},"_npmVersion":"11.12.1","description":"Transient shaper — independently boosts/cuts attack and sustain portions","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dynamics-transient-shaper_0.1.3_1783644811420_0.18213576867830983","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@audio/dynamics-transient-shaper","version":"0.1.4","keywords":["audio","dsp","dynamics","transient-shaper"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/dynamics-transient-shaper@0.1.4","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/dynamics/tree/main/packages/dynamics-transient-shaper","bugs":{"url":"https://github.com/audiojs/dynamics/issues"},"dist":{"shasum":"64386ca58c6f0e1d637cc0099bffdb6a6a418cd6","tarball":"https://registry.npmjs.org/@audio/dynamics-transient-shaper/-/dynamics-transient-shaper-0.1.4.tgz","fileCount":4,"integrity":"sha512-5N7TM8SUQfv66/iAihM6HMEilCtZPSZcr12SzRIJDHc2GoLYt9D+8giscDCEE21+crRmX0m4p1B0jTrTF+Y6Xw==","signatures":[{"sig":"MEUCIDgxVQjO6VLugu5cyjrvnTn1Ss13n69sGlPk8imX8zg5AiEAtZAjz1r51B1t89FlsZcd7COXghI34RrIHZXwUt4ulfE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5707},"main":"transient-shaper.js","type":"module","audio":"./audio.js","engines":{"node":">=18"},"exports":{".":"./transient-shaper.js","./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"gitHead":"089832c3dab3b885182248bd804e361286156804","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/dynamics.git","type":"git","directory":"packages/dynamics-transient-shaper"},"_npmVersion":"11.12.1","description":"Transient shaper — independently boosts/cuts attack and sustain portions","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dynamics-transient-shaper_0.1.4_1783701630476_0.07272316738802842","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@audio/dynamics-transient-shaper","version":"0.1.5","keywords":["audio","dsp","dynamics","transient-shaper"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/dynamics-transient-shaper@0.1.5","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/dynamics/tree/main/packages/dynamics-transient-shaper","bugs":{"url":"https://github.com/audiojs/dynamics/issues"},"dist":{"shasum":"4646bb25ba81f19704847ea78106244f1132f7de","tarball":"https://registry.npmjs.org/@audio/dynamics-transient-shaper/-/dynamics-transient-shaper-0.1.5.tgz","fileCount":6,"integrity":"sha512-FYtzY6hElsqMzQz9imfX9Eu0E3lDaPJ0iO/V/EkLiVtNo/dRp5S4Sxqs3fj5LJT18fTGqZopNfKYpp3yvX9waw==","signatures":[{"sig":"MEUCIQD2DC22yPyQ2E0arMy3g7BM3G3PEdbbsur1wuLnkxqkTAIgbFELqwLXFEFlF6XfDGS/O4/bmvDJmBwNCUlQBZX6TKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8914},"main":"transient-shaper.js","type":"module","audio":"./audio.js","types":"./transient-shaper.d.ts","engines":{"node":">=18"},"exports":{".":"./transient-shaper.js","./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"funding":"https://github.com/sponsors/audiojs","gitHead":"28b8fc7ed183f5872771bc2066b7b2db0585a644","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/dynamics.git","type":"git","directory":"packages/dynamics-transient-shaper"},"_npmVersion":"11.12.1","description":"Transient shaper — independently boosts/cuts attack and sustain portions","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dynamics-transient-shaper_0.1.5_1783731451861_0.8666466901335759","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"_id":"@audio/dynamics-transient-shaper@0.1.6","bugs":{"url":"https://github.com/audiojs/dynamics/issues"},"dist":{"shasum":"aea22a17d3a54d435fc555d0b0d9789452b6e224","tarball":"https://registry.npmjs.org/@audio/dynamics-transient-shaper/-/dynamics-transient-shaper-0.1.6.tgz","fileCount":6,"integrity":"sha512-bUHIdjHMhlm3I+hPpuv5Iw58+MNDvvuRh5mHRwS/PRPeaRo3OoiWMETpwlbjIqwRDy872sKIyDClQFw83+03TA==","signatures":[{"sig":"MEUCIDBwGyfMmct+tMFd27U3pOaHiUZpA/rKJLMjNsdbdaF+AiEAysdFtIv3PBYE6HiPprhUGyQu4+aJGvY3N4V3/ggMlNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBmxTSzno3EbVy30c4Wdq2meUglNJT2tZ/Utfe8wfavTAiBp7cWGbUvHJDUzUqTl+n3N+R2hwwGdvgD7dtcvaKhpmg=="}],"unpackedSize":9134},"main":"transient-shaper.js","name":"@audio/dynamics-transient-shaper","type":"module","audio":"./audio.js","types":"./transient-shaper.d.ts","author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"engines":{"node":">=18"},"exports":{".":"./transient-shaper.js","./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"funding":"https://github.com/sponsors/audiojs","gitHead":"58df69d47089b515f0afb8f04c013c267d71329d","license":"MIT","version":"0.1.6","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"homepage":"https://github.com/audiojs/dynamics/tree/main/packages/dynamics-transient-shaper","keywords":["audio","dsp","dynamics","transient-shaper"],"repository":{"url":"git+https://github.com/audiojs/dynamics.git","type":"git","directory":"packages/dynamics-transient-shaper"},"_npmVersion":"11.12.1","description":"Transient shaper — independently boosts/cuts attack and sustain portions","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","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dynamics-transient-shaper_0.1.6_1790192068955_0.9509500309436141"}}},"time":{"created":"2026-07-08T19:52:40.640Z","modified":"2026-09-23T19:34:29.235Z","0.1.0":"2026-07-08T19:52:40.948Z","0.1.1":"2026-07-08T21:23:03.052Z","0.1.2":"2026-07-09T01:24:00.569Z","0.1.3":"2026-07-10T00:53:31.546Z","0.1.4":"2026-07-10T16:40:30.685Z","0.1.5":"2026-07-11T00:57:31.990Z","0.1.6":"2026-09-23T19:34:29.037Z"},"bugs":{"url":"https://github.com/audiojs/dynamics/issues"},"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","homepage":"https://github.com/audiojs/dynamics/tree/main/packages/dynamics-transient-shaper","keywords":["audio","dsp","dynamics","transient-shaper"],"repository":{"url":"git+https://github.com/audiojs/dynamics.git","type":"git","directory":"packages/dynamics-transient-shaper"},"description":"Transient shaper — independently boosts/cuts attack and sustain portions","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"readme":"# @audio/dynamics-transient-shaper [![npm](https://img.shields.io/npm/v/@audio/dynamics-transient-shaper)](https://www.npmjs.com/package/@audio/dynamics-transient-shaper) [![MIT](https://img.shields.io/badge/MIT-%E0%A5%90-white)](https://github.com/krishnized/license)\n\nTransient shaper — independently boosts/cuts attack and sustain portions (SPL Transient Designer class)\n\n```\nnpm install @audio/dynamics-transient-shaper\n```\n\n```js\nimport transientShaper from '@audio/dynamics-transient-shaper'\n```\n\nA level follower (1 ms attack, 100 ms release) and a slow copy of it (50 ms attack) separate transient from sustain: `transient = (level − slow) / level`, from 0 to 1: near 1 on attacks, near 0 on held material. Output gain is `1 + attackGain·transient + sustainGain·(1 − transient)`, a linear multiplier (not dB) that stays between `1 + attackGain` and `1 + sustainGain`: `attackGain: 1` roughly doubles attack peaks, `attackGain: -1` can null them out. Mutates `data` in place and returns it; no separate streaming factory — pass the same `params` object across calls (it carries `_envFast`/`_envSlow`) to continue state across chunks.\n\n```js\ntransientShaper(data, { attackGain: 0.5, sustainGain: -0.3 })   // punchier attacks, tucked sustain\ntransientShaper(data, { attackGain: -0.5 })                       // soften/glue transients\n\nlet params = { attackGain: 0.5 }\ntransientShaper(block1, params)                                   // state carried in `params`\ntransientShaper(block2, params)\n```\n\n| Param | Default | |\n|---|---|---|\n| `attackGain` | `0` | linear gain delta on the transient portion (not dB) |\n| `sustainGain` | `0` | linear gain delta on the sustain portion (not dB) |\n| `fs` | `44100` | Hz |\n\n**Use when:** drum punch/glue, percussive attack shaping without a threshold to tune.<br>\n**Not for:** level-controlled dynamics — use [`compressor`](https://github.com/audiojs/dynamics#compressor) or [`unlimit`](https://github.com/audiojs/dynamics#unlimit) for deficit-gated transient restoration.\n\n---\n\nPart of [@audio/dynamics](https://github.com/audiojs/dynamics) — the dynamics family umbrella.\n\nMIT © [audiojs](https://github.com/audiojs)\n","readmeFilename":"README.md"}