Autor |
Beitrag |
rob60
Hält's aus hier
Beiträge: 4
Erhaltene Danke: 1
|
Verfasst: Di 30.03.10 14:46
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
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Di 30.03.10 15:28
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
rob60 
Hält's aus hier
Beiträge: 4
Erhaltene Danke: 1
|
Verfasst: Di 30.03.10 15:28
ääh danke wo is denn die bass hilfe????
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Di 30.03.10 15:33
gibts alles hier
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
rob60 
Hält's aus hier
Beiträge: 4
Erhaltene Danke: 1
|
Verfasst: Mi 31.03.10 11:26
Ich hatte die bass.dll zwar schon hatte aber keine doku gefunden.
Naja vielen dank
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: 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. 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
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Fr 02.04.10 15:11
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 02.04.10 15:41
Die Fourier-Analyse 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.
|
|