Sound aufnehmen und infos auslesen [closed]
-
hallo leute
ich bin noch nicht sehr erfahren mit directx habe aber genug material, um bei gelegenheit das thema anzugehen. was ich in den büchern am meisten vermisse ist jedoch, wie ich mit sounds arbeite. ich habe einige beispiele um sounds abzuspielen und die aufnahme ist soweit ich weiss in der dokumentation vom directxsdk enthalten. meine vorstellung wäre nun jedoch z.b ein programm, das eine gewisse zeit eine audio-eingangsquelle aufnimmt und graphen für frequenz/zeit, lautstärke/zeit usw darstellt.wo finde ich hierzu informationen. ich habe keinerlei probleme mir zeit fürs üben zu nehmen, aber leider habe ich keine ahnung wo ich suchen soll. direct sound buffer habe ich keine funktion gefunden, die mir informationen liefert.
wie bereits erwähnt ist directx noch relativ neuland für mich, aber auch detailierte antworten würde ich zu schätzen wissen. was ich sicherlich nicht brauchen möchte sind dlls, die die arbeit übernehmen.
gruss und danke GraveCH
-
naja
kommt drauf in wie weit du dich schlaumachen willst.
dazu gehoert das grosse (sehr grosse) themen gebiet signalverarbeitung.
mit google kann man da ein paar nette script von ein paar unis/fh's finden.
Auf jeden fall geht das ganez nicht mit ein paar befehlen aus der doku.
zum frequenz thema, gibt z.B dir Fourier transformation (FFT,als algorithmus wenns schnell gehen muss).
Generell gibst da von der programmiereseite her wenig doku, die nicht sehr fachlich in der signal verarbeitung angesiedelt ist.
http://www.harmony-central.com/ und http://www.musicdsp.org/ koennen eventuell man erste anlauf stellen sein.
nebenbei wenn du wirklich mit audiomaterial arbeiten willst, aufnahme technisch, und low latency brauchst kann man mal in ASIO von steinberg reinschauen, schaut auf den ersten blick verwirrend aus, ist aber meiner Meinung nach die beste Treiber wahl (statt wdm oder dx) fuer Audio angelgenheiten (fuer spiele nicht notwending).
Gruss Flo
-
vielen dank für deine antwort
ich möchte es eigentlich schon mit directx machen. die audioverarbeitungen, die ich plane werden zu beginn sicherlich nicht zu komplex.
soweit ich das verstanden habe liest man also die amplitude der aufnahme aus und kann mithilfe von FT's die frequenzen errechnen?
ist FFT irgendwie etwas ungenau, oder warum sagst du "wenn es schnell gehen muss"?
gruss graveCH
-
mmh
also Fourier transformation ist die theorie von der frequenz zerlegung von signalen.
Die digitale form dft basiert euf der fourierreihe (da linienspektrum (digital punkte) : gererelle regel: peridische funktionen -> linien spektrum, nicht periodisch kontinuierliches spektrum)Die DFT erechnet dir zu einem Zeitfenster dass passende spektrum (wie als waere dieses fenster periodisch fortgesetzt), (da kommt man dann auch dazu warum man fenster funktionen braucht, z.B sin der nicht ganz ins fenster passt, hatt dann quasi einen sprung durch die periodizierung und erzeugt dadurch keine line sondern verlaeuft im spektrum (faltung mit rechteck).)
Die DFT kann fuer beliebige Fenstergroessen berechnet werden, die FFT nur fuer n^2 (2,4 ...,1024,2048,... punkte) ist dafuer deutlich schneller.die ausgabe einer FFT is immer komplex, real, imag (auch sin und cos spektrum) oder in betrag und phase.
Im allgemeinen kann man sagen, dass das verstaendnis fur FFT/FT nicht voll trivial ist -> wikipedia mag helfen.
deinem geschreibe entnehme, dass nicht so viel darueber weisst.
Auch was meist du mit amplitude? MAximalwerte in einem Zeitbereich, rms? oder einen anderen der zig mittelwerte die es gibt?
-
mit amplitude meine ich die z.b in einer WAV datei gespeicherten daten. die amplitude ist soviel ich weis der finale output/input von audio vom pc. ist die amplitudendifferenz hoch ist somit auch die lautstärke gross.
hat man die schwingung: sin(t)*1000, dann ist die amplitude der wert aus dieser funktion(t). pro 360*t ist eine welle kompletiert.mein wissen ist in diesem themenbereich in der tat nicht sehr gross. im bin in einem gymasium in der schweiz mit dem schwerpunkt chemie/biologie. ich habe erfahrung mit komplexen zahlen. meine kentnisse über wellen sind eher im chemischen bereich(elektronen, photonen, quantentheorie). ich glaube nicht, dass ich mit dem weit kommen werden. um mir ein bischen wissen anzueignen habe ich mir nun ein buch über signalverarbeitung bestellt, das einen schwerpunkt auf FT's hat.
habe ich das richtig verstanden, dass ich mithilfe der DFT einen datensatz errechnen kann von den in dem zeitfenster enthaltenen frequenzen?
vielen dank dass du dir die zeit nimmst auf meine fragen zu antworten.
gruss GraveCH
-
GraveCH schrieb:
habe ich das richtig verstanden, dass ich mithilfe der DFT einen datensatz errechnen kann von den in dem zeitfenster enthaltenen frequenzen?
ja so ungefaehr, eine dft/fft etc hat ja eine Frequenzaufloesung, d.h. abhaeing von der punktezahle (fenster groesse) (und der sampling freq.) hatt man eine mehr oder weniger gute "Frequenzaufloesung".
Wenn du z.B einen sin mit 400 hz, dann wird dir das Frequenzband der FFT in der 400hz enthalten ist die amplitude geben, man aber nicht sicher sagen welches Frequenz die Wave hat, nur mit der genauigkeit der Bandgroesse.
z.B 44,1 khz eine 2048 punkte fft, ein band hat dann eine breite von 21,5 hz(fs/n).
Besonders kurze anhaltende tiefe Frequenzen, sind sehr schwer mit FFT zu vermessen.
Aber wie schon erwaehnt, sollte der sin nicht in das genau mit n*periodenlaenge ins Fenster passen, zerlaeuft er im spektrum, (wie schon erwahnt, das kann man als zeitlich multiplikations mit einen rechteck verstehen, das ist die spektrale faltung von si-funktion mit der linie von sin.)Deswegen hatt man x verschiedene fensterfunktionen, die immer mehr oder weniger optimal fuer einen verwendungs zweck sind (abhaenig von dem material das man analysieren will, oder was man machen will,amplitudenspektrum, korrelation, leistungspektren ... ), manche genauer in der amplitude, verlaufen aber mehr in der frequenz, andere umgekehrt.
Also wenn ein sin die 1000 * sin, dann ist die ampl., 1000! Was du sonst mit dem satz meinst ist mir unklar.
Klar die allgemeine schwingung ist ja A*sin(wt+phase), damit kann dann jeden punkt berechnen !
(fuer welche gibst dann ja nur die diff gleichung, nach ort oder zeit loesbar).Aber ein Wavefile ist ja selten nur ein Sin, dass ist ja ein frequenz gemisch.
cheers
Florian
-
hmm vielen dank.
ich glaube jetzt ist es mir klarer, wie ich das thema anpacken muss. zuerst brauche ich jetzt wohl etwas wissen über signalverarbeitung. falls ich probleme habe werde ich mich wieder melden.^
gruss GraveCH
-
Hallo,
ich möchte nochmal eine andere Art der Ermittlung von Amplitudenwerten loswerden.
Wenn man über das Signal einen Bandpass für die entsprechende Frequenz legt, erhält man das Signal in diesem Bereich. Einfach das Mittel berechnen und schon hat man die Amplutude des Signals. Das macht man dann für die Frequenzbereiche in denen man es braucht und schon ist das Problem gelöst. Wenn man natürlich das Filter sehr steil braucht wird der Rechenaufwand auch wieder sehr hoch. Ist aber immer noch schneller als mit der FFT