{"_id":"@audio/spectral-contrast","_rev":"5-583bb9f343662ad7d367568378102e9b","name":"@audio/spectral-contrast","dist-tags":{"latest":"1.1.3"},"versions":{"1.0.0":{"name":"@audio/spectral-contrast","version":"1.0.0","keywords":["audio","dsp","spectral","contrast"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/spectral-contrast@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":"44daca9e78954489aa780759ab7355752af94ae5","tarball":"https://registry.npmjs.org/@audio/spectral-contrast/-/spectral-contrast-1.0.0.tgz","fileCount":2,"integrity":"sha512-w7XU87hYOb5Dcq/i4kyiHXEVreGsLe1vXWqsFROnNQqeWFjz/f7TDz/yd97xHSjUgyf22jjXrjnnuP+SeLpsyQ==","signatures":[{"sig":"MEQCIGBhAdvqlyM6u4ooKEHXA+t0NWWrF9WLAw1XhF+R37ruAiBrfqA9sPwGaFn1VYwlIz+8wb2+t0UBX9lVDA5zUDSbsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1659},"main":"contrast.js","type":"module","engines":{"node":">=18"},"exports":{".":"./contrast.js","./package.json":"./package.json"},"gitHead":"a1aba4f2662a0f284ef88a04047c6cfa3c3ce6e5","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"_npmVersion":"11.12.1","description":"Spectral contrast — per-octave peak/valley difference (Jiang 2002, librosa parity)","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectral-contrast_1.0.0_1783540004371_0.27580278483659204","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@audio/spectral-contrast","version":"1.1.0","keywords":["audio","dsp","spectral","contrast"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/spectral-contrast@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":"166c0b1d35cce043d73010c9b1abd0b3afe0c068","tarball":"https://registry.npmjs.org/@audio/spectral-contrast/-/spectral-contrast-1.1.0.tgz","fileCount":3,"integrity":"sha512-FJ4nk3XopIIweJEJnVfBrfOBIUWzVtU+cKkCBAi3e+ybOtKTBwXe/AKlqzcq+xbmN6MKXHQfRj+nUia7xoD5yA==","signatures":[{"sig":"MEUCIQCQIJEdIiBEzchIaLz4stuk2Rg/P98dvc6Zj44SW6JR+AIgLvJyQ5ArZjde2TGi0mQCyiHa/QJWQxwKjfE0MaXHNKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2984},"main":"contrast.js","type":"module","engines":{"node":">=18"},"exports":{".":"./contrast.js","./stat":"./stat.js","./package.json":"./package.json"},"gitHead":"aee601cfdf49e67cf47232ef76b6983d4129f4a5","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"_npmVersion":"11.12.1","description":"Spectral contrast — per-octave peak/valley difference (Jiang 2002, librosa parity)","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"fourier-transform":"^2.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectral-contrast_1.1.0_1783635216627_0.8066255361004175","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@audio/spectral-contrast","version":"1.1.1","keywords":["audio","dsp","spectral","contrast"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/spectral-contrast@1.1.1","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"dist":{"shasum":"d86b85f151c87f32ec7a5b13de2ff7a77fb99712","tarball":"https://registry.npmjs.org/@audio/spectral-contrast/-/spectral-contrast-1.1.1.tgz","fileCount":3,"integrity":"sha512-wIikW8F19wuxGs6WD3KCbXP5hUWiASuQ5yknHuP6DvTSrwtUiQg5exB+/cfSrt8yEAIMy94JwgCKuZOMtH/kag==","signatures":[{"sig":"MEUCIC1fs2IatZEjss9rmNnH42Tc1dP3SjdJeYk02iKJwgZLAiEAycBvRcaR2SwOK+ta+/BCy8GNlY9hg4PdAMi0eU6ktfk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3012},"main":"contrast.js","type":"module","audio":"./audio.js","engines":{"node":">=18"},"exports":{".":"./contrast.js","./audio":"./audio.js","./package.json":"./package.json"},"gitHead":"b4077a4f931c647dc20ff7d6e82b612391de1a77","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"_npmVersion":"11.12.1","description":"Spectral contrast — per-octave peak/valley difference (Jiang 2002, librosa parity)","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"fourier-transform":"^2.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectral-contrast_1.1.1_1783645101499_0.9499251278070082","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@audio/spectral-contrast","version":"1.1.2","keywords":["audio","dsp","spectral","contrast"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/spectral-contrast@1.1.2","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"dist":{"shasum":"983314bc87437928038554511aa0d7a620444cf7","tarball":"https://registry.npmjs.org/@audio/spectral-contrast/-/spectral-contrast-1.1.2.tgz","fileCount":4,"integrity":"sha512-DRmOQy0wanNExZrjDYDjrw6L5lB6iTAfabsvJ+LK8Frhr1ZrnFA1TCwIdxNSo6lTOjEdC21yxNejAm/wZtyd+Q==","signatures":[{"sig":"MEYCIQCQkkmaezDm50cYdRjrW6bc8me4OOU5nhjQgO21XwShrgIhAN+uZaKLEYDWHIZMDMonwvEsLYXaqSqYmFIEGq8Z7umg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4097},"main":"contrast.js","type":"module","audio":"./audio.js","engines":{"node":">=18"},"exports":{".":"./contrast.js","./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"gitHead":"e8fc5c606da9a5786768cb46d0141910604689e1","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"_npmVersion":"11.12.1","description":"Spectral contrast — per-octave peak/valley difference (Jiang 2002, librosa parity)","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"fourier-transform":"^2.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectral-contrast_1.1.2_1783701819003_0.25948729870995724","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@audio/spectral-contrast","version":"1.1.3","description":"Spectral contrast — per-octave peak/valley difference (Jiang 2002, librosa parity)","type":"module","sideEffects":false,"main":"contrast.js","exports":{".":"./contrast.js","./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"keywords":["audio","dsp","spectral","contrast"],"license":"MIT","author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"dependencies":{"fourier-transform":"^2.3.1"},"types":"index.d.ts","audio":"./audio.js","repository":{"type":"git","url":"git+https://github.com/audiojs/spectral.git","directory":"packages/spectral-contrast"},"funding":"https://github.com/sponsors/audiojs","gitHead":"0bf461273c2acb2401ff9842afec35a43fd05a9a","_id":"@audio/spectral-contrast@1.1.3","bugs":{"url":"https://github.com/audiojs/spectral/issues"},"homepage":"https://github.com/audiojs/spectral#readme","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-X4wopumRB+M93MNi7LFu8SaIJGeumZiXtpU4oVbbQfW2GCZmbPEsKJw/u1bICVkSrqtZqaPEdDdjw2KgfdD7ZQ==","shasum":"883c6d35256ffab0e0ff9f7bbc9d12da84164e43","tarball":"https://registry.npmjs.org/@audio/spectral-contrast/-/spectral-contrast-1.1.3.tgz","fileCount":6,"unpackedSize":6357,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIALMIWTaIPLuX+zlMolI+RkxNRbrkBaxCAwnNCVml98UAiA3KzHKSJJKtl3KMvfbq/oKRpEL2FJij2QI6ac85L5AsA=="}]},"_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/spectral-contrast_1.1.3_1783731866530_0.4625636329512073"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-08T19:46:44.156Z","modified":"2026-07-11T01:04:26.803Z","1.0.0":"2026-07-08T19:46:44.520Z","1.1.0":"2026-07-09T22:13:36.769Z","1.1.1":"2026-07-10T00:58:21.655Z","1.1.2":"2026-07-10T16:43:39.142Z","1.1.3":"2026-07-11T01:04:26.680Z"},"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","keywords":["audio","dsp","spectral","contrast"],"description":"Spectral contrast — per-octave peak/valley difference (Jiang 2002, librosa parity)","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"readme":"# @audio/spectral-contrast\n\n> Spectral contrast — per-octave-band peak/valley energy difference (Jiang 2002; librosa/essentia parity).\n\n`npm install @audio/spectral-contrast`\n\n```js\nimport { fft } from 'fourier-transform'\nimport contrast from '@audio/spectral-contrast'\n\nlet win = frame.map((x, i) => x * (0.5 - 0.5 * Math.cos(2 * Math.PI * i / (frame.length - 1))))\nlet [re, im] = fft(win)\nlet mag = re.map((r, k) => Math.hypot(r, im[k]))\n\nlet bands = contrast(mag, { fs: 44100 })   // Float32Array(6), dB per octave band\n```\n\nEach band spans `[fmin·2ᵇ, fmin·2ᵇ⁺¹)` (default `fmin = 200` Hz); within a band, contrast is\n`20·log10(peak / valley)` where peak/valley are the mean of the top/bottom `quantile` of bins by\nmagnitude — high contrast marks tonal energy standing above a noisy floor in that band.\n\nOptions: - `fs` — sample rate (default 44100, Hz) · `n` — FFT size the spectrum was taken at (default `2 * (mag.length - 1)`, inferred from `mag.length`) · `fmin` — lowest band edge (default 200, Hz) · `bands` — number of octave bands (default 6) · `quantile` — peak/valley fraction of each band's bins (default 0.2)\n\nAlso exported as an `audio.js` stat manifest (`./audio` — mono-fold, 2048/512 hann frames, averaged over the take).\n\nPart of [@audio/spectral](https://github.com/audiojs/spectral).\n","readmeFilename":"README.md","homepage":"https://github.com/audiojs/spectral#readme","repository":{"type":"git","url":"git+https://github.com/audiojs/spectral.git","directory":"packages/spectral-contrast"},"bugs":{"url":"https://github.com/audiojs/spectral/issues"}}