soundvisualisierung / technischer ansatz / frequenzen

Erstellt 18 Antworten19 Beiträge
Startbeitrag#1
hallo zusammen,
ich versuche grade für eine 3d anwendung ein kleines soundvisualisierungstool zu programmieren. leider habe ich festgestellt, dass mir das nötige hintergrundwissen im bereich sound fehlt und deshalb wende ich mich hoffnungsvoll an euch.
mein ziel ist aus einer .wav datei die unterschiedlichen frequenzbereiche auszulesen und sichtbar zu machen.
als testdatei verwende ich eine .wav datei mit folgenden eigenschaften:
abtastrate 44khz
abtastgröße 16 bit
bitrate 1411 kbit/s
audioformat pcm (steht das für pulscodemodulation?)
aus der .wav datei kann ich die gesamte anzahl samples sowie das sample an der stelle x auslesen.
zum testen hab ich einfach mal den maximalwert der ausgelesenen samples über der zeitleiste ausgelesen und so einen körper auf der y-achse bewegt.
mein ziel ist jetzt aber grob gesagt einen maximalwert für bässe, mitten, höhen oder besser einen pro frequenzbereich zu ermitteln.
mein ansatz bisher:
-den gesamten bereich von -32.768 bis +32.768 in einzelne bereiche aufteilen(8 bereiche)
-die samples abfragen bis zum signalwechsel(maximalwert ermitteln)
-und dann den wert normalisieren a la wert=maximalwert - bereichsuntergrenze..
bin ich da völlig auf dem holzweg?
jedenfalls wäre ich für jede hilfe dankbar!!!
ZitierenPost melden
Antwort#2
maximalwert der ausgelesenen samples
mein ziel ist jetzt aber grob gesagt einen maximalwert für bässe, mitten, höhen oder besser einen pro frequenzbereich zu ermitteln.
-den gesamten bereich von -32.768 bis +32.768 in einzelne bereiche aufteilen(8 bereiche)
Welcher Maximalwert?
Verstehe dich nicht.
Nochmal: Welcher Maximalwert?
Wie Definierst du "Bässe", "Mitten", "Höhen"?
-die samples abfragen bis zum signalwechsel(maximalwert ermitteln)
-und dann den wert normalisieren a la wert=maximalwert - bereichsuntergrenze..
Und was soll das bringen?
Was du wahrscheinlich willst ist Fouriertransformation.
ZitierenPost melden
Antwort#3
ok. von 'meinem ansatz bisher' hätte ich vielleicht nichts schreiben sollen :-D
wie gesagt hab ich keinen plan von soundtechnik.
also nochmal kurz und knapp:
bei besagter testdatei lassen sich 2.178.700 samples auslesen. diese liegen im wertebereich +/-32000 (16 bit)
diese zahlenwerte oder samples scheinen ja den ganzen sound abzubilden. meine frage ist jetzt wie ich einzelne hz/khz bereiche aus dem gesamtsound extrahieren kann um z.b. sowas wie eine 'equalizer-kurve' abbilden zu können.
hoffe das war verständlicher.
ZitierenPost melden
Antwort#4
... laufen lassen, und Darstellung im Frequenzbereich zeigen.
Einfach gesagt, die Mathematik dahinter ist etwas aufwendiger...
Gruss
Micha
===
ZitierenPost melden
Antwort#5
nee is klar. schön dass ihr euern spaß habt..
ZitierenPost melden
Antwort#7
Du möchtest das Signal der Wave-Datei aus dem Zeitbereich in den Frequenzbereich transformieren, das geht mit der Fouriertransformation. Ich würde mir aus der örtlichen Bibliothek ein Buch entleihen, das die Themen Fourietransformation und Fast Fourier Transformation abhandelt um den Hintergrund zu verstehen. Im Internet sind freie Units, Includes, Komponenten, je nachdem, zu finden, die eine Fouriertransformation vornehmen und mit deren Hilfe sich Dein Vorhaben umsetzen lässt.
Gruß
Claus
ZitierenPost melden
Antwort#8
mein Ziel ist aus einer .wav-Datei die unterschiedlichen Frequenzbereiche auszulesen und sichtbar zu machen.

Das sieht so aus, als benötigst du einen Niederfrequenz-Spektralanalysator:
http://de.wikipedia.org/wiki/Spektralanalysator
Oder einen Frequenzanalysator =

Real Time Audio Spectrum Analyzer, genannt RTA.
Das wäre wohl das Google Wort.
http://www.relisoft.com/freeware/freq.html
http://www.qsl.net/dl4yhf/spectra1.html
http://www.interflex.com/audiorta/
http://linux-sound.org/scopes.html
http://www.trueaudio.com/
ZitierenPost melden
Antwort#9
Genauer: Eine Fast Fourier Transform (FFT)
Gruss,
Mathematiker
ZitierenPost melden
Antwort#10
...und das ganze noch in Echtzeit, bitteschoen!
Nimm zB. FFTW (haben wir seinerzeit als die schnellste oeffentlich verfuegbare
Bibliothek wissenschaftlich herausgetestet; unser eigener Algorithmus ist
zwar derzeit der tatsaechlich weltweit schnellste - und wird daher auch auf
den blue gene implementiert, ist aber nicht so populaer...und echten support
gibt's dafuer auch nicht...)
Gruss,
Mathematiker
ZitierenPost melden
Antwort#11
Eigentlich eine diskrete Fouriertransformation, denn beim digitalen Signal liegen die Werte zeitdiskret vor. Die FFT ist nur eine mögliche Implementierung einer DFT, die schnellste halt.
Zum Verständnis: Schallwellen sind positiv und negativ. D.h. der Schalldruck, ebenso wie die dazugehörige elektrischen Spannung nach dem Mikrofon. Wechelsspannung. Die digitalen Werte sind eine Abbildung dieser Wechselspannung. Deswegen auch positiv und negativ. Du kannst und solltest die Werte auf +1 und -1 normieren.
Auch berücksichtigen solltest du, dass die Fouriertransformation linear arbeitet. D.h. sie liefert genauso viele Werte zwischen 100 und 400 Hz, wie zwischen 1000 und 1400Hz. Equalizer und auch Analyzer sind dem Verhalten des Gehörs angepasst. Sie arbeiten mit relativer Bandbreite. D.h. zwischen 100Hz und 400Hz liegen genausoviele Bänder (Frequenzwerte) wie zwischen 1000Hz und 4000Hz. Die Frequenzachse ist also logarithmisch. Z.B. in Oktaven (1:2) oder Terzen (4:5).
Das solltest du beim Integrieren über die Frequenzbänder berücksichtigen.
Ebenso solltest du die Amplituden logarithmisch, also in dB darstellen.
Viel Spass. Ich habe noch ein paar C-Source und C++ Wrapper.
ZitierenPost melden
Antwort#12
wer redet denn mal von 'eben so'?
ZitierenPost melden
Antwort#13
vielen dank - der werde ich machen.
ZitierenPost melden
Antwort#14
danke erstmal für die ausführliche erklärung. das hilft mir schon weiter.
hab mich gestern nach dem ersten 'feedback' hier auch erstmal auf c++ foren rumgetrieben und einiges an resourcen gefunden. bevor ich aber anfange mich mit den halbwegs kommentierten sourcefiles zu beschäftigen werd ich mir ein bißchen hintergrundwissen anlesen müssen(FT).
ZitierenPost melden
Antwort#15
danke für die links - vielleicht kann ich mir ja den weg in die bibliothek doch sparen :-D
ZitierenPost melden
Antwort#17
Genau dieses!
Gruss,
Mathematiker
ZitierenPost melden
Antwort#18
Moin...
Weißt du zufällig, ob es von FFTW irgendwo Binaries für win32 gibt, die mit dem (Fortran!) Intel-Compiler 8.0 laufen? Ich finde auf fftw.org nur Wrapper-Libraries für den (älteren?) Compaq-Compiler...
Jens
ZitierenPost melden
Antwort#19
Nein, weiss ich leider nicht, ich bin da nicht mehr ganz auf dem aktuellsten Stand.
ZitierenPost melden

Deine Antwort

Du kannst ohne Anmeldung schreiben.