Forum: Digitale Signalverarbeitung / DSP / Machine Learning Audio/Musik Visualisierung


von Tim K. (silice)


Lesenswert?

Hallo,

mein Ziel ist es, aus einer Audio Datei in Echtzeit die Daten auszulesen 
und diese in ein "aussagekräftiges" Frequenzspektrum zu transformieren. 
Diese Daten sollen letztendlich durch einen LED-Cube(8x8x8) dargestellt 
werden.

Im Moment bin ich allerdings an einem Punkt angelangt, an dem ich 
einfach nicht mehr weiter weiß. Weder wo nach ich suchen muss, noch wie 
ich mein bisheriges Ergebnis näher an meine Wunschvorstellung heran 
bekomme. Mein Wunsch wäre es, so nahe wie möglich an das Ergebnis von 
Adobe After Effects' Visualizer heranzukommen, wie es bei vielen YouTube 
Videos zu sehen ist.

Bisher habe ich folgendes gemacht:
1. Audio Daten einlesen (2^n Samples)
2. Daten aufbereiten (PCM_Signed, 16bit, stereo/mono Channel, etc)
3. Fenster-Funktion anwenden (Blackman)
4. Daten mit der FFT in das gesamte Frequenzspektrum zerlegen
5. Reellen und imaginären Teil verrechnen (sqrt(real^2 + imag^2)
6. Von linearer Skala in Dezibel-Skala umrechnen (10*log10(i))
7. Daten glätten
8. Daten graphisch anzeigen lassen
9. Audio Daten ausgeben

Das Ergebnis finde ich bis dahin akzeptabel wenn ich 2048 Samples 
verwende und mir lediglich die ersten 64 Balken anzeigen lasse (und 
weitgehend Synchron mit der Musik Ausgabe).
(Dabei stört mich noch die Tatsache, dass das Frequenzspektrum vom 
unteren Hz bereich bis hin zur Nyquist-Frequenz kontinuierlich flacher 
wird.)

Da ich allerdings das gesamte Frequenzspektrum in 64 Balken darstellen 
möchte, hat es sich mir angeboten, zwischen Punkt 5 und 6 noch 
zusätzlich einen "1/6 Octave Band Filter" mit der Mittelfrequenz von 
1000Hz einzufügen.
Das Ergebnis durch diesen Filter kommt zwar ansatzweise an meinen Wunsch 
heran, nur dass die Frequenzen schon ab ca. 400Hz zu stark zusammen 
gefasst werden und somit gehen die "Details" von dem was man hört (wie 
das Klavier oder Gesang) verloren.

Nun stehe ich wie gesagt vor dem Problem, dass ich einfach nicht heraus 
finde, welcher Teil mir noch fehlt zu meinem Wunsch, einen Visualizer 
wie in den YouTube Musik-Videos nachzuahmen (sofern machbar).

Könnt ihr mir da auf die Sprünge helfen?
Und eine weitere Frage hat sich mir die Tage aufgestellt:
In wie fern macht es Sinn, hier einen Windowed-Sinc Filter einzubauen? 
Bzw. was bewirkt dieser?

Ich bin dankbar für jeden Hinweis :-)

von J. S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

Wie tief ist denn Deine FFT?

Wenn Du wirklich "aussagefähige Visualisierung" betrieben willst, 
brauchst Du wenigstens eine Auflösung im Bereich der Variation der 
Musiknoten und das ist im unteren Frequenzbereich schon sehr eng. Gehen 
wir mal grob von 1-2Hz aus, brauchst Du eine 16k/32k-FFT. 
Blackman-(Harris) wäre schon mal das richtige Fenster für Deine Zwecke.

>glätten
Was genau möchtest Du "glätten"? Ich gehe davon aus, dass Du die oberen 
Frequenzen zusammenfassen möchtest um eine der musikalichen 
Repräsentation entsprechende relative Genauigkeit erzielen willst?

>In wie fern macht es Sinn, hier einen Windowed-Sinc Filter einzubauen?
Wo soll der hin?

>Youtube-Musik
Audiodaten, die bereits mit MPG-ähnlichen Algorithmen reduziert wurden, 
sind in dem Informationsgehalt der Oberwellen reduziert - um nicht zu 
sagen deformiert. Von derher stellt sich die grundsätzliche Frage nach 
dem Sinn einer FFT.

