AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Frequenz von Tönen über Mikrofon ermitteln?
Thema durchsuchen
Ansicht
Themen-Optionen

Frequenz von Tönen über Mikrofon ermitteln?

Offene Frage von "LLiinnuuxx"
Ein Thema von Marcer · begonnen am 4. Mai 2007 · letzter Beitrag vom 26. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
Marcer

Registriert seit: 4. Mai 2007
8 Beiträge
 
#1

Frequenz von Tönen über Mikrofon ermitteln?

  Alt 4. Mai 2007, 20:28
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
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)
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Frequenz von Tönen über Mikrofon ermitteln?

  Alt 4. Mai 2007, 20:38
Herzlich willkommen in der DP.

Ich denke mal Hier im Forum suchenMCI und Hier im Forum suchenFFT sollten dir dabei helfen!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Marcer

Registriert seit: 4. Mai 2007
8 Beiträge
 
#3

Re: Frequenz von Tönen über Mikrofon ermitteln?

  Alt 4. Mai 2007, 20:56
Vielen dank!
Ich werd mir das erstmal durchlesen..
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#4

Re: Frequenz von Tönen über Mikrofon ermitteln?

  Alt 5. Mai 2007, 03:28
Hi

Du kannst dazu die Bass.dll benutzen

das sollte dir auch helfen!
  Mit Zitat antworten Zitat
LLiinnuuxx

Registriert seit: 11. Jan 2006
Ort: Rickelrath
3 Beiträge
 
Delphi 3 Professional
 
#5

Re: Frequenz von Tönen über Mikrofon ermitteln?

  Alt 24. Jan 2008, 23:29
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;
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Frequenz von Tönen über Mikrofon ermitteln?

  Alt 24. Jan 2008, 23:42
In der Code Library ist von mir eine FFT/DFT-Implementierung für Delphi. (http://www.delphipraxis.net/internal...t.php?t=105205)

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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
LLiinnuuxx

Registriert seit: 11. Jan 2006
Ort: Rickelrath
3 Beiträge
 
Delphi 3 Professional
 
#7

Re: Frequenz von Tönen über Mikrofon ermitteln?

  Alt 25. Jan 2008, 16:48
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?

Wäre dankbar wenn du mir das erläutern würdest.

Auf das die komme :-p
MfG Christoph
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#8

Re: Frequenz von Tönen über Mikrofon ermitteln?

  Alt 25. Jan 2008, 17:10
Zitat von LLiinnuuxx:
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?
...
Die Physik lässt sich nun mal nicht betrügen: um 0.1 Hz zu messen, brauchst du eine Messzeit von mindestens 10 sec. Also bei 44 kHz Abtastung rund eine halbe Mio Messwerte. Du kannst natürlich eine Software schreiben, die in einem Sekundenbruchteil Frequenzen mit 2 Nachkommastellen ausgibt, aber die sind dann nicht mehr wert als reine Zufallszahlen.

Gruss Reinhard
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Frequenz von Tönen über Mikrofon ermitteln?

  Alt 25. Jan 2008, 17:44
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.
Andreas
  Mit Zitat antworten Zitat
Christoph Musik

Registriert seit: 25. Jan 2008
Ort: Sindelfingen
5 Beiträge
 
#10

Re: Frequenz von Tönen über Mikrofon ermitteln?

  Alt 25. Jan 2008, 23:35
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz