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>

  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;

  1. 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 komentarzy

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);?