Das ist in etwa so, als würde man künstlich mit Vitaminen 
angereicherten, auf den Durchschnitssgeschmack hingemixten Orangensaft 
aus Konzentrat dahingehend untersuchen will, was in natürlichen Orangen 
denn so alles an Inhaltstoffen enthalten ist :-)

> LED-Cube
Mein Problem mit den käuflich erworbenen Spektrumanalyzern - egal ob in 
Digitalmischpulten, PC-DAWs oder Software war stest der, dass man nichts 
erkennen konnte, weil das Display zu kein ist. Beim Mastern von 
Audiomaterial muss man auf ein halbes dB genau arbeiten und die 
Erfahrenen der Branche tun dies auch. Sie verlassen sich dabei aber 
hauptsächlich auf das Gehör.

Will man das mit objektiven Messungen unterstützen, oder gar toppen, 
muss man auf 0,1 ... 0,2 dB auflösen, sonst habe ich keine Messung 
sondern doch nur wieder eine grobe Spass-Visualisierung, die allenfalls 
für die Optik und die Disco taugt.

Daher sehe ich als Display für eine Audio FFT mindestens einen 24-Zöller 
mit ausreichender Punktauflösung und entsprechender Ansteuerung:

http://www.96khz.org/htm/spectrumanalyzer2

von Tim K. (silice)


Lesenswert?

Was meinst Du mit "Wie tief ist denn Deine FFT?"
Ich nutze meist eine Auflösung von 4096 Samples und habe dann eine 
Auflösung von knapp 11Hz.

Bevor ich mein Spektrum graphisch darstelle, "glätte" ich dies, damit 
die Ausgabe nicht so abgehackt aussieht. Dabei werden für jeden Balken 
die benachbarten Balken mit einberechnet.
Das Glätten, wie Du es beschrieben hast, meine ich durch den 
1/n-Octave-Band-Filter zu realisieren.

Wo der Windowed-Sinc Filter hin soll? Das kann ich Dir nicht beantworten 
:D
Bei den ganzen Recherchen wird mir dieser Begriff ständig an den Kopf 
geworfen. Aber egal, wie viel ich darüber lese, er bleibt mir 
unverständlich.

Mit "aussagekräftig" habe ich wohl den falschen Begriff gewählt.
Ich habe nicht vor, durch den Visualizer irgendwelche Werte für 
Messungen oder Ähnlichem abzulesen. Das ist bei dem LED-Cube unmöglich, 
da dieser aus gerade mal 512 (8x8x8) LEDs besteht und somit 64 
verschiedene Frequenzbereiche mit 8 verschiedenen Werten abgedeckt 
werden könnten :D

Mein Ziel ist es eben diese 4096 Werte, die aus der FFT berechnet 
werden, so zusammen zu fassen, dass ich diese in 64 Frequenzbereiche 
unterteile.
So dass man sieht, dass gerade zum Beispiel das Klavier spielt oder die 
Kickdrum benutzt wurde.
Also nichts wissenschaftliches ;)

von J. S. (engineer) Benutzerseite


Lesenswert?

Die FFT vollzieht bereits eine Art von Glättung indem jede der 
ermittelten Intensitätswerte ihren Bereich abdeckt, inklusive einer 
Überlappung mit dem Nachbarfrequenzbereich. In Deinem Falf wären das 
+/-11 Hz, also relativ grob, was die niedrigen Frequenzen angeht.

Der Sinn, da nochmals Pegelwerte zu verschleifen und damit Information 
zu verlieren, erschließt sich mir nicht. Insbesondere, wenn Du eine Bass 
Drum von einer akzentuiert, gedämpft angeschlagenen Basssaite am Flügel 
unterscheiden möchtest, ist es nötig, die beim Kick anders verlaufenden 
Oberwellen zu beobachten. Wenn Du da unnötig glättest, sieht am Ende 
alles gleich aus.

Was ich wie schon angedeutet empfehle, ist die Reduktion des linearen 
Spektrums auf ein Logarithmisches. Dabei wären dann nach oben hin 
zunehmend mehr Frequenzen zusammenzufassen. Alternativ prozessiert man 
gleich "dodekaphonisch". Ausgestreckt auf die volle Tonleiter wäre das 
12er Görtzel, der 5 bis 6 mal verschachtelt über HBF angewendet wird.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.