ISimpleAudioVolume und IAudioMeterInformation von eigenen Programm ermitteln

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    ISimpleAudioVolume und IAudioMeterInformation von eigenen Programm ermitteln

    Hi

    Ich kenne den Weg um an die Interfaces ISimpleAudioVolume und IAudioMeterInformation vom eigenen Programm zu kommen. Normalerweise über IAudioSessionControl2.GetProcessId und der ProcessID des eigenen Programmes. Soweit so gut. Hab ich schon mehrfach gemacht. Jetzt hab ich mal die Interfaces IMFMediaEngine/IMFMediaEngineEx verwendet um Audio- bzw Video-Dateien/Streams wiederzugeben. Das läuft. Im Mixer ist auch eine entsprechende AudioSession zu sehen. Problem ist, IAudioSessionControl2.GetProcessId liefert mir keine ProcessID zurück (auch kein Wert von AudioSessionControl2.GetDisplayName) und kann daher auch nicht feststellen welche AudioSession nun von meinem Programm ist. Nur IAudioSessionControl2.GetSessionIdentifier und IAudioSessionControl2.GetSessionInstanceIdentifier liefern Werte zurück.

    Klar könnte ich vor dem erstellen von IMFMediaEngine/IMFMediaEngineEx die AudioSessions auflisten und danach. Das was dann neu in der Liste ist, ist dann meine AudioSession. Dies aber nur falls es keine andere Lösung gibt.

    Die Frage ist, gibt es noch einen Weg um festzustellen welche AudioSession zu meinem Programm gehört (SessionIdentifier?, SessionInstanceIdentifier?) bzw gibt es eine direkte Möglichkeit über die Interfaces IMFMediaEngine/IMFMediaEngineEx an die entsprechenden Interfaces ISimpleAudioVolume und IAudioMeterInformation zu kommen?

    Für einen Schupser in die richtige Richtung wäre ich sehr dankbar. Wenn es dazu Code gibt, kann das auch in C++, C#, Delphi, VB6 oder in einer anderen Sprache sein (bis auf ein paar wenige die ich nicht lesen kann). Ich wurschtel mich da schon durch. ^^
    Mfg -Franky-
    Hi, Problem solved.

    IAudioSessionControl2.GetProcessId gibt doch eine ProzessID zurück. Mein Fehler war, ich hab nur auf HRESULT = S_OK geprüft. Ich muss noch auf HRESULT = AUDCLNT_S_NO_SINGLE_PROCESS prüfen und dann steht in der ProcessID die Initial-ProcessID von meinem Programm.
    Mfg -Franky-