I zostały rozglądać się za tworzenie korektora dźwięku za pomocą interfejsu API Web Audio: http://webaudio.github.io/web-audio-api/Web API dźwięku korektor
Znalazłem wiele wątków dotyczących tworzenia wizualizera, ale to oczywiście nie to, co chcę zrobić . Po prostu chcę mieć możliwość zmiany dźwięku za pomocą suwaków częstotliwości. Zauważyłem, że BiquadFilter powinien wykonać pracę, ale nie mogę uzyskać dobrego wyniku. Dźwięk zmienia się konsekwentnie, gdy zmieniam jakąkolwiek wartość częstotliwości, ale po prostu obniża jakość dźwięku, a jednocześnie powinien zmieniać częstotliwości.
I najpierw załadować dźwięk:
Audio.prototype.init = function(callback){
var $this = this;
this.gainScale = d3.scale.linear().domain([0,1]).range([-40,40]);
this.context = new AudioContext();
this.loadSounds(function(){
$this.loadSound(0);
$this.play();
callback.call();
});
};
Wszystko działa dobrze, dźwięk odtwarzany, gdy gotowe.
Mam 10 suwaków dla częstotliwości [32,64,125,250,500,1000,2000,4000,8000,16000]. Dla każdego suwaka utworzyć filtr i podłączyć go do źródła, jak opisano tutaj: Creating a 10-Band Equalizer Using Web Audio API:
Audio.prototype.createFilter = function(index,frequency){
if(this.filters == undefined) this.filters = [];
var filter = this.context.createBiquadFilter();
filter = this.context.createBiquadFilter();
filter.type = 2;
filter.frequency.value = frequency;
// Connect source to filter, filter to destination.
this.source.connect(filter);
filter.connect(this.context.destination);
this.filters[index] = filter;
};
Wreszcie, kiedy zmienić wartość suwaka zaktualizować filtr:
Audio.prototype.updateFilter = function(index,newVal){
this.filters[index].frequency.gain = this.gainScale(newVal);
};
NB: Moja funkcja to.gainScale przyjmuje jako wartość wejściową wartość [0,1] i zwraca wartość w [-4040], aby ustawić wzmocnienie między -40 a 40 dla każdej częstotliwości.
Doceniam każdą pomoc!
Witam, bardzo dziękuję, naprawił większość moich problemów i zaczął brzmieć jak coś nie tak złego. Zasadniczo właśnie teraz tworzę filtry bez typu i bez ich łączenia. Następnie podaję typ według indeksu filtra (0: półka, 0 Charles
A co z łączeniem filtra półkowego i górnoprzepustowego dla każdej częstotliwości? –
Na przykład, jeśli chcesz zmodyfikować 250 herców, dodaj dolną klapę w 350, aby wyciąć wszystko powyżej 350 i drugą górną półkę w 150, aby wyciąć wszystko poniżej 150. Połącz oba wzmocnienia i zmodyfikuj ich wartości naraz? Czy myślisz, że to zadziała? –