BASS - Equalizer
Jak wykonać equalizer wykorzystując bibliotekę BASS?
Opis wykonania equalizera 6. kanałowego.
1. Deklaracja klasy:
3. Użycie
Częstotliwości, które warto użyć:
PS. Zakładam, że implementacja biblioteki, utworzenie kanału i rozpoczęcie odtwarzania zostało wcześniej napisane przez użytkownika.
Opis wykonania equalizera 6. kanałowego.
1. Deklaracja klasy:
type TEq = class p: BASS_FXPARAMEQ; handle : Cardinal; channels: array of integer; constructor Create(bass : Cardinal; count, bandwidth, gain : integer); procedure CreateChannels(values : array of integer); procedure ChangeGain(channel, value : integer); end;
constructor TEq.Create(bass : Cardinal; count, bandwidth, gain : integer); begin handle := bass; setlength(channels, count); p.fBandwidth := bandwidth; p.fGain := gain; end; procedure TEq.ChangeGain(channel, value : integer); begin if(channel >= 0) then begin BASS_FXGetParameters(channels[channel], @p); p.fgain := value; BASS_FXSetParameters(channels[channel], @p); end else raise exception.Create('Numer kanalu jest nieprawidłowy.'); end; procedure TEq.CreateChannels(values : array of integer); var i : integer; begin if (length(channels) = length(values)) then begin for i := 1 to length(channels) do begin channels[i] := BASS_ChannelSetFX(handle, BASS_FX_PARAMEQ, 1); p.fCenter := values[i]; BASS_FXSetParameters(channels[i], @p); end; end else begin raise Exception.Create('Ilość kanałów nie jest odpowiednia do zestawu częstotliwości.'); end; end;
3. Użycie
const freq : array[1..3] of integer = (100, 250, 8000); //liczby w nawiasach odpowiadają częstotliwości kanału (Hz) e : TEq; channel : Cardinal // lub DWORD begin //Create(uchwyt, ilość_kanałów, pasmo_częstotliwości, gain(0)); e := TEq.Create(channel, length(freq), 18, 0); with e do begin //CreateChannels(tablica_częstotliwości); CreateChannels(freq); //Zmiana natężenia //ChangeGain(nr_kanału, natężenie); ChangeGain(1, 2); ChangeGain(2, -10); ChangeGain(3, 5); end; end;
Częstotliwości, które warto użyć:
31Hz 62Hz 125Hz 250Hz 500Hz 1KHz 2KHz 4KHz 8KHz 12KHz 16KHz 20KHz
PS. Zakładam, że implementacja biblioteki, utworzenie kanału i rozpoczęcie odtwarzania zostało wcześniej napisane przez użytkownika.
4 komentarze
no tak...
var
Channel : Cardinal;
...
Channel := BASS_StreamCreateFile(False, pChar(plik_mp3), 0, 0, 0);
//kod equalizera
Bass_ChannelPlay(Channel, False);
I jak to poznije odtworzyc? Bass_ChannelPlay(channel, False);?
dobrze będzie od -10 do 10