-
Notifications
You must be signed in to change notification settings - Fork 0
/
lowpass-filter-plugin.js
53 lines (45 loc) · 1.13 KB
/
lowpass-filter-plugin.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
* LOWPASS FILTER PLUGIN for Volca Sampler
*
* Created by Ben Wiley 2023
*
* MIT License:
* https://github.com/benwiley4000/volca-sampler-plugins/blob/master/LICENSE
*/
samplePlugin.params = {
cutoffFrequency: {
label: "Cutoff frequency (Hz)",
value: 1000,
min: 30,
max: 20000,
},
q: {
label: "Q",
value: 3,
min: 0,
max: 25,
},
};
/**
* @param {AudioBuffer} audioBuffer
*/
function samplePlugin(audioBuffer) {
const frequency = samplePlugin.params.cutoffFrequency.value;
const q = samplePlugin.params.q.value;
const { numberOfChannels, sampleRate, length } = audioBuffer;
const audioContext = new OfflineAudioContext({
numberOfChannels,
sampleRate,
length,
});
const bufferSource = audioContext.createBufferSource();
bufferSource.buffer = audioBuffer;
const biquadFilter = audioContext.createBiquadFilter();
biquadFilter.frequency.value = frequency;
biquadFilter.Q.value = q;
biquadFilter.type = "lowpass";
bufferSource.connect(biquadFilter);
biquadFilter.connect(audioContext.destination);
bufferSource.start();
return audioContext.startRendering();
}