C++ Audio visualisieren

gedon

Lieutenant
Registriert
Apr. 2008
Beiträge
614
Hallo,

ich programmiere mit dem .net und habe hier .mpa und .mpv Dateien. Für's erste möchte ich nur die Audiospur visualisieren, also einen Graphen bei dem die Amplituden über die Zeit angezeigt wird. Wichtig ist mir auch, dass ich die Amplitudenwerte der gesamten Audiospur in einer Variablen habe, damit ich damit weiterarbeiten kann. Später soll dann auch mal die Möglichkeit bestehen, dass ich das Video anzeigen lasse, möglichst auch in Einzelbildern.

Ich tue mich z.Zt. schwer daran mich via Google in das Thema einzulesen. Vielleicht kann mir einer von euch ein paar Links oder Empfehlungen geben.

mfg

gedon
 
Woran hakt es denn?
Bekommst du die mpa/mpv-Dateien nicht dekodiert, oder weißt du nicht, was du mit dem dekodierten Stream anfangen sollst?

Gruß Timo
 
Also wie du verfahren musst, wenn du den Audiostream hast, kann ich dir im Theoretischen sagen. Du führst eine Fouriertransformation aus auf den Stream. Die erzeugt aus dem "kontinuierlichen" Signal (du musst die Datenpunkte halt in einem Intervall als kontinuierlich ansehen) jeweils Frequenz/Amplituden-Paare. Eine numerische Implementierung (auf einem Blatt Papier kann ich es, aber programmieren ist da ne ganz andere Sache) ist dann das Schwierige. Ich weiß auch nicht in welchem "Format" der Stream vorliegt. Guck dir am Besten mal Open-Source-Implementierungen von FFT (Fast Fourier Transformation) an, da sind vllt. entsprechende Beispiele dabei bzw. du musst halt gucken, wie du deine Daten da rein bekommst.

/offtopic:yoT!mO: Elac-Boxen, schön. Zufrieden damit? ^^
 
@yoT!mO: Ja, das hast du schon richtig erkannt, meine Probleme fangen schon damit an, dass ich nicht weiß womit man das dekodieren soll, bzw. welcher weg der einfachste ist. Deswegen versuche ich mir auch ein paar Grundlagen anzueignen, um zu wissen, welche Schritte gemacht werden müssen.

Der Codec sollte mpeg2 Audio bzw. Video sein.
 
Also wie man das dekodiert, kann ich dir leider konkret nicht sagen.
Aber wo du doch schon C++ benutzt, kannst du dir doch mal die Libs von ffmpeg angucken. Da müsste eigentlich auf jeden Fall ein entsprechender Dekoder für deine mpv Dateien implementiert sein.

@Fortuatus, Fouriertransformation? Braucht man das wirklich?
Ich dachte immer, dass so ein PCM-Modulierter Audio-Bitstream ungefähr so aufgebaut ist, dass einfach alle Sample Bits aufeinander folgen, d.h. (bei nem Mono-Stream, 48 khz, 16bit bps) würde ich einfach den Bitstream einfach in Blockgrößen von 2 Byte (16 bit) von vorne nach hinten durchgehen und die 2-Byte-zahl als Amplitutenwert für den Graphen nehmen.

Elac-Boxen, schön. Zufrieden damit? ^^
Ich bin damit total zufrieden:) Bässe kommen präzise und knackig, Mitten sind wunderbar, Bühne ist erstklassig und Hochton unglaublich fein auflösend und klar :-)

Gruß Timo
 
Ich habe keine Erfahrung, wie man sowas programmiert. Ich ging von Musik als kontinuierlichem Signal aus und bei der typischen Visualisierung mit Balken muss man halt die Amplitude bei den entsprechenden Frequenzen haben, was mit FFT geht. Wenn der Audiostream an sich schon genug Information zur Verfügung stellt, dann soll er es so machen. War halt ne theoretische Betrachtung, ohne dass ich praktisch schon mal so was gemacht hätte.

Ansonsten würde es vllt. etwas bringen beim Forum von Foobar2000 vorbeizugucken und zu fragen, wie die es implementiert haben.

/edit: Ich hab auch nen Denkfehler. Ich dachte er will ein Bandspektrum. Also zu Frequenzen jeweils die Amplitude. Wenn er nur die Gesamtamplitude haben will, dürfte es so gehen, wie du sagst. Dann hat er aber halt die übliche Darstellung, wie man sie aus Audacity oder so kennt.

P.S.: Wenn es schon beim Dekodieren anfängt, dann hilft es vllt. sich mal durch den Quelltext von Audacity zu arbeiten. Wie die eine Datei laden, dabei Fallunterscheidungen machen, die entsprechenden Codecs einbinden und dann die Visualisierung aufbauen.
 
Zuletzt bearbeitet:
Die Idee mit Audacity ist wahrscheinlich nicht schlecht, aber etwas zu suchen, wovon ich kaum eine Ahnung habe, in so einem großen Projekt, ist auch nicht gerade einfach.

Ich schaue mir gerade DirectShow an, hat wer Erfahrung damit?
 
DirectShow bringt dir nix. Das ist nur eine Schnittstelle für Echtzeitwiedergabe.
Guck dir jetzt halt mal ffmpeg an! Da wirste mit Sicherheit fündig.

Gruß Timo
 
Entweder du suchst dir eine passende Lib raus, die das schon alles kann oder wenn du es selber programmieren willst, wirst du um eine FFT nicht herum kommen. Im Audacity quellcode suchen, ist eine sehr schlechte Idee. Da wirst du auf keinen Fall durchsehen.
 
Werde mir dann ffmpeg anschauen, kann sein, dass es ein paar Tage dauert, bis ich hier wieder poste, werde aber immer mal wieder reinschauen, falls jemand was schreibt.
 
Zurück
Oben