Programowanie w języku Delphi » Gotowce

BASS - Equalizer

  • 2008-05-06 13:40
  • 4 komentarze
  • 1070 odsłon
  • Oceń ten tekst jako pierwszy
Jak wykonać equalizer wykorzystując bibliotekę BASS?

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

vecco 2008-10-13 14:01

dobrze będzie od -10 do 10

JaskMar 2008-08-19 14:18

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

vecco 2008-02-28 17:37

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

milosz0010 2008-02-22 15:57

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