echogarden
Version:
An easy-to-use speech toolset. Includes tools for synthesis, recognition, alignment, speech translation, language detection, source separation and more.
44 lines (36 loc) • 1.16 kB
text/typescript
import { BiquadFilter, createHighpassFilter, createHighshelfFilter } from './BiquadFilter.js';
export class KWeightingFilter {
readonly highShelfFilter: BiquadFilter
readonly highPassFilter: BiquadFilter
constructor(
public readonly sampleRate: number,
public readonly useStandard44100Filters = false) {
if (useStandard44100Filters) {
// These parameter values are taken from ITU-R BS.1770-2
// and designed only for a 44100 Hz sample rate:
this.highShelfFilter = new BiquadFilter({
b0: 1.53512485958697,
b1: -2.69169618940638,
b2: 1.19839281085285,
a1: -1.69065929318241,
a2: 0.73248077421585,
})
this.highPassFilter = new BiquadFilter({
b0: 1.0,
b1: -2.0,
b2: 1.0,
a1: -1.99004745483398,
a2: 0.99007225036621,
})
} else {
this.highShelfFilter = createHighshelfFilter(sampleRate, 2000.0, 4.0)
this.highPassFilter = createHighpassFilter(sampleRate, 1.5, 0.01)
}
}
process(sample: number): number {
let outputSample = sample
outputSample = this.highShelfFilter.filter(outputSample)
outputSample = this.highPassFilter.filter(outputSample)
return outputSample
}
}