@pixi/sound
Version:
WebAudio API playback library with filters
1 lines • 15.4 kB
Source Map (JSON)
{"version":3,"file":"EqualizerFilter.mjs","sources":["../../src/filters/EqualizerFilter.ts"],"sourcesContent":["import { getInstance } from '../instance';\nimport { WebAudioUtils } from '../webaudio/WebAudioUtils';\nimport { Filter } from './Filter';\n\ninterface Band\n{\n f: number;\n type: string;\n gain: number;\n}\n\n/**\n * Filter for adding equalizer bands.\n *\n * @memberof filters\n */\nclass EqualizerFilter extends Filter\n{\n /**\n * Band at 32 Hz\n * @readonly\n */\n public static readonly F32: number = 32;\n\n /**\n * Band at 64 Hz\n * @readonly\n */\n public static readonly F64: number = 64;\n\n /**\n * Band at 125 Hz\n * @readonly\n */\n public static readonly F125: number = 125;\n\n /**\n * Band at 250 Hz\n * @readonly\n */\n public static readonly F250: number = 250;\n\n /**\n * Band at 500 Hz\n * @readonly\n */\n public static readonly F500: number = 500;\n\n /**\n * Band at 1000 Hz\n * @readonly\n */\n public static readonly F1K: number = 1000;\n\n /**\n * Band at 2000 Hz\n * @readonly\n */\n public static readonly F2K: number = 2000;\n\n /**\n * Band at 4000 Hz\n * @readonly\n */\n public static readonly F4K: number = 4000;\n\n /**\n * Band at 8000 Hz\n * @readonly\n */\n public static readonly F8K: number = 8000;\n\n /**\n * Band at 16000 Hz\n * @readonly\n */\n public static readonly F16K: number = 16000;\n\n /**\n * The list of bands\n * @readonly\n */\n public readonly bands: BiquadFilterNode[];\n\n /**\n * The map of bands to frequency\n * @readonly\n */\n public readonly bandsMap: Record<number, BiquadFilterNode>;\n\n /**\n * @param f32 - Default gain for 32 Hz\n * @param f64 - Default gain for 64 Hz\n * @param f125 - Default gain for 125 Hz\n * @param f250 - Default gain for 250 Hz\n * @param f500 - Default gain for 500 Hz\n * @param f1k - Default gain for 1000 Hz\n * @param f2k - Default gain for 2000 Hz\n * @param f4k - Default gain for 4000 Hz\n * @param f8k - Default gain for 8000 Hz\n * @param f16k - Default gain for 16000 Hz\n */\n constructor(f32 = 0, f64 = 0, f125 = 0, f250 = 0, f500 = 0,\n f1k = 0, f2k = 0, f4k = 0, f8k = 0, f16k = 0)\n {\n let bands: BiquadFilterNode[] = [];\n\n const equalizerBands: Band[] = [\n {\n f: EqualizerFilter.F32,\n type: 'lowshelf',\n gain: f32,\n },\n {\n f: EqualizerFilter.F64,\n type: 'peaking',\n gain: f64,\n },\n {\n f: EqualizerFilter.F125,\n type: 'peaking',\n gain: f125,\n },\n {\n f: EqualizerFilter.F250,\n type: 'peaking',\n gain: f250,\n },\n {\n f: EqualizerFilter.F500,\n type: 'peaking',\n gain: f500,\n },\n {\n f: EqualizerFilter.F1K,\n type: 'peaking',\n gain: f1k,\n },\n {\n f: EqualizerFilter.F2K,\n type: 'peaking',\n gain: f2k,\n },\n {\n f: EqualizerFilter.F4K,\n type: 'peaking',\n gain: f4k,\n },\n {\n f: EqualizerFilter.F8K,\n type: 'peaking',\n gain: f8k,\n },\n {\n f: EqualizerFilter.F16K,\n type: 'highshelf',\n gain: f16k,\n },\n ];\n\n if (!getInstance().useLegacy)\n {\n bands = equalizerBands.map((band: Band) =>\n {\n const node: BiquadFilterNode = getInstance().context.audioContext.createBiquadFilter();\n\n node.type = band.type as BiquadFilterType;\n WebAudioUtils.setParamValue(node.Q, 1);\n node.frequency.value = band.f; // WebAudioUtils.setParamValue(filter.frequency, band.f);\n WebAudioUtils.setParamValue(node.gain, band.gain);\n\n return node;\n });\n }\n\n // Setup the constructor AudioNode, where first is the input, and last is the output\n super(bands[0], bands[bands.length - 1]);\n\n // Manipulate the bands\n this.bands = bands;\n\n // Create a map\n this.bandsMap = {};\n\n for (let i = 0; i < this.bands.length; i++)\n {\n const node: BiquadFilterNode = this.bands[i];\n\n // Connect the previous band to the current one\n if (i > 0)\n {\n this.bands[i - 1].connect(node);\n }\n this.bandsMap[node.frequency.value] = node;\n }\n }\n\n /**\n * Set gain on a specific frequency.\n * @param frequency - The frequency, see EqualizerFilter.F* for bands\n * @param gain - Recommended -40 to 40.\n */\n public setGain(frequency: number, gain = 0): void\n {\n if (!this.bandsMap[frequency])\n {\n throw new Error(`No band found for frequency ${frequency}`);\n }\n WebAudioUtils.setParamValue(this.bandsMap[frequency].gain, gain);\n }\n\n /**\n * Get gain amount on a specific frequency.\n * @return The amount of gain set.\n */\n public getGain(frequency: number): number\n {\n if (!this.bandsMap[frequency])\n {\n throw new Error(`No band found for frequency ${frequency}`);\n }\n\n return this.bandsMap[frequency].gain.value;\n }\n\n /**\n * Gain at 32 Hz frequencey.\n * @default 0\n */\n public set f32(value: number)\n {\n this.setGain(EqualizerFilter.F32, value);\n }\n public get f32(): number\n {\n return this.getGain(EqualizerFilter.F32);\n }\n\n /**\n * Gain at 64 Hz frequencey.\n * @default 0\n */\n public set f64(value: number)\n {\n this.setGain(EqualizerFilter.F64, value);\n }\n public get f64(): number\n {\n return this.getGain(EqualizerFilter.F64);\n }\n\n /**\n * Gain at 125 Hz frequencey.\n * @default 0\n */\n public set f125(value: number)\n {\n this.setGain(EqualizerFilter.F125, value);\n }\n public get f125(): number\n {\n return this.getGain(EqualizerFilter.F125);\n }\n\n /**\n * Gain at 250 Hz frequencey.\n * @default 0\n */\n public set f250(value: number)\n {\n this.setGain(EqualizerFilter.F250, value);\n }\n public get f250(): number\n {\n return this.getGain(EqualizerFilter.F250);\n }\n\n /**\n * Gain at 500 Hz frequencey.\n * @default 0\n */\n public set f500(value: number)\n {\n this.setGain(EqualizerFilter.F500, value);\n }\n public get f500(): number\n {\n return this.getGain(EqualizerFilter.F500);\n }\n\n /**\n * Gain at 1 KHz frequencey.\n * @default 0\n */\n public set f1k(value: number)\n {\n this.setGain(EqualizerFilter.F1K, value);\n }\n public get f1k(): number\n {\n return this.getGain(EqualizerFilter.F1K);\n }\n\n /**\n * Gain at 2 KHz frequencey.\n * @default 0\n */\n public set f2k(value: number)\n {\n this.setGain(EqualizerFilter.F2K, value);\n }\n public get f2k(): number\n {\n return this.getGain(EqualizerFilter.F2K);\n }\n\n /**\n * Gain at 4 KHz frequencey.\n * @default 0\n */\n public set f4k(value: number)\n {\n this.setGain(EqualizerFilter.F4K, value);\n }\n public get f4k(): number\n {\n return this.getGain(EqualizerFilter.F4K);\n }\n\n /**\n * Gain at 8 KHz frequencey.\n * @default 0\n */\n public set f8k(value: number)\n {\n this.setGain(EqualizerFilter.F8K, value);\n }\n public get f8k(): number\n {\n return this.getGain(EqualizerFilter.F8K);\n }\n\n /**\n * Gain at 16 KHz frequencey.\n * @default 0\n */\n public set f16k(value: number)\n {\n this.setGain(EqualizerFilter.F16K, value);\n }\n public get f16k(): number\n {\n return this.getGain(EqualizerFilter.F16K);\n }\n\n /** Reset all frequency bands to have gain of 0 */\n public reset(): void\n {\n this.bands.forEach((band: BiquadFilterNode) =>\n {\n WebAudioUtils.setParamValue(band.gain, 0);\n });\n }\n\n public destroy(): void\n {\n this.bands.forEach((band: BiquadFilterNode) =>\n {\n band.disconnect();\n });\n (this as any).bands = null;\n (this as any).bandsMap = null;\n }\n}\n\nexport { EqualizerFilter };\n"],"names":[],"mappings":"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"}