Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Equalizer mit Bass will nicht.. (https://www.delphipraxis.net/124449-equalizer-mit-bass-will-nicht.html)

EWeiss 19. Nov 2008 04:42


Equalizer mit Bass will nicht..
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab ja schon viel mit Bass gemacht aber der EQ will einfach nicht.

Delphi-Quellcode:
type
  BASS_FXPARAMEQ = record
    fCenter: FLOAT;
    fBandwidth: FLOAT;
    fGain: FLOAT;
  end;

  TBand = Record
    par: BASS_FXPARAMEQ;
    hnd: HFX;          
  end;
BassInit
Delphi-Quellcode:
function BassInit: BOOL;
begin

  if gnBassInitDone = False then
  begin
    BASS_SetConfig(BASS_CONFIG_FLOATDSP, 1);
    gnBassInitDone := BASS_Init(1, 44100, 0, MainWindow(0), nil);

    if not BASS_RecordInit(0) then
    begin
      BASS_RecordFree;
      BASS_Free();
      halt;
    end;

    BASS_GetInfo(BassInfoParam);
    if BassInfoParam.dsver >= 8 then
      FDX8EffectReady := true;
  end;

  Result := gnBassInitDone;

end;
Taste ONOFF
Delphi-Quellcode:
 
         ID_ONOFF:
          begin
            if not EQenable then
              SetupEqualizer
            else
            BassResetEQ(gnAudioChannel);
Delphi-Quellcode:
procedure SetupEqualizer;
var
  K: Integer;
  nChecked: Boolean;
begin
  With SkinEngine do
  begin
    nChecked := GetCheckButtonStatus(GetMainItem(ID_ONOFF));
    for K := low(EQBand) to high(EQBand) do
      BassInitEQ(gnAudioChannel, K,
        GetTrackValue(GetMainItem(K + ID_EQU_FIRST)), integer(nChecked));
  end;
end;
Delphi-Quellcode:
procedure BassInitEQ(UseChannel: HSTREAM; Item: Integer; Percent: float;
  Checked:Integer);
begin

  if not FDX8EffectReady then
    exit;

  if UseChannel <> 0 then
  begin
    if Checked = 0 then
    begin
      if EQBand[Item].hnd <> 0 then
      begin
        BASS_ChannelRemoveFX(UseChannel, EQBand[Item].hnd);
        EQBand[Item].hnd := 0;
      end else
      begin
          EQBand[Item].hnd := BASS_ChannelSetFX(UseChannel, BASS_FX_DX8_PARAMEQ, 1);
          EQBand[Item].par.fBandwidth := 18;
          EQBand[Item].par.fCenter := Float(PAnsiChar(ParseThis('80,170,310,600,1000,3000,6000,10000,12000,14000', ',' ,Item, 1)));
          EQBand[Item].par.fGain := 0;

          BASS_FXSetParameters(EQBand[Item].hnd, @EQBand[Item].par);
      end;
    end;
  end;
  EQenable := True;

end;
Delphi-Quellcode:
procedure BassResetEQ(UseChannel: HSTREAM);
var
  i: integer;
begin
  if not FDX8EffectReady then
    exit;
 
  for i := low(EQBand) to high(EQBand) do
  begin
    BASS_ChannelRemoveFX(UseChannel, EQBand[i].hnd);
  end;

  EQEnable := False;

end;
Delphi-Quellcode:
procedure BassUpdateEQ(UseChannel: HSTREAM; Item: Integer; Percent: Integer;
  Checked:Integer);
var
  gain: Integer;
  i: Integer;
begin
  if not FDX8EffectReady then
    exit;

  gain := trunc(Percent / 3.3333) - 15;

  for i := low(EQBand) to high(EQBand) do
    if i <> Item then
      EQBand[Item].par.fgain := 0;

  if UseChannel <> 0 then
  begin
    BASS_FXGetParameters(EQBand[Item-1].hnd, @EQBand[Item-1].par);
    EQBand[Item-1].par.fgain := gain;
    BASS_FXSetParameters(EQBand[Item-1].hnd, @EQBand[Item-1].par);
  end;

end;
Maximale Value = 100
umgerechnet auf MinValue -15, MaxValue 15
gain := trunc(Percent / 3.3333) - 15;

kann machen was ich will der Ton ändert sich nicht.
Woran kann das liegen ?
Sieht jemand einen Fehler ?

Also Musik läuft :)

gruss Emil

HenKst 19. Nov 2008 13:42

Re: Equalizer mit Bass will nicht..
 
Hiho

Mir ist eine kleine Sache aufgefallen(der Rest des Codes war mir zu hoch^^)

Delphi-Quellcode:
          begin
            if not EQenable then
              SetupEqualizer
            else
            BassResetEQ(gnAudioChannel);
Sicher das das sorum richtig ist?
Für mich wärs andersrum eher nachvollziehbar, wenn also das Setup dem Enable folgt, und der Reset dem Disable ;)

GreeZ HenKst

BullsEye 19. Nov 2008 13:46

Re: Equalizer mit Bass will nicht..
 
Sry, ich hab gerade nicht die Zeit mich da wieder so ganz reinzuarbeiten, aber vllt hilft dir das ja ein wenig weiter:

Delphi-Quellcode:
  if chkbEqualizer.Checked then
    frmBullPlayerMain.BassPlayer1.UpdateEQ(
        -1 * Trackbar1.Position,
        -1 * Trackbar2.Position,
        -1 * Trackbar3.Position,
        -1 * Trackbar4.Position,
        -1 * Trackbar5.Position,
        -1 * Trackbar6.Position,
        -1 * Trackbar7.Position,
        -1 * Trackbar8.Position,
        -1 * Trackbar9.Position,
        -1 * Trackbar10.Position);
  if not ComboEQ then
  begin
    Equalizer[cmbEQ.ItemIndex].Name := cmbEQ.Text;
    Equalizer[cmbEQ.ItemIndex].T1 := Trackbar1.Position;
    Equalizer[cmbEQ.ItemIndex].T2 := Trackbar2.Position;
    Equalizer[cmbEQ.ItemIndex].T3 := Trackbar3.Position;
    Equalizer[cmbEQ.ItemIndex].T4 := Trackbar4.Position;
    Equalizer[cmbEQ.ItemIndex].T5 := Trackbar5.Position;
    Equalizer[cmbEQ.ItemIndex].T6 := Trackbar6.Position;
    Equalizer[cmbEQ.ItemIndex].T7 := Trackbar7.Position;
    Equalizer[cmbEQ.ItemIndex].T8 := Trackbar8.Position;
    Equalizer[cmbEQ.ItemIndex].T9 := Trackbar9.Position;
    Equalizer[cmbEQ.ItemIndex].T10 := Trackbar10.Position;
  end;

EWeiss 19. Nov 2008 19:18

Re: Equalizer mit Bass will nicht..
 
Zitat:

Sry, ich hab gerade nicht die Zeit mich da wieder so ganz reinzuarbeiten, aber vllt hilft dir das ja ein wenig weiter:
Nein ich verwende Nonvcl keine gewöhnlichen Trackbars.
Und die von dir gezeigten Values gebe ich ja schon weiter wenn auch in einer schleife.

Zitat:

Sicher das das sorum richtig ist?
Warum ?
Wenn der Equalizer noch nicht initialiisert ist oder der knopf nicht eingeschaltet ist
wird das SetupEqualizer aufgrufen.
Andernfalls gelöscht (ausgeschaltet)

gruss Emil

omata 19. Nov 2008 22:22

Re: Equalizer mit Bass will nicht..
 
Was ist EQBand?
Wo/Wann wird EQBand initialisiert?

EWeiss 19. Nov 2008 23:48

Re: Equalizer mit Bass will nicht..
 
Zitat:

Zitat von omata
Was ist EQBand?
Wo/Wann wird EQBand initialisiert?

Delphi-Quellcode:
  TBand = Record
    par: BASS_FXPARAMEQ; // band of eq
    hnd: HFX;           // band handle
  end;

EQBand: array[0..9] of TBand;
Initialisiert mit SetupEqualizer; > BassInitEQ

funktioniert nun ...
Das problem ist das ich die Bänder aus einer anderen Funktion in einer Schleife übergebe
das mag Bass anscheinend nicht.

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz