@audio/auditory-erb 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/erb-bank.js +40 -0
  2. package/package.json +30 -0
package/erb-bank.js ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * ERB-spaced filter bank using gammatone filters.
3
+ * Bands spaced according to the Equivalent Rectangular Bandwidth scale,
4
+ * matching human auditory frequency resolution.
5
+ *
6
+ * Reference: Glasberg & Moore, "Derivation of auditory filter shapes
7
+ * from notched-noise data", Hearing Research 47 (1990).
8
+ */
9
+
10
+ /**
11
+ * Generate ERB-spaced filter bank center frequencies and bandwidths.
12
+ * @param {number} fs - Sample rate (default 44100)
13
+ * @param {object} opts - { fmin: 50, fmax: 16000, density: 1 (bands per ERB) }
14
+ * @returns {Array<{fc: number, erb: number}>}
15
+ */
16
+ export default function erbBank (fs, opts) {
17
+ if (!fs) fs = 44100
18
+ if (!opts) opts = {}
19
+ let fmin = opts.fmin || 50
20
+ let fmax = opts.fmax || Math.min(16000, fs / 2)
21
+ let density = opts.density || 1
22
+
23
+ let bands = []
24
+
25
+ // ERB scale: ERB(f) = 24.7 * (4.37 * f/1000 + 1)
26
+ // ERB number: E(f) = 21.4 * log10(4.37 * f/1000 + 1)
27
+ let eMin = 21.4 * Math.log10(4.37 * fmin / 1000 + 1)
28
+ let eMax = 21.4 * Math.log10(4.37 * fmax / 1000 + 1)
29
+ let step = 1 / density
30
+
31
+ for (let e = eMin; e <= eMax; e += step) {
32
+ // Inverse ERB number → frequency
33
+ let fc = (Math.pow(10, e / 21.4) - 1) * 1000 / 4.37
34
+ if (fc < fmin || fc > fmax) continue
35
+ let erb = 24.7 * (4.37 * fc / 1000 + 1)
36
+ bands.push({ fc: Math.round(fc * 10) / 10, erb: Math.round(erb * 10) / 10 })
37
+ }
38
+
39
+ return bands
40
+ }
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@audio/auditory-erb",
3
+ "version": "1.0.0",
4
+ "description": "ERB-spaced filter bank using gammatone filters",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "main": "erb-bank.js",
8
+ "exports": {
9
+ ".": "./erb-bank.js",
10
+ "./package.json": "./package.json"
11
+ },
12
+ "files": [
13
+ "erb-bank.js"
14
+ ],
15
+ "keywords": [
16
+ "audio",
17
+ "dsp",
18
+ "auditory",
19
+ "filterbank",
20
+ "erb"
21
+ ],
22
+ "license": "MIT",
23
+ "author": "Dmitry Iv. <dfcreative@gmail.com>",
24
+ "engines": {
25
+ "node": ">=18"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ }
30
+ }