Virtuellen Audio Treiber mit UMDF



  • Hallo,

    ich brauche eine virtuelle Soundkarte, um die Sounddaten als PCM Stream zu erhalten. Das Beispiel im WinDDK (msvad: pcmex) ist ideal. Leider läuft dieser virtuelle Treiber im kernelspace, und ich muss aber den PCM Stream im Userspace weiterverarbeiten.

    Daher die große Frage: Ist es möglich einen Treiber für eine virtuelle Soundkarte oder eine virtuelle USB Soundkarte mit dem UMDF (User mode driver framework) zu schreiben?

    Theoretisch sollte es möglich sein: http://www.microsoft.com/whdc/driver/wdf/UMDF_FAQ.mspx
    Unter: What are the constraints on user-mode drivers?
    und: UMDF supports devices such as the following ("You can also implement software-only drivers with UMDF.")

    MfG



  • Audiotreiber sind mit UMDF leider nicht möglich.

    Ab Vista könnte man aber ein "sAPO" (System Effect Audio Processing Object) basteln, das sind wohl COM-Objekte die im Usermode laufen.

    Dem ein oder anderen ist evtl. z.B. das sAPO "Bassverstärkung" schon aufgefallen:
    http://res2.windows.microsoft.com/resbox/de/Windows Vista/Main/f/a/faaeaabf-d9b2-463e-a497-13ed78611794/faaeaabf-d9b2-463e-a497-13ed78611794.png

    Hier gibts auch Beispielcode:
    http://www.microsoft.com/whdc/device/audio/vista_sysfx.mspx

    Eine andere Möglichkeit (die aber nur von Software die DirectShow nutzt funktioniert) wäre einen DirectShow Audio Rendering Filter zu schreiben, dieser würde dann zumindest von Software die DirectShow nutzt als Soundkarte angezeigt...



  • @ripmav:
    Die "Standard-Lösung" dafür wäre ein "Hilfs-Gerät", der im Kernelmode mit deinem Audio-Treiber kommuniziert, und die Daten dann in den Usermode hochreicht.

    Dazu erzeugt dein Treiber beim Initialisieren einfach ein 2. Gerät. Dieses 2. Gerät kannst du dann unabhängig vom "primären" aus dem Usermode ansprechen.
    Im Kernelmode reichst du vom Audio-Gerät die Daten an das 2. weiter, welches die Daten z.B. in einen Ringpuffer steckt + ein paar Bookkeeping-Daten mitschreibt (wann ist welches "Sound-Stück" angekommen etc.)

    Für die Kommunikation mit dem Usermode verwendest du dann einfach DeviceIoControl.



  • @geeky:
    Ich habe mir die SysFX Beispiele angesehen, aber es sieht so aus, als ob diese Effekte nicht einfach für eine bestimmte Soundkarte installiert werden können, sondern nur zusammen mit einem Audiotreiber. Die Beispiel-Inf-Datei will z.B. den "CMedia 9880 HD Codec" installieren, der dann im Hardwaremanager auftritt, aber logischerweise nicht gestartet werden kann, da dieses Gerät gar nicht vorhanden ist.

    Funktioniert es überhaupt, ein sAPO als Option zu bereits vorhandenen Soundkarten hinzuzufügen?

    @hustbaer:
    Das verstehe ich nicht. Kannst du das genauer erklären?
    Mit "meinem Audio Treiber" meinst du einen Treiber in der Art von msvad oder?

    @alle
    Was ich mir vorstellen könnte ist, die PCM Daten aus dem msvad Treiber an z.b. eine DLL im userspace weiterzuleiten, aber ist das überhaupt möglich?


Anmelden zum Antworten