Autor Beitrag
rob60
Hält's aus hier
Beiträge: 4
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 30.03.10 15:28 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
rob60 Threadstarter
Hält's aus hier
Beiträge: 4
Erhaltene Danke: 1



BeitragVerfasst: Di 30.03.10 15:28 
ääh danke wo is denn die bass hilfe????
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4
Erhaltene Danke: 1



BeitragVerfasst: Mi 31.03.10 11:26 
Ich hatte die bass.dll zwar schon hatte aber keine doku gefunden.
Naja vielen dank
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 01.04.10 22:58 
user profile iconrob60 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Fr 02.04.10 15:11 
user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconrob60 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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 user profile iconrob60.

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.