Problem z napisaniem korektora przy użyciu BASS.dll

0

Witam, mam korektor dźwięku zrobiony w Delphi za pomocą biblioteki BASS.DLL. Otóż moim problemem jest to, że gdy przechodzę do następnego/poprzedniego czy klikam przycisk stop, a później play to cały korektor muszę ustawiać od nowa mimo iż paski na korektorze nie zmieniają swojego położenia(ustawienia są takie same). Poniżej przedstawiam Wam drodzy dzy forumowicze kod , którego używam w trackbarze, którego używam do zmiany ustawień dźwięku

    BASS_FXGetParameters(fx[0], @p);
    p.fgain := TrackBar1.position;
    BASS_FXSetParameters(fx[0], @p);

a w przycisku np dalej mam takie coś:

       {tu jest equalizer dokladnie poczatek}
  fx[0] := BASS_ChannelSetFX(Chan, BASS_FX_DX8_PARAMEQ, 1);
  fx[1] := BASS_ChannelSetFX(Chan, BASS_FX_DX8_PARAMEQ, 1);
  fx[2] := BASS_ChannelSetFX(Chan, BASS_FX_DX8_PARAMEQ, 1);
  fx[3] := BASS_ChannelSetFX(Chan, BASS_FX_DX8_PARAMEQ, 1);
  fx[4] := BASS_ChannelSetFX(Chan, BASS_FX_DX8_PARAMEQ, 1);
  fx[5] := BASS_ChannelSetFX(Chan, BASS_FX_DX8_PARAMEQ, 1);
  fx[6] := BASS_ChannelSetFX(Chan, BASS_FX_DX8_PARAMEQ, 1);
  fx[7] := BASS_ChannelSetFX(Chan, BASS_FX_DX8_PARAMEQ, 1);
  fx[8] := BASS_ChannelSetFX(Chan, BASS_FX_DX8_PARAMEQ, 1);
  fx[9] := BASS_ChannelSetFX(Chan, BASS_FX_DX8_PARAMEQ, 1);
  fx[10] := BASS_ChannelSetFX(Chan, BASS_FX_DX8_REVERB, 1);
    // Set equalizer to flat and reverb off to start
     p.fGain := 0;
  p.fBandwidth := 18;
  p.fCenter := 80;
  BASS_FXSetParameters(fx[0], @p);
  p.fCenter := 170;
  BASS_FXSetParameters(fx[1], @p);
  p.fCenter := 310;
  BASS_FXSetParameters(fx[2], @p);
  p.fCenter := 600;
  BASS_FXSetParameters(fx[3], @p);
  p.fCenter := 1000;
  BASS_FXSetParameters(fx[4], @p);
  p.fCenter := 3000;
  BASS_FXSetParameters(fx[5], @p);
  p.fCenter := 7000;
  BASS_FXSetParameters(fx[6], @p);
  p.fCenter := 12000;
  BASS_FXSetParameters(fx[7], @p);
  p.fCenter := 14000;
  BASS_FXSetParameters(fx[8], @p);
  p.fCenter := 16000;
  BASS_FXSetParameters(fx[9], @p);

  BASS_FXGetParameters(fx[10], @pR);
  pR.fReverbMix := -96;
  pR.fReverbTime := 1500;
  pR.fHighFreqRTRatio := 0.1;
  BASS_FXSetParameters(fx[10], @pR);
  EQenable := True;
     {tu jest equalizer dokladnie koniec}
    // play both MOD and stream, it must be one of them! :)
    BASS_ChannelPlay(chan, False);
    pf.Visible:=true;



begin

  BASS_FXGetParameters(fx[0], @p);
  p.fgain := TrackBar1.position;
  BASS_FXSetParameters(fx[0], @p);

  BASS_FXGetParameters(fx[1], @p);
  p.fgain := TrackBar2.position;
  BASS_FXSetParameters(fx[1], @p);

  BASS_FXGetParameters(fx[2], @p);
  p.fgain := TrackBar3.position;
  BASS_FXSetParameters(fx[2], @p);

  BASS_FXGetParameters(fx[3], @p);
  p.fgain := TrackBar4.position;
  BASS_FXSetParameters(fx[3], @p);

  BASS_FXGetParameters(fx[4], @p);
  p.fgain := TrackBar5.position;
  BASS_FXSetParameters(fx[4], @p);

  BASS_FXGetParameters(fx[5], @p);
  p.fgain := TrackBar6.position;
  BASS_FXSetParameters(fx[5], @p);

  BASS_FXGetParameters(fx[6], @p);
  p.fgain := TrackBar7.position;
  BASS_FXSetParameters(fx[6], @p);

  BASS_FXGetParameters(fx[7], @p);
  p.fgain := TrackBar8.position;
  BASS_FXSetParameters(fx[7], @p);

  BASS_FXGetParameters(fx[8], @p);
  p.fgain := TrackBar9.position;
  BASS_FXSetParameters(fx[8], @p);

  BASS_FXGetParameters(fx[9], @p);
  p.fgain := TrackBar10.position;
  BASS_FXSetParameters(fx[9], @p);

