react-native-audio-api
Version:
react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification
57 lines (50 loc) • 1.85 kB
text/typescript
import AudioParam from './AudioParam.web';
import AudioNode from './AudioNode.web';
import BaseAudioContext from './BaseAudioContext.web';
import { InvalidAccessError } from '../errors';
import { BiquadFilterOptions } from '../types';
export default class BiquadFilterNode extends AudioNode {
readonly frequency: AudioParam;
readonly detune: AudioParam;
readonly Q: AudioParam;
readonly gain: AudioParam;
constructor(
context: BaseAudioContext,
biquadFilterOptions?: BiquadFilterOptions
) {
const biquadFilter = new globalThis.BiquadFilterNode(
context.context,
biquadFilterOptions
);
super(context, biquadFilter);
this.frequency = new AudioParam(biquadFilter.frequency, context);
this.detune = new AudioParam(biquadFilter.detune, context);
this.Q = new AudioParam(biquadFilter.Q, context);
this.gain = new AudioParam(biquadFilter.gain, context);
}
public get type(): BiquadFilterType {
return (this.node as globalThis.BiquadFilterNode).type;
}
public set type(value: BiquadFilterType) {
(this.node as globalThis.BiquadFilterNode).type = value;
}
public getFrequencyResponse(
frequencyArray: Float32Array<ArrayBuffer>,
magResponseOutput: Float32Array<ArrayBuffer>,
phaseResponseOutput: Float32Array<ArrayBuffer>
) {
if (
frequencyArray.length !== magResponseOutput.length ||
frequencyArray.length !== phaseResponseOutput.length
) {
throw new InvalidAccessError(
`The lengths of the arrays are not the same frequencyArray: ${frequencyArray.length}, magResponseOutput: ${magResponseOutput.length}, phaseResponseOutput: ${phaseResponseOutput.length}`
);
}
(this.node as globalThis.BiquadFilterNode).getFrequencyResponse(
frequencyArray,
magResponseOutput,
phaseResponseOutput
);
}
}