Audioanalyse
-
Moin
Ich brüte hier grad so über meiner Diplomarbeit und weiß nicht so recht, wo ich anfangen soll.
Ich habe ein Programm in Matlab geschrieben und will das jetzt nach C++ (VC++ 6.0) portieren (ich habe bislang nur ANSI-C Erfahrung). Nun wurde ich erstmal von einer Fülle von Interfaces erschlagen.Das Programm soll folgendes können:
- Zugriff auf Wave-Dateien auf der HDD (später auch in Realtime vom Line-In/Mic-In der Soundkarte)
- Darstellung der beiden Kanäle als Waveform
- Fourier Transformation von einzelnen Segmenten der Wave-Datei
- Darstellung der Fourier-Transformierten
- Verschiedene Berechnungen aus der Fourier-Transformierten
- Darstellung der Ergebnisse in einem 3D-Histogramm
- Erstellung von mehreren Wave-Dateien (jeweils mono) aus den berechneten Ergebnissen (speichern und abspielen)Welche Schnittstelle bietet sich dafür an? DirectSound+Direct3D? Wenn ich alles, was ich gelesen habe, richtig verstanden habe, reicht mir für Audio-Sachen durchaus auch FMod. Aber ich dachte mir, wenn ich ein 3D-Histogramm erstellen will, werde ich eh Direct3d nehmen und kann dann auch gleich DirectSound nutzen. Oder brauche ich evtl. gar keine spezielle Schnittstelle, kann ich das alles mit WinAPI machen. Macht es Sinn, MFC zu benutzen?
Ihr seht, ich tappe noch etwas im Dunkeln. Ich habe in den letzten Tagen viel gelesen, aber irgendwie war es zuviel. Ich finde einfach nicht den richtigen Ansatzpunkt.
Matze
-
Einfacher wäre es glaube ich, ein MediaPlayer-Modul zu benutzen. Wenn du dann an der WaveDatei was verändern willst, musst du die aber glaube ich selbst auslesen. Kannst mir ja mal deinen code mailen, vielleicht kriege ich dann endlich mal den FFT hin *gg* (cmlueke@compuserve.de)
Aber vom VC hab ich sowieso keine Ahnung
-
Also du hast keine Ahnung von C++ und willst sowas schreiben? LOL.
Was hällst du von einem Anfängertutorium. Dann Tutorien zu den von dir bevorzugten APIs.
-
So wies aussieht brauchst du nur FMod und OpenGL.
FMod kann leider auf Linux nicht direkt von Soundkarte lesen.
Für Fourier gibt es die libfft.
Wenn du noch GUI Elemente brauchst du vielleicht sowas
wie QT, Gtk oder Fox, welche alle eine Art GLCanvas haben.Wo fehlt dir der Ansatzpunkt ?
Ich würd erst das backend schreiben, dann das 3d Histogramm in
OpenGl , am Schluß dann vielleicht ein paar Steuerelemente bzw. Dialoge.Die APIs, die ich genannt habe, sind auch alle in C verfügbar.
-
Also in dem Bezug kann ich auch nur Fmod empfehlen...
devil
-
Hey Helium, ich habe nur gesagt, dass ich mich mit _V_C++ nicht auskenne, ich habe "nur" den Borland C++ Builder, ok?!
-
ich habe bislang nur ANSI-C Erfahrung
Daraus habe ich einfach mal geschlossen, dass du kein C++ kannst. War mein Fehler.
-
Moment ... dieses Thema, was es schon in allen möglichen Formen (mit DX und ohne) im Internet zusammenzuklauen gibt, hast Du durchbekommen?
Also bei uns hätte man schon 1998 damit keine Chance mehr gehabt.
-
Hallo und sorry, daß ich mich so lange nicht gemeldet habe, ich bin hier ziemlich in Arbeit erstickt.
Erstmal danke für die Antworten. Ich bin inzwischen ein gutes Stück weitergekommen. Ich habe mich erstmal gegen DirectSound entschieden, das ist für das, was ich brauche einfach zu mächtig. Ich bin inzwischen, was Wave-Dateien und FFT angeht, fündig geworden:
http://www.intersrv.com/~dcross/audio.html
Ich hab die Dateien von dort in mein Projekt integriert und kann sie anwenden. Außerdem habe ich von einem Mitarbeiter der Professur ein paar Dateien zur Wiedergabe/Aufnahme bekommen. Soweit, so gut. Jetzt will ich die FFT erstmal graphisch ausgeben, das schau ich mir nexte Woche mal an.dieses Thema, was es schon in allen möglichen Formen (mit DX und ohne) im Internet zusammenzuklauen gibt, hast Du durchbekommen?
Neee, es geht nicht um Waves und FFTs, das ist für mich nur Mittel zum Zweck. Der Kern sind die Berechnungen, die ich mit der FFT anstelle und daraus neue Wave-Dateien generiere. Das Programm habe ich in der Studienarbeit mit Matlab geschrieben und will das jetzt portieren. Aber auch das ist natürlich nicht alles. Wenn das erstmal in C++ fertig ist, wird der Berechnungsalgorithmus verbessert und untersucht. Leider war das ganze in Matlab zu langsam, um in Echtzeit zu arbeiten, daher die Notwendigkeit, das nach C++ zu portieren.
Wen es interessiert: es geht um die Trennung von mehreren Signalquellen, die mit 2 Mikrofonen aufgezeichnet wurden. Blind Source Separation, kurz BSS.Matze
-
ich hab jetzt so ein programm mit visualisierung in C für DOS geschrieben, allerdings (wegen dos) ohne gleichzeitig den sound abzuspielen. kannst mir ja mal mailen, dann maile ich dir mein programm