![]() |
Frequenz von Tönen über Mikrofon ermitteln?
Hallo,
ich habe vor mit Delphi ein Gitarrenstimmprogramm zu erstellen, dazu brauche ich einen Befehl, der die Frequenz des Ton's der Gitarre mit einer, im PC gespeicherten Frequenz vergleicht, und außerdem weiß ich nicht so recht wie ich das Mikrofon ansteuern kann.. Wär toll wenn mir da jemand helfen könnte, danke schonmal :-D :arrow: und bitte so einfach wie möglich erklären, ich kenn mich mit Delphi (noch) nicht so aus.. (ich benutze übrigens Delphi 5 falls das wichtig ist) |
Re: Frequenz von Tönen über Mikrofon ermitteln?
|
Re: Frequenz von Tönen über Mikrofon ermitteln?
Vielen dank!
Ich werd mir das erstmal durchlesen.. :-D |
Re: Frequenz von Tönen über Mikrofon ermitteln?
|
Re: Frequenz von Tönen über Mikrofon ermitteln?
Ich schließe mich hier mal an.
habe alles vorangehende gelesen und auch umgesetzt. Nur sind mir die Frequenzen zu ungenau die dort ausgegeben werden. Sie sind ja meistens ohne Nachkommastellen (eine würde mir da eigtl schon reichen) und was noch viel schlimmer ist nicht auf das Herz genau sondern auf 5 Herz kann man das irgendwie optimieren? Was mich wundert ist das es nicht immer Frequenzen sind die durch 5 teilbar sind sondern manchmal auch lange Nachkommawerte auftauchen aber halt nur sehr selten ... :-/ warum? MfG LLiinnuuxx PS nochmal ein wenig Quellcode:
Delphi-Quellcode:
//Quellcode aus dem Beispiel übernommen
procedure [b]MeasureFrequency [/b](var LocWaveRecord : TWaveRecord); var Channel,i,j : word; Freq : extended; begin with LocWaveRecord do begin for Channel := Le to Ri do begin j := 0; for i := 1 to BufferBlocks-1 do begin if ((StereoBuffer[i-1,Channel] <= 0) and (StereoBuffer[i,Channel] > 0)) then j := Succ(j); end; Freq := j*cSampleRate/BufferBlocks; //Mittelwertbilden wird nicht benötigt wurde daher nicht aus dem beispiel übernommen if j>2 then if Channel = Le then Frequency.LeftChannel:=Freq else Frequency.RightChannel:=Freq; end; end; end; |
Re: Frequenz von Tönen über Mikrofon ermitteln?
In der Code Library ist von mir eine FFT/DFT-Implementierung für Delphi. (
![]() Das ganze funktioniert ungefähr so: Du hast eine eine Reihe von Abtastwerten des Eingabetons in einem Array (wieviele Abtastwerte pro Sekunde bestimmt die Sampling-Frequenz, meistens sowas wie 11025Hz, 22050Hz, 44100Hz) Angenommen dein Array hat die Länge n, idealerweise eine Zweierpotenz, dann gilt: Nach der Fourier-Transformation stehen in den Indizes 1 bis n/2-1 die Anteile der Frequenz Samplingrate/n, relativ zum Maximalwert. Die Indizes dahinter sind eine Spiegelung davon, also unbrauchbar. (sg. Alias-Effekt) Wenn du also eine höhere Auflösung willst, kannst du z.B. eine größere Menge von Eingabewerten wählen - solange es eine Zweierpotenz ist, gibt es so gut wie keinen Geschwindigkeitsverlust, da die Laufzeit dann logarithmisch ansteigt. |
Re: Frequenz von Tönen über Mikrofon ermitteln?
Danke für die schnelle Antwort. Aber ehrlich gesagt verstehe ich den Code nicht und kann ihn damit auch nicht einbinde.
Also wie muss ich meinen / deinen Code anpassen damit ich eine genaue Frequenz bekomme ohne die Geschwindigkeit zu beeinträchtigen. Und wie binde ich deinen Code zur Ermittelung der Vorherschenden Frequenz ein? :roll: Wäre dankbar wenn du mir das erläutern würdest. Auf das die :idea: komme :-p |
Re: Frequenz von Tönen über Mikrofon ermitteln?
Zitat:
Gruss Reinhard |
Re: Frequenz von Tönen über Mikrofon ermitteln?
Bei Sinustönen kann man auch die Anzahl der Nulldurchgänge ins Verhältnis zur Anzahl der Samples setzen.
Zusammen mit der Samplingfrequenz kommt man so zur Frequenz des Signals. Das dürfte zu genauen Ergebnissen als eine FFT führen. Das Problem ist aber, dass keine Obertöne im Signal enthalten sein dürfen. (digitales Tiefpassfilter vorschalten) Auch Rauschen kann ein Problem sein. Wenn man z.B. feststellt, dass mehrfach ungefähr alle 50 Samples ein Nulldurchgang (Vorzeichenwechsel erkennen) stattgefunden hat und plötzlich 2 Nulldurchgänge knapp hintereinander folgen, muss man diesen doppelten Nulldurchgang als einen zählen. |
Re: Frequenz von Tönen über Mikrofon ermitteln?
Ich als Musiker würde nicht die Gitarre am PC stimmen.
Der Grundton ist der Kammerton A 440 HZ. Die meisten dynamischen (billigeren) Mikrofone heben die Frequenz wegen der besseren Sprachverständlichkeit zwischen 250 und ca. 14 000 Hz an. Das weitere Problem ist, dass selbst bei meiner relativ gute Soundkarte im PC aufgrund von unzureichendem Signalabstand mit dem Mainbord ein nicht unrehebliches Grundrauschen vorwiegend im Bereich von 250 bis ca. 800 Hz vorhanden ist. Das Grundrauschen ist beim normalen Stimmen mit Stimmgerät, abgesehen von Bandproben, über 1 000 Hz. M.f.G Christoph |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz