Frequenzmessung über die Soundkarte

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von SystemUnknow.

    Frequenzmessung über die Soundkarte

    Hallo Leute,
    Ich habe ein Problem, bei dem ich Eure Hilfe benötige. Eventuell ist das für Euch eine ganz kleine Sache!?
    Im Vorfeld: Ich programmiere erst seit kurzem mit Visual Basic 2010 Express. Macht Riesen-Spaß, aber ich habe leider nur Uralt-Erfahrungen mit klassischem Basic, QBasic, Pascal, Cobol etc…!

    Die Aufgabe: Ich möchte Frequenzen eines geologischen Messgerätes (Hat lediglich eine akustische Ausgabe!) über die Soundkarte eines kleinen Netbooks abgreifen und loggen.
    Stand: Das eigentliche Programm mit Bedieneroberfläche, Logger und Konverter ist als Grundgerüst komplett, nur fehlt mir der Teil der Frequenzmessung.Das gestaltet sich für mich schwieriger als erwartet!
    Was mir fehlt: Ich benötige einen Code-Schnipsel, wie ich per FFT? / BASS.DLL?/ API? / DirectX? oder ähnlichem eine Frequenzmessung des Soundkarteneingangs bei Tastendruck starte.

    Sprich: Button gedrückt => Ausgabe eines numerischen Wertes (Frequenz in Hz)
    In etwa so etwas wie der Frequency-Counter unter
    techmind.org/audio/

    Alles was ich sonst im Netz gefunden habe, waren komplette Programme, endloser Code für Delphi oder für uralte VB-Versionen oder hat einfach nicht funktioniert!
    Kann mir jemand helfen???
    Vielen Dank im voraus und
    Freundliche Grüße aus Hessen

    Andy
    Mal sehen, ob ich Dich richtig verstanden habe:
    Deine Signalquelle ist ANY, arbeitet quasi permanent, ist mit der Soundkarte verbunden und Du hast einen Stream organisiert, der die ANY-Signale in einem VB-Programm bereitstellt.
    Und nun suchst Du die Möglichkeit, die Werte dieses Streams numerisch auszuwerten.
    a) Du hast noch keine Erfahrung mit numerischer Auswertung von Daten. ==> organisiere, dass Du bei b) weitermachen kannst.
    Oder
    b) Du hast bereits Erfahrung mit numerischer Auswertung von Daten.

    Organisiere Dir einen wie auch immer gearteten Code, der 1-dimensionale FFT macht.
    Mache Dich mit dieser FFT vertraut, organisiere den FFT-Code in einer Assembly (zur weiteren Verwendung).
    Beispiel-Aufruf:
    MyFftTo(MyAnyData) => MyAnyData werden in den Frequenzbereich transformiert.
    MyFftFrom(MyAnyData) => MyAnyData werden in den Ortsbereich zurücktransformiert.
    Rechne mehrere Testdaten und sieh Dir den Output graphisch an (Excel macht sich da gut).
    Testdaten: Rechteck-Funktion, Dreieckfunktion, Sinusfunktion usw. mit 1, 2, 3, ... Perioden und unterschiedlicher Anzahl von Messpunkten (2 ^ n).

    Wenn alles läuft und Du ein gutes Gefühl hast, geht's weiter.
    Kalibrierung.
    Organisiere Dir einen Frequenzgenerator, verbinde ihn mit der Soundkarte. Stelle eine Frequenz ein und sieh Die an, was rauskommt.
    Jetzt solltest Du Dich auf eine feste Anzahl von Messpunkten festlegen, diese ggf. auswählbar machen (2 ^ m).
    Wenn eine ganze Anzahl von Sinus-Wellen in Dein Messfeld passt, kommt ein einziger Wert raus. Ist dem nicht so, hast Du ein mehr oder weniger breites Maximum. Da musst Du das Maximum bestimmen.
    So bekommst Du eine Zuordnung von Frequenzen zu Messwerten.

    Und nun ist die Frequenzmessung Deiner ANY-Daten nur noch ein Kinderspiel.
    Viel Vergnügen. :rolleyes:
    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!

    Frequenzmessung über Soundkarte mit BASS.DLL

    Hmmmm,….vielen Dank für die ausführliche Antwort!

    Ich habe mich inzwischen auf die BASS.DLL eingeschossen und sie in mein Programm implementiert.
    Allerdings gelingt es mir nicht, mit BASS_CHANNELGETDATA auf Tastendruck aus den FFT-Daten die über den Micro-Eingang kommen eine Frequenz/Tonhöhe zu ermitteln….
    Ich habe mir hier im Forum bereits mehrere Beispiel-Codes angesehen, aber es funktioniert einfach nicht.

    Könnte mir eventuell einer der BASS-Spezialisten eventuell die benötigten 5 Zeilen Code entwickeln…?
    Bin echt inzwischen am Verzweifeln!

    Gruss
    Andy
    Wenn Du die FFT als BlackBox betreibst, wirst Du keinen Erfolg haben.
    Generiere Dir Testdaten und sieh Dir an, was nach der FFT rauskommt.
    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!
    Gibt es den eine sinnvollere Lösung die Frequenz am Mic-Eingang mit BASS zu ermitteln?
    UND: Könnte mir eventuell einer der BASS-Spezialisten eventuell die benötigten 5 Zeilen Code entwickeln…?
    Ich habe schon Stunden aufgewendet und es gelingt mir einfach nicht! :(
    Hier ist ja sogar ein komplettes Tutorial:
    [VB.NET] Bass.Dll Tutorial
    aber es gelingt mir trotzdem nicht, die notwenigen Zeilen so zusammen- und umzustellen, so dass der MIC-Eingang abgefragt wird und die Frequenz kann ich auch nicht ermitteln/ausrechnen...!

    Help! Wie geht das??? Ein paar Zeilen Code würden mir echt helfen! :wacko:
    Kannst Du irgendwie MIC-Daten über Bass einlesen (ich denke da an einen Stream)?
    Solange das nicht funktioniert, musst Du Dir über die Berechnung der Frequenz keinen Kopf machen.
    Sieh mal hier:
    Mic-Eingang auslesen
    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!
    Die richtige Antwort wäre:
    Ja, ich hab die Daten in einem File gespeichert und mir die Kurve in Excel angesehen, sieht gut aus.
    Also:
    Ja oder Ob? :S
    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!
    Da hast Du die Frage

    RodFromGermany schrieb:

    Was ist denn der Output von BASS?

    bereits falsch beantwortet. X(
    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!
    Kein Problem.
    Ich habe dieses Problem anders gelöst und wollte sehen, ob ich Deinen Input auf meine Lösung ziehen kann.
    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!
    Das Problem ist, dass Du die richtigen Fragen stellen musst.
    Und ich frage nach, wenn das Thema gut und Frage etwas unklar ist. Ganz einfach.
    Gut. Dann lass ich Dich jetzt in Ruhe. Schönes Wochenende.
    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!