BASS - Equalizer
vecco
<font color="blue"><font size="4">Jak wykonać equalizer wykorzystując bibliotekę BASS?</span></span>
<font color="red">Opis wykonania equalizera 6. kanałowego.</span>
- 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;
- 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.
dobrze będzie od -10 do 10
jakie jest minimalne, a jakie maksymalne natężenie?
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);?