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;
```delphi
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ć:
```delphi
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

no tak...
var
Channel : Cardinal;
...
Channel := BASS_StreamCreateFile(False, pChar(plik_mp3), 0, 0, 0);
//kod equalizera
Bass_ChannelPlay(Channel, False);

dobrze będzie od -10 do 10

jakie jest minimalne, a jakie maksymalne natężenie?

I jak to poznije odtworzyc? Bass_ChannelPlay(channel, False);?