Systemlautstärke auslesen und ändern

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    Systemlautstärke auslesen und ändern

    Guten Abend.

    Wie die Überschrift schon sagt, ich suche einen Weg die Systemlautstärke auszulesen und auch festzulegen.
    Die Funktionen WaveOutGetVolume und WaveOutSetVolume sind leider nicht das, was ich brauche, denn diese greifen nur auf die Lautstärke des eigenen Programmes zu, nicht aber auf die Gesamtlautstärke des Systems.
    Kenn jemand eine möglich Lösung?

    Edit: ich konnte inzwischen schon herausfinden, dass ich dafür die MMDevice API und die EndpointVolume API brauche, allerdings komme ich mit den COM-Interop Sachen nicht wirklich klar.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()

    Artentus schrieb:

    allerdings komme ich mit den COM-Interop Sachen nicht wirklich klar.
    Ich verwende zwar nicht die konventionelle Com-Interop Methode, jedoch sollte es funktionieren. Bin mir aber nicht bewusst, dass ich schon entsprechende Unittests erstellt habe. Falls Bugs auftreten sollten einfach auf Codeplex melden. cscore.codeplex.com/SourceCont…PI/AudioEndpointVolume.cs
    Die Klasse sollte jedoch deine Probleme lösen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Habe gerade nochmal nachgeschaut. Habe doch schon immerhin 4 Unittests für die EndpointVolume-Klasse erstellt(siehe Kategorie CoreAudioAPI.EndpointVolume). Zum testen einfach diese ausführen und schauen obs klappt. Zusätzlich haste da auch noch primitive Beispiele zur Verwendung.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Hm, das Problem ist aber, dass das Projekt bei mir nicht kompiliert und es sind zu viele Fehler, als dass ich mich jetzt durch alle durchwühlen würde (zumal ich das wahrscheinlich eh nicht alles verstehen würde).
    Hast du auch eine fertig kompilierte DLL?
    Komisch bisher hat dies bei allen geklappt. Hast du die Projektmappe geöffnet? Ich kann dir natürlich eine compilierte Version geben, jedoch würde es mich interessieren was für Fehler auftreten.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Die komplette Fehlerliste ist im Anhang.
    Die SharpDX-Sachen könnte ich vermutlich noch recht leicht beheben, indem ich die jeweiligen DLLs hinzufüge, aber der Rest?
    Dateien
    • ErrorLog.txt

      (19,75 kB, 419 mal heruntergeladen, zuletzt: )
    SharpDX wird nur bei einem Beispielprojekt verwendet. Öffne einfach den Konfigurations-Manager und entferne den Haken der Spalte Erstellen für das Visualization3D-Projekt.
    s7.directupload.net/images/130727/8ghqr6nk.png


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ah ok, wenn ich nur CSCore statt der Projektmappe erstelle, dann klappts.

    Edit @thefiloe: : gibts dazu auch ein Beispiel, oder muss ich mir das selbst raussuchen?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Artentus“ ()

    thefiloe schrieb:

    Habe doch schon immerhin 4 Unittests für die EndpointVolume-Klasse erstellt(siehe Kategorie CoreAudioAPI.EndpointVolume). Zum testen einfach diese ausführen und schauen obs klappt. Zusätzlich haste da auch noch primitive Beispiele zur Verwendung.
    @Artentus


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Unittests(Komponententests auf Deutsch) sind Test-Methoden in Test-Klassen in einem Test-Projekt ;). Dazu gehst du in Visual Studio einfach in der Menüleiste auf Test > Fenster > Test-Explorer. Es öffnet sich der Test-Explorer. Nun musst du die Projektmappe erstellen und etwas warten(kann beim Ersten mal etwas dauern). Es erscheinen im Testexplorer jede Menge Tests. Ich habe sie durch das TestCategoryAttribute in Kategorien eingeteilt(muss ich nochmals etwas besser machen aber jo). Du wirst eine Kategorie finden mit Namen CoreAudioAPI.EndpointVolume. Dort drinnen befinden sich 4 Unittests. Du kannst nun diese Tests durch einen Rechtsklick ausführen, debuggen,... Doppelklickst du alle einen Test, so gelangst du zu den Sourcen. Diese sind sehr kurz und knapp gehalten aber immerhin. Alternativ findest du die Sourcen im Projekt CSCore.Test in der CoreAudioAPI.cs Datei. Dort drinnen einfach nach EndpointVolume suchen. Ich würde dir aber Raten dich mal etwas in die Thematik einzulesen. Du kannst damit sehr, sehr einfach testen und somit durch ein paar Klicks testen ob noch alles funktioniert. Auch kannst du Profiler verwenden etc. um performance-tests zu machen.

    Ich entwickle auch derzeit eine ASP.NET MVC Applikation wo ich ebenfalls Unittests verwende um die Controller zu testen. Ebenfalls verwende ich UI-Tests, welche du durch ein paar Klicks im Browser generieren lassen kannst. Du kannst damit auch z.B. Verbindungen, Benutzeranzahlen, Angriffe, etc. simulieren und somit die verschiedenen Arten von Tests wiederum je nach Verbindung, Benutzeranzahl, etc. vergleichen. Kenne selbst noch nicht alle Features und das obwohl ich nun schon seit längerem angefangen habe Tests zu erstellen(entdecke aber immer wieder Neues).

    PS: Das was du unter Testprojekten verstehst sind bei mir eher die Beispiele und da hast du recht. Da gibt es keines.


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

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „thefiloe“ ()

    Bei mir wirft das Testprojekt zwei Compilerfehler, die Test erscheinen also nicht im Test-Explorer.

    Quellcode

    1. Fehler 2 Der Typ- oder Namespacename 'DirectSoundOut1' konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) E:\UserName\Dokumente\Visual Studio 2012\Projects\CSCore\CSCore.Test\DirectSoundTest.cs 28 13 CSCore.Test
    2. Fehler 3 Der Typ- oder Namespacename 'DirectSoundOut1' konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) E:\UserName\Dokumente\Visual Studio 2012\Projects\CSCore\CSCore.Test\DirectSoundTest.cs 28 45 CSCore.Test
    Jo das habe ich auch gerade gesehen. Fehler beim Refactorn unterlaufen. Einfach die '1' hinten wegmachen(hätte besser schauen müssen ob alles compiliert bevor ich hochgeladen habe. dachte jedoch, dass Visual Studio das auch hinbekommt alles umzubenennen). Sorry nochmal.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    8| Das liegt nicht an mir. Der Test-Explorer müsste schon funktionieren. Habe damit sehr gute Erfahrungen gemacht.
    EDIT: Nicht gesehen, dass es jetzt klappt. Sag bescheid wenn der Rest auch läuft.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Es scheint alles zu funktionieren.
    Ich hätte aber noch eine Frage: gibts da auch sowas wie Events, wenn sich die Lautstärke ändert? Sonst müsste ich das mit nem Timer pollen, was ja nicht so schön ist.

    Übrigens, es hat meinen Mediaplayer abgeschossen. :D
    Ja gibt es. Siehe CanCreateAudioEndpointVolumeNotification-Unittest.
    Übrigens der einzige Grund weshalb es den Mediaplayer abgeschossen haben kann, ist wenn du die restlichen Unittests ausführst welche teilweise auch den exclusive-mode testen. Dieser schießt alles ab was das Gerät verwendet.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ok, Danke.
    Und ja, ich hab einmal alle Tests ausgeführt. Bei einem gabs übrigens nen Fehler, falls es dich interessiert:

    Quellcode

    1. Testname: CanMuteThroughSimpleAudioVolume
    2. Test FullName: CSCore.Test.CoreAudioAPI.CanMuteThroughSimpleAudioVolume
    3. Testquelle: e:\UserName\Dokumente\Visual Studio 2012\Projects\CSCore\CSCore.Test\CoreAudioAPI.cs Zeile 317
    4. Testergebnis: Fehler
    5. Testdauer: 0:00:00,1125972
    6. Ergebnis Meldung: Die CSCore.Test.CoreAudioAPI.CanMuteThroughSimpleAudioVolume-Testmethode hat eine Ausnahme ausgelöst: CSCore.CoreAudioAPI.CoreAudioAPIException: ISimpleAudioVolume::SetMute returned 0xc0000005
    7. Ergebnis StackTrace:
    8. bei CSCore.CoreAudioAPI.SimpleAudioVolume.set_IsMuted(Boolean value) in e:\UserName\Dokumente\Visual Studio 2012\Projects\CSCore\CSCore\CoreAudioAPI\SimpleAudioVolume.cs:Zeile 62.
    9. bei CSCore.Test.CoreAudioAPI.CanMuteThroughSimpleAudioVolume() in e:\UserName\Dokumente\Visual Studio 2012\Projects\CSCore\CSCore.Test\CoreAudioAPI.cs:Zeile 322.
    Jo interessiert mich. Könntest du mir vll. noch sagen was du für ein System hast inklusive Architektur?
    Und was steht bei Test > Testeinstellungen > standarmäßige architektur?


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