Sound Frequenz Detektor

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Sound Frequenz Detektor

    Hallo,
    Folgendes Problem:
    Ich würde gerne Label haben, welches die Frequenz des momentan abgespielten Sounds, bzw des momentan eingehenden Sounds (mic-Eingang) anzeigt.
    Habe jetzt mehrere Stunden rumgegoogelt und nichts gefunden was mir weiter hilft.
    Gibt es da nicht eine Funktion, welche mir einfach die Frequenz des eingehenden Sounds als Wert in HZ ausgibt?
    Ich verwende vb.net 2008
    Mfg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gelöschter Benutzer“ ()

    die meisten Sounds bestehen aus kombinierten Frequenzen. Dafür gibt es die sogenannte FourrierTransformation, was du benötigst ist eine sogenannte ShortTimeFourrierTransformation oder auch FastFourrierTransformation(FFT)
    de.wikipedia.org/wiki/Schnelle_Fourier-Transformation
    Kannst dir nach Implementierungen gucken, oder versuchen es selbst zu verstehen ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @Gelöschter Benutzer Willkommen im Forum. :thumbup:
    Über welche Programmiererfahrung verfügst Du?
    Bist Du hier um zu lernen
    oder
    möchtest Du lediglich Code abgereifen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Sowas erklärt dir hier keiner bis ins Details. Das ist zu kompliziert. Du hast zwei Möglichkeiten, FFT durchlesen, verstehen oder eine Bibliothek verwenden. In welcher Form liegt denn überhaupt das Signal vor? Bräuchtest dieses in Samples (vorzugsweise in 32 bit floats).


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Gelöschter Benutzer schrieb:

    ein wenig erklärt
    Der Sound, der als Auslenkung = Funktion(Zeit) auf die Lautsprecher geht, wird durch die FFT als Spektrum = Funktion(Frequenz) hin- und her transformiert.
    Damit das ganze ordentlich funktioniert, werden relativ kurze Zeitspannen (z.B. 4096 Samples) transformiert, danach die nächsten n Samples usw.
    Wie das zu rechnen ist, solltest Du selbst rauskriegen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich glaube eher weniger, dass du in diesem Forum jemanden findest, der dir FFT halbwegs ausführlich erklärt.
    Kannst dir das mal anhören, ist aber grob

    trotzdem wirst du daraus kaum einen Code erstellen. Dazu brauchst du dann nochmal mehr, wenn überhaupt.
    Ich würde dir empfehlen etwas fertiges zu nehmen, würde ich persönlich bei soetwas wohl auch tun.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Wobei es eine Funktion wie die von dir gesuchte Frequenz(Zeit) es gibt. Du bekommst eben maximal ein Frequenzspektrum mit n Frequenzbändern welche die Anteile der jeweiligen Frequenzen darstellen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Danke für die schnellen antworten.

    Am besten erkläre ich mal kurz wofür ich das ganze überhaupt brauche:

    Ich habe:
    - Ein Analogfunkgerät mit Audioausgang
    - Einen PC
    - Und hoffentlich bald die benötigte Software ^^

    Ich möchte das Analogfunkgerät an den Audioeingang des PCs anschließen, sodass alles was am Funk ankommt, aufgezeichnet bzw ausgewertet werden kann.

    Die Software soll alles was am Soundeingang des PCs ankommt "überwachen" und 5-Ton Folgen erkennen.
    (de.wikipedia.org/wiki/5-Ton-Folge)
    Sollte eine bestimmte 5-Ton Folge am Funk ankommen, so soll eine Aktion ausgeführt werden.
    Eine 5-Ton Folge kann z.B. sein "81130"
    Hierbei kommen am Funk 5 Piepsten an, welche einer bestimmten Frequenz entsprechen.
    Diese Frequenz wird einer Zahl zwischen 0 und 9, oder dem Buchstaben R zugeordnet.

    Ich möchte letztendlich, das eben diese Ton Frequenzen erkannt werden, in die entsprechende Zahl "umgewandelt" werden, und mir dann die 5-Ton folge angezeigt wird.

    Die Zuordnung 'Frequenz -> Zahl" ist der Tabelle des Wikipedia Artikels zu entnehmen (de.wikipedia.org/wiki/5-Ton-Folge#Kodierung)
    codeproject.com/Articles/9388/…plement-the-FFT-algorithm
    Da ist es relativ einfach Implementiert, musst es nur noch nach VB .Net übersetzen
    developerfusion.com/tools/convert/csharp-to-vb/
    (Fehler die auftreten können korrigieren)

    Und somit erstmal die Frequenz anzeige zum laufen bekommen, der rest dürfte dann relativ einfach werden.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---