AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Equalizer rauschen und verzerren
Thema durchsuchen
Ansicht
Themen-Optionen

Equalizer rauschen und verzerren

Ein Thema von maluprog · begonnen am 1. Jun 2010 · letzter Beitrag vom 1. Jun 2010
Antwort Antwort
maluprog

Registriert seit: 20. Okt 2009
Ort: Wildau
19 Beiträge
 
Delphi 6 Professional
 
#1

Equalizer rauschen und verzerren

  Alt 1. Jun 2010, 20:00
hallo,

brauche mal hilfe, denn der eigene mp3-player funktioniert sehr gut, jedoch wenn ich den equalizer aktiviere, erlogt ein völliges verzerren und rauschen.
hier den code zum programm, irgend etwas muss hier schieflaufen. arbeite mit bass und bass_fx.dll


Delphi-Quellcode:
//*********Equalizer********
//**********Beginn**********


procedure TFmenue.SetDSP_EQ(fGain, fBandwidth, fQ, fCenter_Bass, fCenter_Mid, fCenter_Treble: FLOAT);
begin
  
  fxEQ := BASS_ChannelSetFX(chan, BASS_FX_BFX_PEAKEQ, 1); // fCenter_Mid, fCenter_Treble nicht gesetzt, bzw. nicht benutzt!

  eq.fGain := fGain;
  eq.fQ := fQ;
  eq.fBandwidth := fBandwidth;
  eq.lChannel := BASS_BFX_CHANALL;

  // create 1st band for bass
  eq.lBand := 0;
  eq.fCenter := fCenter_Bass;
  BASS_FXSetParameters(fxEQ, @eq);

  eq.lBand := 1;
  eq.fCenter := fCenter_Bass;
  BASS_FXSetParameters(fxEQ, @eq);

  eq.lBand := 2;
  eq.fCenter := fCenter_Bass;
  BASS_FXSetParameters(fxEQ, @eq);

  eq.lBand := 3;
  eq.fCenter := fCenter_Bass;
  BASS_FXSetParameters(fxEQ, @eq);

  eq.lBand := 4;
  eq.fCenter := fCenter_Bass;
  BASS_FXSetParameters(fxEQ, @eq);

  eq.lBand := 5;
  eq.fCenter := fCenter_Bass;
  BASS_FXSetParameters(fxEQ, @eq);

  eq.lBand := 6;
  eq.fCenter := fCenter_Bass;
  BASS_FXSetParameters(fxEQ, @eq);

  eq.lBand := 7;
  eq.fCenter := fCenter_Bass;
  BASS_FXSetParameters(fxEQ, @eq);

  eq.lBand := 8;
  eq.fCenter := fCenter_Bass;
  BASS_FXSetParameters(fxEQ, @eq);

  eq.lBand := 9;
  eq.fCenter := fCenter_Bass;
  BASS_FXSetParameters(fxEQ, @eq);

  eq.lBand := 10;
  eq.fCenter := fCenter_Bass;
  BASS_FXSetParameters(fxEQ, @eq);

  // update dsp eq
  UpdateFX(0, vsEQBASS80.position);
  UpdateFX(1, vsEQBASS125.position);
  UpdateFX(2, vsEQBASS200.position);
  UpdateFX(3, vsEQBASS320.position);
  UpdateFX(4, vsEQBASS600.position);
  UpdateFX(5, vsEQBASS1000.position);
  UpdateFX(6, vsEQBASS3000.position);
  UpdateFX(7, vsEQBASS6000.position);
  UpdateFX(8, vsEQBASS10000.position);
  UpdateFX(9, vsEQBASS12000.position);
  UpdateFX(10, vsEQBASS14000.position);

end;

procedure TFmenue.UpdateFX(band, pos: integer);
begin
  eq.lBand := band;
  BASS_FXGetParameters(fxEQ, @eq);
    eq.fGain := 10 - pos;
  BASS_FXSetParameters(fxEQ, @eq);
End;


procedure TFmenue.chkEqualizerClick(Sender: TObject);
begin
        If chkEqualizer.checked then begin
        fxEQ := BASS_ChannelSetFX(Chan, BASS_FX_BFX_PEAKEQ, 1);

        with eq do begin
         fBandwidth := 2.5;
         FQ := 0;
         fGain := 0;
         lChannel := BASS_BFX_CHANALL;

         // create 1st band for bass
         eq.lBand := 0;
         eq.fCenter := 80;
         BASS_FXSetParameters(fxEQ, @eq);

         eq.lBand := 1;
         eq.fCenter := 125;
         BASS_FXSetParameters(fxEQ, @eq);

         eq.lBand := 2;
         eq.fCenter := 200;
         BASS_FXSetParameters(fxEQ, @eq);

         eq.lBand := 3;
         eq.fCenter := 320;
         BASS_FXSetParameters(fxEQ, @eq);

         eq.lBand := 4;
         eq.fCenter := 600;
         BASS_FXSetParameters(fxEQ, @eq);

         eq.lBand := 5;
         eq.fCenter := 1000;
         BASS_FXSetParameters(fxEQ, @eq);

         eq.lBand := 6;
         eq.fCenter := 3000;
         BASS_FXSetParameters(fxEQ, @eq);

         eq.lBand := 7;
         eq.fCenter := 6000;
         BASS_FXSetParameters(fxEQ, @eq);

         eq.lBand := 8;
         eq.fCenter := 10000;
         BASS_FXSetParameters(fxEQ, @eq);

         eq.lBand := 9;
         eq.fCenter := 12000;
         BASS_FXSetParameters(fxEQ, @eq);

         eq.lBand := 10;
         eq.fCenter := 14000;
         BASS_FXSetParameters(fxEQ, @eq);

        end;
        // update dsp eq
        vsEQBASS80.OnChange(Self);
        vsEQBASS125.OnChange(Self);
        vsEQBASS200.OnChange(Self);
        vsEQBASS320.OnChange(Self);
        vsEQBASS600.OnChange(Self);
        vsEQBASS1000.OnChange(Self);
        vsEQBASS3000.OnChange(Self);
        vsEQBASS6000.OnChange(Self);
        vsEQBASS10000.OnChange(Self);
        vsEQBASS12000.OnChange(Self);
        vsEQBASS14000.OnChange(Self);
        end
        else
         BASS_ChannelRemoveFX(Chan, fxEQ);
end;

procedure TFmenue.UpdateEQ(b, pos: integer);
var i: integer;
begin
        eq.lBand := b; // get b band values
        i := 10;
        BASS_FXGetParameters(fxEQ, @eq);
        eq.fGain := i - pos;
        BASS_FXSetParameters(fxEQ, @eq);
end;

procedure TFmenue.vsEQBASS80Change(Sender: TObject);
begin
        UpdateEQ(0, vsEQBASS80.Position);
end;

procedure TFmenue.vsEQBASS125Change(Sender: TObject);
begin
        UpdateEQ(1, vsEQBASS125.Position);
end;

procedure TFmenue.vsEQBASS200Change(Sender: TObject);
begin
        UpdateEQ(2, vsEQBASS200.Position);
end;

procedure TFmenue.vsEQBASS320Change(Sender: TObject);
begin
        UpdateEQ(3, vsEQBASS320.Position);
end;

procedure TFmenue.vsEQBASS600Change(Sender: TObject);
begin
        UpdateEQ(4, vsEQBASS600.Position);
end;

procedure TFmenue.vsEQBASS1000Change(Sender: TObject);
begin
        UpdateEQ(5, vsEQBASS1000.Position);
end;

procedure TFmenue.vsEQBASS3000Change(Sender: TObject);
begin
        UpdateEQ(6, vsEQBASS3000.Position);
end;

procedure TFmenue.vsEQBASS6000Change(Sender: TObject);
begin
        UpdateEQ(7, vsEQBASS6000.Position);
end;

procedure TFmenue.vsEQBASS10000Change(Sender: TObject);
begin
        UpdateEQ(8, vsEQBASS10000.Position);
end;

procedure TFmenue.vsEQBASS12000Change(Sender: TObject);
begin
        UpdateEQ(9, vsEQBASS12000.Position);
end;

procedure TFmenue.vsEQBASS14000Change(Sender: TObject);
begin
        UpdateEQ(10, vsEQBASS14000.Position);
end;

//*********************Ende*******************************

wer kann helfen
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#2

Re: Equalizer rauschen und verzerren

  Alt 1. Jun 2010, 20:11
Ohne mich mit der Materie auszukennen, vermute ich den Fehler hier:
Delphi-Quellcode:
procedure TFmenue.UpdateEQ(b, pos: integer);
var i: integer;
begin
        eq.lBand := b; // get b band values
        i := 10;
        BASS_FXGetParameters(fxEQ, @eq);
        eq.fGain := i - pos;
        BASS_FXSetParameters(fxEQ, @eq);
end;
Debugge das mal und ueberpruefe, was fuer ein Gain-Wert benutzt wird.
Wenn der Gain zu hoch ist, verzerrts natuerlich nur noch.
Manuel
  Mit Zitat antworten Zitat
maluprog

Registriert seit: 20. Okt 2009
Ort: Wildau
19 Beiträge
 
Delphi 6 Professional
 
#3

Re: Equalizer rauschen und verzerren

  Alt 1. Jun 2010, 20:35
hallo,

der wert war wirklich zu hoch, habe es mit der variablen i unter 2 bishin 0 probiert. der tipp war schon sehr gut, das rauschen ist so gut wie weg, noch ein wenig zerren im hintergrund. muss ich vielleicht im nachfolgenden den wert auch runtersetzen?
Delphi-Quellcode:
procedure TFmenue.UpdateFX(band, pos: integer);
begin
  eq.lBand := band; // get values of the selected band
  BASS_FXGetParameters(fxEQ, @eq);
    eq.fGain := 10 - pos;
  BASS_FXSetParameters(fxEQ, @eq);
end;
wäre es ratsam hier auch eine variable i zu setzen, wie bei "UpdateEQ"

bitte noch mal um rückantwort, danke
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#4

Re: Equalizer rauschen und verzerren

  Alt 1. Jun 2010, 20:52
Vermutlich schon (auch mal mit Werten < 10 probiert?). Aber die Variable ist ja im Moment eh ueberfluessig, da du diese eh nur statisch nutzt.
Fuer weitere Details muesste ich mir erstmal den BASS.dll-Kram anschauen (speziell was die Gain-Werte betrifft).
Manuel
  Mit Zitat antworten Zitat
maluprog

Registriert seit: 20. Okt 2009
Ort: Wildau
19 Beiträge
 
Delphi 6 Professional
 
#5

Re: Equalizer rauschen und verzerren

  Alt 1. Jun 2010, 21:06
Hallo,

habe zwischendurch zu diesem problem bei werten < 10 ... 0 keine verbesserungen im sound festgestellt. wozu brauche ich überhaupt diese beiden updates, d.h. "UpdateEQ" und "UpdateFX" ? habe diese codes auch aus mehreren foren zu diesem thema nur übernommen aber so richtig nicht verstanden ! normalerweise kann ich doch ...FX löschen, oder laufe ich gefahr, dass die bass_fx.dll nicht mehr wirksam wird.

kann ich darauf eine antwort finden bis dahin danke,schönen abend, der 1. tipp war schon ein schritt in die richtige richtung. als bald bis morgen, muss jetzt ein anderes programm fertigstellen.

malu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:57 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