Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   equalizer mit der bass.dll (https://www.delphipraxis.net/50083-equalizer-mit-der-bass-dll.html)

Dr.No 20. Jul 2005 13:56


equalizer mit der bass.dll
 
Hallo, ich mach gerade nen mediaplayer mit der bass.dll.
hab das teil jetzt auch zum laufen bekommen, und wollte nen equalizer einbauen. Ich weiß, gleich will mir wieder einer nen link andrehen, aber ich hab auch schon selbs gesucht, und nicht wiklich eine gute beschreibung gefunden. und ich kenn mir auch noch nicht gut mit der bass dll aus, deshalb brauch ich da was ausführlicheres. Also? kann mir jamand helfen?

turboPASCAL 20. Jul 2005 14:07

Re: equalizer mit der bass.dll
 
Hast Du schon einmal bei Demo Samples der Bass.dll reingeschaut ?

...bass21\Delphi\fxtest\FXTest.dpr <- Ein einfaches Beispiel für einen EQ

Dr.No 20. Jul 2005 16:11

Re: equalizer mit der bass.dll
 
ja, gerade eben, es tut zwar, aber richtig verstanden hab ichs net

warum braucht man das?

Delphi-Quellcode:
    fx[1] := BASS_ChannelSetFX(chan, BASS_FX_PARAMEQ, 1);
    fx[2] := BASS_ChannelSetFX(chan, BASS_FX_PARAMEQ, 1);
    fx[3] := BASS_ChannelSetFX(chan, BASS_FX_PARAMEQ, 1);
und für was ist
fBandwidth := 18;
da?

[edit=alcaeus]delphi-Tags Mfg, alcaeus[/edit]

turboPASCAL 20. Jul 2005 17:01

Re: equalizer mit der bass.dll
 
Delphi-Quellcode:
... := BASS_ChannelSetFX(chan, BASS_FX_PARAMEQ, 1);
Damit wird der Effekt auf/zum dem aktuellem Stream ( Channel ) gesetzt, mit der Priorität 1.
Also den aktuellen Stream den EQ- Effekt zuweisen.
Mann kann somit auch einzelnen Kanälen verschiedene Effekte zuweisen.

z.B.:
- MP3-Kanal bekommt einen Halleffect,
- Musick–Kanal einen Chorus,
…usw.

fBandwidth - da wird irgend eine Bandbreite gesetzt (in Semitones) 1 bis 36.

Semitones: kann ich jetzt nicht genau sagen (¿ Durchschnittliche Töne ?)

Dr.No 20. Jul 2005 20:00

Re: equalizer mit der bass.dll
 
ok, danke.

Kann mir jezt noch jemand sagen, wie ich mit
BASS_ChannelGetData
ne visualisierung machen kann.
es soll nur was einfaches sein!
und gibts vieleicht ein gutes tutorial auf deutsch zu der bass.dll?

Dr.No 20. Jul 2005 20:37

Re: equalizer mit der bass.dll
 
Delphi-Quellcode:
image1.Picture.LoadFromFile('J:\mediaplayer\bass\a.bmp');
  Bass_ChannelGetData(stream, @data, BASS_DATA_FFT512);
  for i := 1 to 256 do
  begin
 image1.Canvas.LineTo(i, strtoint(formatfloat('0',450-data[i]*2000)) );

  end;
  end;
isch das schon eine?
also ausshen tuts schon wie eine!

[edit=alcaeus]Delphi-Tags Mfg, alcaeus[/edit]

turboPASCAL 20. Jul 2005 22:31

Re: equalizer mit der bass.dll
 
Ich würde es eher so machen (Spectrumanalyzer) :

Delphi-Quellcode:

var
  data : array[1..255] of Single;
  i : byte;
begin
  Bass_ChannelGetData(stream, @data, BASS_DATA_FFT512);

  Paintbox1.Canvas.FillRect(Paintbox1.ClientRect);
  Paintbox1.canvas.Lineto(0, Paintbox1.height);
   for i := 0 to 255 do
   begin
     Paintbox1.Canvas.Lineto(i, Paintbox1.Height - round( Data[i] * 200 ) );
//     strtoint(formatfloat('0',450-data[i]*2000)) ); ???
   end;
...

padavan 19. Sep 2005 14:37

Re: equalizer mit der bass.dll
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn ich das so mach, wie von Dr. No vorgeschlagen, kommt etwa sowas bei raus: (siehe Anhang)
Der Abstand zwischen den Balken gibt zwar schon die Frequen an, aber so richtig schön (Oszillokop wie bei Winamp) ist es nicht grad....
Wie geht´s ???

(habe die Schleife aber bis 2048 laufen lassen, weil ich der Meinung bin, dass ich das irgendwo in der Bass.dll gelesen hätte)

dizzy 19. Sep 2005 15:29

Re: equalizer mit der bass.dll
 
Ich fasse mal eine Antwort aus deinen beiden Fragen (hier und da) zusammen (besser wäre nen eigener Thread gewesen :roll:).

padavan hat im anderen Thread geschrieben:
Hab immer die maximale Amplitude und die Frequenz stellt sich im Abstand der Balken dar.

Kleine Begriffsklärung: Die X-Achse stellt die Zeit da. Somit ist der Begriff "Frequenz" an dieser Stelle missverständlich - ich musste 3 Mal drüberlesen ;)

Wie greifst du auf die Bass.dll zu? GetWaveData z.B. ist kein nativer Aufruf an die DLL. Dort hieße es ChannelGetData, und dort wird erst via Parameter angegeben ob man FFT oder Wave haben möchte. Von daher wäre es schonmal gut wenn du die entsprechenden Funktionen dazuschreiben könntest.

Dazu wäre auch der QT deiner Zeichenmethode sehr interessant - die aktuellen Infos sind zu knapp. Zudem sind die Wertebereiche von Wave- und FFT-Daten wenn ich mich nicht irre unterschiedlich.
Die Schleife bis 2048 laufen zu lassen ist auch nicht per se richtig. Die gewünschte Länge kann der Bass.dll angegeben werden.


Gruss,
Fabian

padavan 19. Sep 2005 22:32

Re: equalizer mit der bass.dll
 
Sorry,
du hast natürlich recht, der Quelltext ist recht knapp,
hab aber nichts richtiges Vorzuweisen, da ich hin und her probiere.
Ich benutze eine Komponente die ich hier gefunden habe, in der die Bass.Dll zur Verfügung gestellt wird. Dort ist der Aufruf BassDllplayer1.Getwavedata wohl das was dir mit ChannelGetData bekannt ist.

Das ist mein letzter Versuch

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);  // Draw Vis.
var
  data: TFFTData;
  data1: TwaveData;
  i: integer;
  tmpBitmap: TBitmap;
begin
data1 := BassdllPlayer1.GetwaveData;

Paintbox1.Canvas.MoveTo(0, Paintbox1.height div 2);
for i := 0 to 255 do begin
  Paintbox1.Canvas.pen.color := RGB(255 - i, i, 0);
  Paintbox1.Canvas.LineTo(i,Paintbox1.height div 2 - Data1[i] div Trackbar1.position);
                                                                 // als Offset quasi...

end;
(danke für´s drüber nachdenken)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr.
Seite 1 von 4  1 23     Letzte »    

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