Audio Signale verarbeiten
-
Hi,
Ich würde gerne aus einem beliebigen audio signal den bass takt heraus holen. hat jemand ne ahnung wie man das anstellen kann? ich hab heute schon den ganzen tag google gequält aber nichts gefunden womit ich was anfangen kann.
Kann mir da jemand weiter helfen? entweder über code beispiele oder quellen wo ich mich dann schlau machen kann.
ich hab es bis jetzt nicht weiter gebracht als mit dem MediaPlayer dateien abzuspeielen.
ich hab auch jede menge formeln zur fourieranalyse und bandpassberechnung gefunden, aber das ganze kann doch noch so kompliziert sein.
Danke schonmal
-
Dieser Thread wurde von Moderator/in junix aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
werker schrieb:
ich hab auch jede menge formeln zur fourieranalyse und bandpassberechnung gefunden, aber das ganze kann doch noch so kompliziert sein.
Doch, ist es.
Oder auch nicht.
Wie man's nimmt.
Grundsätzlich würde ich für den Anfang mal sagen, das Signal fouriertransformieren, und dann im unteren Frequenzband die Schwingungen mit den maximalen Amplituden extraieren - das ist der "Basstakt".
-
Hi,
die Schwierigkeit liegt nicht nur an den Algorithmen. (ich hoffe du hast die digitalen)
Der Borland-Builder bietet zwar eine vollgekapselte Media-Komponente an, bloss kommst du mit dieser nicht an den benötigten Zeitsignalpuffer ran. Dafür musst du das Beispeil aus der Winapi-Bibel ''Petzold'' ein wenig modifizieren.das Prizip 1. Filter-Regel aufstellen (Bootworth Hochpassfilter 1.Ordnung mit der Flankensteilheit von -20dB) 2. Komplexe Zahlen Puffer erstellen mit genau sovielen Stellen wie der Zeitsignalpuffer Stellen hat. 3. Den komplexen Einheitskreis in genau soviele Elemente teilen wie der Zeitsignalpuffer Stellen hat, und damit den komplexen Puffer füllen. 4. Auf den komplexen Puffer musst du nun den Bootworth Filterregel (Punkt 1) anwenden. Das jeweilige Ergebniss, kommt sofort an die richtige Position im komplexen Puffer. Die Position muss immer die Selbe sein in beiden Puffern. 5. Diesen komplexen Puffer transformierst du jetzt mittels FFT in den Bildbereich(Frequenzbereich) (einmal!!! ändert sich nicht mehr) 6. Den Zeitsignal-Puffer auch mittels FFT in den Bildbereich transformieren. 7. Nun die beiden Puffer im Bildbereich falten. 8. Den so erzeugten Ergebnisspuffer mittels FFT^-1 in den Zeitbereich zurück transformieren, und auf die Lautsprecher jagen.Es ist schon lange her ++++ übernehme keine Garantie ++++++
Probiere das ganze erst in Matlab aus, bevor du die Filterregel in C++ ralisiertst.
Auch gibt es in Matlab die Funktion DFT == FFT und FFT^-1==Bildbereich -> Zeitbereich.
In Matlab gibt es hierzu auch beispiele.
Matlab kann auch wav-Dateien Filter, aber auch in Echtzeit Wav-Dateien Filtern.Grüsse
arnold
-
Hi
Also einfach wirds in dem Bereich recht selten. Bass und takt rauslesen kann man auf unterschiedlich weise machen. FFT wuerde ich da nicht unbedingt anwenden, man will ja eher Zeitdaten extrahieren als Frequenzdaten, sogesehen muessste man dann mehrer FFT fenster vergleichen, und dann wird schon wieder komplex, je nach festergroesse hat ja enweder eine genauere frequenaufloaseung oder einen kleineres Zeitfenster.
Also ich wuerde wohl ehere bandpassig filtern und dann wohl korrelieren (was auch wieder mittels FFT geloesst werden kann). Mittels korrelation sollte man recht schoen wiederkehrende ryhtmusinformation detektieren keonnen.
cheers