Ответ 1
Что вы ищете, это фильтр band pass.
Полосовой фильтр (также полосовой фильтр, BPF) - это устройство, которое проходит частоты в пределах определенного диапазона и отклоняет (ослабляет) частоты вне этого диапазона. https://en.wikipedia.org/wiki/Band-pass_filter
И нам повезло, веб-аудио api предоставляет его через BiquadFilterNode.
https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode
Итак, на основе предоставленного демо-кода, применить фильтр полосовых частот в частотном диапазоне 400 Гц к аудиоплееру html.
Элемент аудио html должен быть создан js, а затем вставлен в DOM, или он не будет работать с веб-аудио api.
<div id="hello"></div>
<script>
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
// Create new player
var a = document.createElement("audio");
// Give a source song
a.src = "vorbis.ogg";
// Show the controls
a.setAttribute("controls", "");
// Append to the DOM
hello.appendChild(a);
// Player now ready for the web audio api
var mediaElement = a;
//set up the different audio nodes we will use for the app
var gainNode = audioCtx.createGain();
var biquadFilter = audioCtx.createBiquadFilter();
// connect the nodes together
source = audioCtx.createMediaElementSource(mediaElement);
source.connect(biquadFilter);
biquadFilter.connect(gainNode);
gainNode.connect(audioCtx.destination);
// Manipulate the Biquad filter
biquadFilter.type = "bandpass";
biquadFilter.frequency.value = 400;
biquadFilter.gain.value = 25;
</script>
Значение biquadFilter.frequency.value представляет собой центр частот диапазона. Диапазон расширяется с коэффициентом усиления.
Эти фильтры могут быть скованы так же, как этот пример, с помощью другого GainNode, см. https://developer.mozilla.org/en-US/docs/Web/API/GainNode p >
Аналогичным образом, используя два фильтра, нижний и верхний пределы, в диапазоне от 1000 до 1500 Гц.
<div id="hello"></div> <script> var audioCtx = new (window.AudioContext)() var a = document.createElement("audio") a.src = "vorbis.ogg" a.setAttribute("controls", "") hello.appendChild(a) var mediaElement = a var gainNode = audioCtx.createGain() var lowpass = audioCtx.createBiquadFilter() var highpass = audioCtx.createBiquadFilter() source = audioCtx.createMediaElementSource(mediaElement) source.connect(lowpass) lowpass.connect(highpass) highpass.connect(gainNode) gainNode.connect(audioCtx.destination) lowpass.type = "lowpass" lowpass.frequency.value = 1000 lowpass.gain.value = -1 highpass.type = "highpass" highpass.frequency.value = 1500 highpass.gain.value = -1 </script>