głównie chodzi mi o drugą część kodu czyli

  BASS_FXGetParameters(fx[0], @p);
  p.fgain := TrackBar1.position;
  BASS_FXSetParameters(fx[0], @p);
 

itp.
Nie zapamiętuje mi tego jak są ustawione trackbary...
POMOCY PROSZĘ;(;(;(

0

Przeanalizuj sobie przykładowy kod w podkatalogu FXTest. Tam również po wczytaniu pliku i zmianie ustawień, a późnej wczytaniu innego lub tego samego pliku - mamy te same ustawienia. Wynika, to z tego, że parametry tam są ustawiane dopiero przy poruszaniu TrackBarami. Przy wczytywaniu są domyślne, a może inaczej nie można. Chociaż nie wiem. Bo nigdy pod BASS'em nie musiałem bawić się w Equalizery. Ale ja rozwiązał bym to tak, że dostosował bym kod z tego przykładu do swoich potrzeb. Czyli pozostawił zmianę parametrów w zdarzeniu OnChange dla tych trackbarów. Jednak po BASS_ChannelPlay wywołał te zdarzenia zmiany z poziomu kodu. Czyli dla tego akurat przykładu zrobił po prostu, tak jak pokazałem poniżej. Ale moze coś lepszego doradzą Tobie tutaj bardziej doświadczeni w zabawie z bass.dll. Ja ostatnio piszę jedynie player modułów, dostosowany pod swoje preferencje i nie przewiduje tam konieczności zabawy z equalizerem, bo dla mnie to zbędność :/ Także ekspertem nie jestem. Ewentualnie zawsze możesz spróbowac uzyskać dodatkową pomoc na oficjalnym forrum supportu w języku angielskim.

  TrackBar1.OnChange(TrackBar1);
  TrackBar2.OnChange(TrackBar2);
  TrackBar3.OnChange(TrackBar3);
  TrackBar4.OnChange(TrackBar4);
0

Oki to chwilka, przetestuję i zobaczę czy działa

0

Niestety nie działa;(;(;(;(

Może podam adres do pobrania tego odtwarzacza?

0

W tym przykładzie działa na pewno. Podkreślam po raz 86564844. Nie podaje niesprawdzonych rozwiązań w swoich postach. Chyba, że napisalem inaczej. A nie wiem co masz u siebie w OnChange. I nie wiem o jaki odtwarzacz Tobie chodzi. Mój jest w trakcie tworzenia i nie wiem czy później udostępnie. A jeżeli już to tylko w formie exeka raczej. Miałem na myśli przykład z podkatalogu "delphi\fxtest" w archiwum z pakietem dostępnym wraz z windowsową wersją bass.dll - dostepnym na: http://www.un4seen.com/download.php?bass24

0

Kolego właśnie z tego przykładu przed chwilą testowałem to. A w OnChange mam

  BASS_FXGetParameters(fx[3], @p);
    p.fgain := TrackBar3.position;
    BASS_FXSetParameters(fx[3], @p); 
0

No to masz inny kod niż w oryginalnym przykładzie. Miałeś sprawdzić na przykładzie i później dostosować jego kod do siebie. Ja sprawdziłem i działa. Nie wiem jakiego przedziału oczekuje funkcja BASS_FXSetParameters, ale w kodzie przykładowym jest zupełnie inaczej. Więcej nie jestem w stanie Tobie pomóc, bo uparcie robisz po swojemu zamiast najpierw przeanalizować przykład i operować na jego kodzie. Jak pisałem, nie podaje niesprawdzonych rozwiązań. Chyba, że o tym wspomnę.

procedure TForm1.TrackBar1Change(Sender : TObject);
begin
  BASS_FXGetParameters(fx[1], @p);
  p.fgain := 15 - TrackBar1.position;
  BASS_FXSetParameters(fx[1], @p);
end;

procedure TForm1.TrackBar2Change(Sender : TObject);
begin
  BASS_FXGetParameters(fx[2], @p);
  p.fgain := 15 - TrackBar2.position;
  BASS_FXSetParameters(fx[2], @p);
end;

procedure TForm1.TrackBar3Change(Sender : TObject);
begin
  BASS_FXGetParameters(fx[3], @p);
  p.fgain := 15 - TrackBar3.position;
  BASS_FXSetParameters(fx[3], @p);
end;

procedure TForm1.TrackBar4Change(Sender : TObject);
var
  v : integer;
begin
  v := TrackBar4.position;
  BASS_FXGetParameters(fx[4], @pR);
  // give exponential quality to trackbar as Bass more sensitive near 0
  pR.fReverbMix := -0.012 * v * v * v; // gives -96 when bar at 20
  BASS_FXSetParameters(fx[4], @pR);
  Label5.Caption := inttostr(20 - TrackBar4.position);
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1