Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bass.dll Spektrum zeichnen (https://www.delphipraxis.net/133197-bass-dll-spektrum-zeichnen.html)

holle 27. Apr 2009 19:02


Bass.dll Spektrum zeichnen
 
Ich habe gerade versucht ein Spektrum zu zeichnen, ähnlich wie in Winamp bei der Wiedergabe. Mein Problem ist nur, dass die Frequenzen auf der linken seite einen viel höheren ausschlag haben als auf der rechten. Ich habe dass schon etwas mit
Code:
sqrt(fft[x])
angepasst, aber der unterschied ist doch noch ziemlich groß. Habt ihr eine Idee wie man das am besten anstellt?

holle 29. Apr 2009 14:09

Re: Bass.dll Spektrum zeichnen
 
keiner eine idee?

Medium 29. Apr 2009 14:21

Re: Bass.dll Spektrum zeichnen
 
Nunja, das ist halt nunmal der Frequenzgang. Die meiste Musik hat in den niedrigen Frequenzen die größten Amplituden, das ist schon korrekt so. Wenn es dir nicht um Korrektheit sondern bloße Optik geht, kannst du die Werte im Grunde mit einer beliebigen Funktion bearbeiten mit der dir die Ausgabe am besten gefällt. Die Wurzel wäre ein Weg, logarithmische Saklen sind wohl aber recht gängig da diese Darstellung am ehesten dem Hörempfinden entspricht. Daher wäre das sogar noch eine mit mehr als nur "nett aussehen" begründbar. Für dein Beispiel also ln(fft[x]), wobei ich nicht sicher bin ob der natürliche Logarithmus die wirklich korrekte Wahl dabei ist. Im Zweifel auch hier mal mit verschiedenen Basen herumspielen :)

EWeiss 29. Apr 2009 14:44

Re: Bass.dll Spektrum zeichnen
 
Warum ne eigene FFT dazwischen schalten ?
Das macht Bass alles selbst.

Gibt genügend code hier nur mal suchen.
Zitat:

Die meiste Musik hat in den niedrigen Frequenzen die größten Amplituden
Richtig .. Wie will er das behandeln ?
Gerade dann wird alles unnatürlich dargestellt.

gruss Emil

Medium 29. Apr 2009 14:57

Re: Bass.dll Spektrum zeichnen
 
Zitat:

Zitat von EWeiss
Warum ne eigene FFT dazwischen schalten ?

Hab ich das vorgeschlagen? :gruebel:

Zitat:

Das macht Bass alles selbst.
Nö, die wirft einem einfach die linearen FFT Daten ins Gesicht, evtl. bietet sie noch Windowing-Optionen, da bin ich gerade unsicher. Aber ansonsten macht die BASS nichts weiter mit den Daten.

Zitat:

Richtig .. Wie will er das behandeln ?
Gerade dann wird alles unnatürlich dargestellt.
Genau das hab ich ja gesagt. Da die Amplituden allerdings linear ankommen ist eine logarithmische Darstellung aber noch insofern "richtig" als dass dies dann eine Darstellung des Empfundenen und nicht der "harten nackten Daten" entspräche, also sogar einen wirklichen Echt-Welt-Bezug hat, und zudem dem optischen Ziel des TEs recht nahe kommen könnte.

igel457 29. Apr 2009 15:02

Re: Bass.dll Spektrum zeichnen
 
Versuche die Daten in Dezibel anzugeben. "val" muss Normalisiert sein d.h. ein Wert zwischen 0 und 1.
Delphi-Quellcode:
  db := 10 * log10(val);
Du erhälst einen Wert zwischen minus unendlich und Null.

EWeiss 29. Apr 2009 15:11

Re: Bass.dll Spektrum zeichnen
 
Zitat:

Zitat von igel457
Versuche die Daten in Dezibel anzugeben. "val" muss Normalisiert sein d.h. ein Wert zwischen 0 und 1.
Delphi-Quellcode:
  db := 10 * log10(val);
Du erhälst einen Wert zwischen minus unendlich und Null.

Hmm das ist eher was für Beat oder ?
Er will die Daten glätten so wie ich verstanden habe.

Kann ja mal in Wavefade reinschauen hab da einen FFT algo der die Wavedaten glättet
müßte uach mit spectrum funktionieren.

gruss Emil

Medium 29. Apr 2009 15:18

Re: Bass.dll Spektrum zeichnen
 
Dezibel wären optimal! +1 an den Igel :)

Und ich glaube nicht dass es um Glättung geht, was auch immer du damit genau meinst. Es geht lediglich darum, dass das Spektrum normaler Alltagsgeräusche in den hohen Frequenzen deutlich schwächer ausgeprägt ist, und eine grafische Darstellung der FFT deswegen "rechts" eben viel kleinere Balken hat um es mal profan auszudrücken. Das missfällt dem TE offenbar, und eine Anzeige in db(A) lindert das grafische Ungleichgewicht etwas, wobei es sogar noch echten analytischen Mehrwert bietet.

EWeiss 29. Apr 2009 15:22

Re: Bass.dll Spektrum zeichnen
 
Zitat:

Zitat von Medium
Dezibel wären optimal! +1 an den Igel :)

Und ich glaube nicht dass es um Glättung geht, was auch immer du damit genau meinst. Es geht lediglich darum, dass das Spektrum normaler Alltagsgeräusche in den hohen Frequenzen deutlich schwächer ausgeprägt ist, und eine grafische Darstellung der FFT deswegen "rechts" eben viel kleinere Balken hat um es mal profan auszudrücken. Das missfällt dem TE offenbar, und eine Anzeige in db(A) lindert das grafische Ungleichgewicht etwas, wobei es sogar noch echten analytischen Mehrwert bietet.

Hehehehe Ok
Obwohl ich es nur in verbindung mit Beat verwende.
Und mir dazu den Level über
Delphi-Quellcode:
BASS_ChannelGetLevel(BassChannel.lngChan)
ausgeben lasse.

Wenn's hilft.

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:18 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