Mikrofon Lautstärkepegel Messen -> Zu hoch -> Warnton



  • Ich habe folgdendes Problem:

    Ich will möglichst simpel ein Programm schreiben, das dein Eingangspegel des Mikrofons misst, ist dieser zu hoch ( zu laut ) , soll dieses einen Piepton abgeben.

    Hat jemand eine Ahnung wie man das am leichtesten lösst ?
    gibts da schon ein Programm ?

    Danke



  • Dafür benötigst du garantiert entsprechende API-Funktionen, BCB-spezifische Sachen gibt's da nicht.

    Ich verschieb dich auf Verdacht mal nach WinAPI. Falls du wider Erwarten unter Linux arbeiten solltest wird ein freundlicher WinAPI-Mod dich sicher umgehend weiterbefördern.



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum Borland C++ Builder (VCL/CLX) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.





  • Eine einfache IsMicrophoneZuLaut() funktion gibt leider nicht. 😉

    Über den Mixer den Microphone Pegel abzufragen ist nicht mit allen Soundkarten möglich. Mit einigen Soundkarten gehts garnicht und andere geben dir nur 0 zurück .. ausserdem ists auch nicht gerade einfach.

    http://www.borg.com/~jglatt/tech/mixer.htm <- sehr gutes Tutorial...
    http://www.codeguru.com/Cpp/G-M/multimedia/article.php/c1575/ <- Mixer Beispiel programme

    Die bessere Methode (die auch überall läuft) wäre einfach mit dem low-level WinAPI funktionen direkt aufzunehmen und sich aus den Daten im Buffer einen eigenen Pegel zubasteln. siehe dazu:

    http://www.borg.com/~jglatt/tech/lowaud.htm <- Aufnahme
    http://www.musicdsp.org/archive.php?classid=2#98 <- Pegel (Envelope follower with different attack and release)

    Aber auch mit der Lösung musst du ein ganzes Stück zu fuss gehen.



  • Vielen Danke erstmal an alle.

    Das Problem ist jedoch das ich noch nie mit der Win API gearbeitet habe bzw. nich genau weiss, was diese bietet. Ich denke daran an eine Sammlung von Funktionen und Schnittstellen zu den verschieden Pereferigeräten. Ist das so richtig?

    Folgendes habe ich bei dem Programm nicht erwähnt :
    Es sollte nicht zu viel Speicher verbrauchen und auch den Sound / das Microfon nicht beeibflussen.

    Wir das mit der Aufnahme-Lösung funktionieren. Gibt es denn da Speicherprobleme -> das Programm würde die ganze Zeit laufen.

    Danke nochmals



  • maYer schrieb:

    Das Problem ist jedoch das ich noch nie mit der Win API gearbeitet habe bzw. nich genau weiss, was diese bietet. Ich denke daran an eine Sammlung von Funktionen und Schnittstellen zu den verschieden Pereferigeräten. Ist das so richtig?

    unter anderem, winapi ist windows (alles was damit zu tun hat)

    maYer schrieb:

    Folgendes habe ich bei dem Programm nicht erwähnt :
    Es sollte nicht zu viel Speicher verbrauchen und auch den Sound / das Microfon nicht beeibflussen.

    sehe ich kein problem

    maYer schrieb:

    Wir das mit der Aufnahme-Lösung funktionieren. Gibt es denn da Speicherprobleme -> das Programm würde die ganze Zeit laufen.

    vermute mal nicht



  • maYer schrieb:

    Folgendes habe ich bei dem Programm nicht erwähnt :
    Es sollte nicht zu viel Speicher verbrauchen und auch den Sound / das Microfon nicht beeibflussen.

    Was das Microfon aufnimmt muss du ja nicht speichern... Aber wenn das Programm im Hintergrund laufen soll und die Audiodaten gleichzeitig woanders benutzt werden dann funktioniert die Aufnahmelösung nicht. (Oder nur mit riesem Aufwand und geteilten Speicherbereichen.. 🙂 lassen wir das)

    Bleibt noch die Lösung mit der Mixer API... Wenn du des Englisch mächtig bist dann schau mal hier http://www.borg.com/~jglatt/tech/mixer.htm rein. Da gibts nen Einstieg in den Mixer. Aber selbst diese lange doku gibt dir nur einen Einstieg. Wie das konkret mit dem Pegel des Mics geht steht nicht drin. Ich hab mich vor ner Woche auch das erste mal mit dem Mixer beschäftigt und bin soweit gekommen das ich weiss das du prüfen musst ob die SourceLine die vom Microphone kommt und zur DestinationLine des Wavein ADC geht ein Control der Klasse MIXERCONTROL_CT_CLASS_METER hat. Vielleicht gibts das Control auch nicht in der SourceLine sondern direkt in der DestinationLine des Wavein ADC (Soundkarten abhängig). Vielleicht gibts das auch garnicht (wie bei meinem Gericom Laptop). 😉 Das Control müsstest du dann öffnen und ständig (mit Timer) überprüfen.
    Zum Thema Mixer wird übrigens in den meisten WinAPI Foren (english und deutsch) konsequent geschwiegen... Ist sehr kompliziert und oft auch noch Treiberabhängig.

    Wie gesagt eine IsMicrophoneZuLaut() funktion gibts nicht mal ansatzweise. Und der Weg dorthin ist ziemlich steinig wenn dein Programm nicht direkt mit den WaveIn APIs darauf zugreifen darf. 😞


Anmelden zum Antworten