Entwickler-Ecke
Multimedia / Grafik - ton in frequenzen umwandeln
rob60 - Di 30.03.10 14:46
Titel: ton in frequenzen umwandeln
Hi
vorwort
ich weiss dazu gibt es schon 3 themen aber ich begreifs immer noch nicht
also mein problem ich will vom microphon oder von einer wav datei musik einlesen und jede 10000stel Sekunde die momentane frequenz in ein array abspeichern.
Bergmann89 - Di 30.03.10 15:15
Hey,
dazu nimmst du am bessten die Bass.dll. Mit BASS_ChannelGetData kommst du an die Daten (siehe Bass-Hilfe). Wie du an die Daten vom Mic, bzw. von ner Datei kommst findest du bei google ;)
MfG Bergmann
ALF - Di 30.03.10 15:28
Bergmann89 hat folgendes geschrieben : |
Wie du an die Daten vom Mic, bzw. von ner Datei kommst findest du bei google ;)
|
Steht auch in der bass.dll documentation :wink:
Gruss ALf
rob60 - Di 30.03.10 15:28
ääh danke wo is denn die bass hilfe????
rob60 - Mi 31.03.10 11:26
Ich hatte die bass.dll zwar schon hatte aber keine doku gefunden.
Naja vielen dank
delfiphan - Do 01.04.10 22:58
rob60 hat folgendes geschrieben: |
also mein problem ich will vom microphon oder von einer wav datei musik einlesen und jede 10000stel Sekunde die momentane frequenz in ein array abspeichern. |
Eine "momentane Frequenz" gibt es nicht. Bei Wellen gilt die Unschärferelation. Entweder Zeitauflösung oder Frequenzauflösung, aber nicht beides gleichzeitig in beliebiger Auflösung.
Du musst jeweils kleine Fenster aus der Wave-Datei ausschneiden (d.h. ist nicht mehr "momentan" sondern (gewichtet) gemittelt während einer kurzen Zeit) und diese über eine Fouriertransformation in den Frequenzraum umrechnen. Siehe
STFT [
http://en.wikipedia.org/wiki/Short-time_Fourier_transform]. Dann ermittelst du die Frequenz mit der maximalen Energie.
Je grösser du dieses Fenster wählst, desto genauer ist die Frequenzauflösung, aber desto mehr wird das ganze in der Zeit verschmiert. Je kleiner das Fenster, desto weniger Frequenzanteile kannst du ermitteln; dafür hast du eine höhere Auflösung in der Zeit. Ein Kompromiss.
Dieses Fenster muss hinreichend gross gewählt sein. Daher sind 10000 Werte bei 44100 Hz nicht unbedingt sinnvoll. Entweder du wählst die Fenster extrem überlappend, was dazu führt, dass deine Werte ineinander verschmiert sind, oder du hast nur wenige Samples zur Verfügung um eine Frequenz zu ermitteln.
Du kannst BASS nehmen; ich weiss aber nicht, welche Parameter er wählt. Womöglich hast du keine grosse Kontrolle darüber. Aber du solltest wenigstens verstehen, was er genau ausspuckt. Ich weiss nicht genau, was du mit den Daten vor hast.
Bergmann89 - Fr 02.04.10 14:59
Hey,
bei BASS kann man einstellen, wieviel Bytes du haben willst. Die Umrechnung in den Frequenzraum kann man sich auch sparen, denn das kann BASS auch. KOmmt halt drauf an was man für ein Parameter an die Fkt. übergibt. Entweder es kommt ein ausschnitt der Frequenz raus (Wave), oder der Frequenzraum (FFT). Das findet man alles nochma genauer in der Hilfe...
MfG Bergmann.
Jakob_Ullmann - Fr 02.04.10 15:11
delfiphan hat folgendes geschrieben : |
rob60 hat folgendes geschrieben: | also mein problem ich will vom microphon oder von einer wav datei musik einlesen und jede 10000stel Sekunde die momentane frequenz in ein array abspeichern. |
Eine "momentane Frequenz" gibt es nicht. Bei Wellen gilt die Unschärferelation. Entweder Zeitauflösung oder Frequenzauflösung, aber nicht beides gleichzeitig in beliebiger Auflösung. |
Ich bin sicher, diese Tatsache nimmt er einfach in Kauf. Er meinte sicher eine Frequenz, die der Welle im zeitlichen Umfeld nahe kommt. :roll:
Aber bräuchte man zum Umrechnen nicht die Fourier-Analyse?
delfiphan - Fr 02.04.10 15:41
Die
Fourier-Analyse [
http://de.wikipedia.org/wiki/Fourieranalyse] ist für periodische Signale und man nimmt dort das gesamte Signal und rechnet daraus die Frequenzen heraus. Man hat dabei keine zeitliche Auflösung sondern kann lediglich sagen, aus welchen Frequenzen das ganze Signal besteht. Genau das meinte ich mit der Unschärferelation; wobei die Fourier-Analyse das eine Extrem ist: Man hat hier zwar perfekt alle Frequenzen rausgerechnet aber man kann überhaupt nicht sagen, wann welche Frequenz gespielt wurde - das genau will aber
rob60.
Eigentlich wollte ich nur sagen, dass 10000 Werte pro Sekunde keinen Sinn machen und dazu auch eine Erklärung abgeben, und, dass DFT/FFT die falschen Verfahren sind.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!